修正 fa fab 的字体优先级,微信、QQ、微博等图标现在使用 Brands 字体。
This commit is contained in:
1 parent
3312323f6e
commit
13ed02c93a
4 files changed
+28
No files matched your search
@@ -42,6 +42,13 @@ a[href] {
|
|||||||
transition: color 0.2s, background 0.3s, opacity 0.3s, box-shadow 0.3s, transform 0.3s;
|
transition: color 0.2s, background 0.3s, opacity 0.3s, box-shadow 0.3s, transform 0.3s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Font Awesome 5: when legacy markup includes both `fa` and `fab`, the
|
||||||
|
* generic Solid rule must not override the Brands font face. */
|
||||||
|
.fa.fab {
|
||||||
|
font-family: "Font Awesome 5 Brands";
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
.skip-link {
|
.skip-link {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: 16px;
|
left: 16px;
|
||||||
|
|||||||
@@ -215,6 +215,13 @@ class SchemaProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($type, ['select', 'radio', 'palette', 'image_select'], true) && !empty($field['options'])) {
|
if (in_array($type, ['select', 'radio', 'palette', 'image_select'], true) && !empty($field['options'])) {
|
||||||
|
// Optional enum fields use an empty string to mean "unset".
|
||||||
|
// This is required for clearable palettes such as the footer
|
||||||
|
// background preset, whose default is intentionally empty.
|
||||||
|
if ($value === '' && empty($field['required'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$valid_values = array_column($field['options'], 'value');
|
$valid_values = array_column($field['options'], 'value');
|
||||||
// Multi-select: accept array values when schema.multiple is set
|
// Multi-select: accept array values when schema.multiple is set
|
||||||
// (legacy / SPA may still use type=select multiple).
|
// (legacy / SPA may still use type=select multiple).
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ const provider = read('src/Admin/SchemaProvider.php')
|
|||||||
const settingsFacade = read('src/Settings/Settings.php')
|
const settingsFacade = read('src/Settings/Settings.php')
|
||||||
const scriptsPart1c = read('src/Core/ScriptsPart1c.php')
|
const scriptsPart1c = read('src/Core/ScriptsPart1c.php')
|
||||||
const footerCss = read('assets/css/frontend/footer/zibll-shell.css')
|
const footerCss = read('assets/css/frontend/footer/zibll-shell.css')
|
||||||
|
const frontendBaseCss = read('assets/css/frontend/base.css')
|
||||||
const headerMenuButtons = read('inc/helpers/aksrt-header-menu-buttons.php')
|
const headerMenuButtons = read('inc/helpers/aksrt-header-menu-buttons.php')
|
||||||
|
|
||||||
function activeRepositorySource() {
|
function activeRepositorySource() {
|
||||||
@@ -178,6 +179,17 @@ test('front-end page-display consumers read only the canonical section contracts
|
|||||||
assert.doesNotMatch(scriptsPart1c, /\$runtime_routes\[['"]cart['"]\]/)
|
assert.doesNotMatch(scriptsPart1c, /\$runtime_routes\[['"]cart['"]\]/)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('footer brand icons keep the Brands font when legacy fa prefix is present', () => {
|
||||||
|
const footer = read('footer.php')
|
||||||
|
const icons = read('inc/helpers/aksrt-icons.php')
|
||||||
|
|
||||||
|
assert.match(footer, /class="fa fab fa-weixin"/)
|
||||||
|
assert.match(footer, /class="fa fab fa-qq"/)
|
||||||
|
assert.match(footer, /class="fa fab fa-weibo"/)
|
||||||
|
assert.match(frontendBaseCss, /\.fa\.fab\s*\{[^}]*font-family:\s*"Font Awesome 5 Brands"[^}]*font-weight:\s*400/s)
|
||||||
|
assert.match(icons, /'wechat'\s*=>\s*'fa fab fa-weixin'/)
|
||||||
|
})
|
||||||
|
|
||||||
test('save contract rejects invalid input and round-trips canonical nested values', () => {
|
test('save contract rejects invalid input and round-trips canonical nested values', () => {
|
||||||
const result = spawnSync(process.env.PHP_BINARY || 'php', [path.join(__dirname, 'page-display-save-harness.php')], {
|
const result = spawnSync(process.env.PHP_BINARY || 'php', [path.join(__dirname, 'page-display-save-harness.php')], {
|
||||||
cwd: root,
|
cwd: root,
|
||||||
|
|||||||
@@ -167,6 +167,8 @@ namespace {
|
|||||||
$header_clean = $provider->sanitize_payload('page_display', $header_payload, 'header-components');
|
$header_clean = $provider->sanitize_payload('page_display', $header_payload, 'header-components');
|
||||||
|
|
||||||
$footer_payload = [
|
$footer_payload = [
|
||||||
|
// Empty means no preset background; it must remain a valid optional palette value.
|
||||||
|
'footer_theme_bg' => '',
|
||||||
'fcode_t1_code' => '<strong>Allowed</strong><script>bad()</script>',
|
'fcode_t1_code' => '<strong>Allowed</strong><script>bad()</script>',
|
||||||
'footer_contact_weibo' => 'javascript:alert(1)',
|
'footer_contact_weibo' => 'javascript:alert(1)',
|
||||||
'footer_mini_img' => [[
|
'footer_mini_img' => [[
|
||||||
|
|||||||
Reference in new issue
Block a user