feat(auth): rebuild the sign-in surfaces on the shared sign-card contract
The login/register page and the auth modal had drifted into a parallel system: floating-input fields, a sign-page-card shell and a bespoke jio-auth-modal wrapper that none of the theme's own sign CSS targeted. The reference card rules (.sign, .sign-img, .sign-content, .line-form-input, .scale-placeholder, .social_loginbar, .title-h-left, #u_sign .modal-dialog, .qrcode-signin-container) have been in main.css all along, so the fix is to render the reference DOM instead of re-styling a second one. auth-content.php now emits one .sign.jio-panel.blur-bg.relative card with a .tab-content of #tab-sign-in / #tab-sign-up / #tab-resetpassword / #tab-qrcode-signin / #tab-bind panes. Each pane opens with a .title-h-left.fa-2x heading plus a .muted-color.px12 link, fields are .relative.line-form.mb10 > .line-form-input + .scale-placeholder + .line-form-line, the verification trigger is the .yztx.abs-right captchsubmit button, and submits are .but.radius.jb-blue|jb-green.padding-lg.btn-block. Social entries come from the shared render_social_buttons() separator + .social_loginbar, and the OAuth bind pane uses the oauth-data-box avatar card. The modal shell is #u_sign.modal > .modal-dialog > .sign-content > .sign-img.absolute.hide-sm + .sign, and the page shell is the reference .container.sign-page > .row.sign-row.gutters-5 > .col-md-6(.col-md-offset-6/ .col-md-offset-3).sign-col with a .fixed.lazyload background and a blurred fixed footer. auth.js drives .in instead of .is-open, toggles the new password/signin-mode/invite-gate controls and no longer touches the retired markup. The page also drops two footer-hook removals that targeted functions which no longer exist, and opts out of the fixed-nav offset. The sign page's custom theme setting now actually applies: Router answers jio_forced_theme_mode, jioData.themeForced wins over the stored cookie in theme.js, theme-toggle positions are suppressed, and the page marks html/body dark or white accordingly. sign.css shrinks from ~114 lines of bespoke component styling to a thin positioning layer, and the retired classes are gone rather than kept. Verification: php -l on every changed PHP file, node --check on both JS files, node --test across widget-system, navigation and front-submit (873 passing), and tools/audit-psr4-paths.php / audit-admin-contracts.php both at 0 errors. assets/js/runtime/main.min.js was rebuilt because theme.js gained the forced theme branch.
This commit is contained in:
1 parent
d40906b4a3
commit
41366e7fc4
15 files changed
+664
-281
No files matched your search
@@ -25,6 +25,8 @@ final class Router {
|
||||
add_action('init', [$this, 'register_rewrite_rules']);
|
||||
add_filter('template_include', [$this, 'handle_template_include'], 99);
|
||||
add_action('init', [$this, 'maybe_flush_rewrite_rules']);
|
||||
add_filter('jio_forced_theme_mode', [$this, 'filter_sign_theme_mode']);
|
||||
add_filter('jio_theme_mode_button_positions', [$this, 'filter_sign_theme_positions']);
|
||||
|
||||
add_filter('login_url', [$this, 'filter_login_url'], 10, 3);
|
||||
add_filter('lostpassword_url', [$this, 'filter_lostpassword_url'], 10, 2);
|
||||
@@ -75,6 +77,32 @@ final class Router {
|
||||
return $template;
|
||||
}
|
||||
|
||||
/** 登录页「自定义主题」:强制日间 / 夜间模式。 */
|
||||
public function filter_sign_theme_mode(string $mode): string {
|
||||
$override = $this->sign_theme_mode_override();
|
||||
return $override !== '' ? $override : $mode;
|
||||
}
|
||||
|
||||
/** 登录页强制主题时不显示主题切换按钮。 */
|
||||
public function filter_sign_theme_positions(array $positions): array {
|
||||
return $this->sign_theme_mode_override() !== '' ? [] : $positions;
|
||||
}
|
||||
|
||||
private function sign_theme_mode_override(): string {
|
||||
$is_sign = get_query_var('jio_sign') || (function_exists('jio_is_auth_page_request') && jio_is_auth_page_request());
|
||||
if (!$is_sign || !class_exists('\Jio\Settings\Settings')) {
|
||||
return '';
|
||||
}
|
||||
$mode = (string) (\Jio\Settings\Settings::sign_page_ui()['theme_mode'] ?? 'no');
|
||||
if ($mode === 'dark-theme') {
|
||||
return 'dark';
|
||||
}
|
||||
if ($mode === 'white-theme') {
|
||||
return 'light';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
public function maybe_flush_rewrite_rules(): void {
|
||||
$rewrite_version = JIO_VERSION . ':sign-router-v3-single-route';
|
||||
if (get_option('jio_auth_routes_flushed') !== $rewrite_version) {
|
||||
|
||||
@@ -463,6 +463,8 @@ trait ScriptsPart1c {
|
||||
'siteUrl' => home_url('/'),
|
||||
'themeUrl' => JIO_URI,
|
||||
'themeMode' => class_exists('\Jio\Settings\Settings') ? \Jio\Settings\Settings::theme_mode_js_value() : 'auto',
|
||||
// 登录页「自定义主题」:强制模式优先于用户保存的 cookie。
|
||||
'themeForced' => (string) apply_filters('jio_forced_theme_mode', ''),
|
||||
'debug' => defined('WP_DEBUG') && WP_DEBUG,
|
||||
'debugLog' => defined('WP_DEBUG') && WP_DEBUG && defined('WP_DEBUG_LOG') && WP_DEBUG_LOG,
|
||||
'postPaginationMode' => class_exists('\Jio\Settings\Settings') ? \Jio\Settings\Settings::get_post_pagination_mode() : 'load_more',
|
||||
|
||||
@@ -394,7 +394,8 @@ class Settings {
|
||||
|
||||
/** 主题模式 → JS 可消费的简化值 (light / dark / time-auto) */
|
||||
public static function theme_mode_js_value(): string {
|
||||
return ThemeSearch::theme_mode_js_value();
|
||||
$mode = (string) apply_filters('jio_theme_mode_js_value', ThemeSearch::theme_mode_js_value());
|
||||
return in_array($mode, ['light', 'dark', 'time-auto'], true) ? $mode : 'time-auto';
|
||||
}
|
||||
|
||||
|
||||
@@ -429,7 +430,9 @@ class Settings {
|
||||
|
||||
/** 获取主题切换按钮显示位置列表 */
|
||||
public static function get_theme_mode_button_positions(): array {
|
||||
return ThemeSearch::get_theme_mode_button_positions();
|
||||
$positions = ThemeSearch::get_theme_mode_button_positions();
|
||||
$filtered = apply_filters('jio_theme_mode_button_positions', $positions);
|
||||
return is_array($filtered) ? array_values(array_filter((array) $filtered)) : [];
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user