diff --git a/.gitignore b/.gitignore index eead4ce6..fd00a1e3 100644 --- a/.gitignore +++ b/.gitignore @@ -11,29 +11,9 @@ /.specs/ /docs/ -# tools/: 只版本化两个共享入口,其余为本地脚本。 -/tools/* -!/tools/build-public-assets.mjs -!/tools/wp-cli-visual-fixtures.php -# tests/: 放行整个套件,按名字排除本地专有产物。 -# -# 这里刻意从「逐文件白名单」改为「先放行目录、再逐个排除」的反向写法: -# 白名单要求每新增一个 *.test.cjs 都同步改本文件,一旦漏改,该测试文件会静默 -# 不被跟踪,在 CI 上表现为「测试数量莫名变少」,且极难排查。反向写法下新增测试 -# 自动纳入版本控制,只有确需本地专有的文件才需要追加排除。 -# -# 下列 10 个路径是切换前就已处于「忽略且未跟踪」状态的本地专有文件,逐一保留原状。 -!/tests/ -/tests/visual-results/ -/tests/fixtures/widget-golden-v1.json -/tests/widget-system/a11y-contract.test.cjs -/tests/widget-system/admin-core.test.cjs -/tests/widget-system/captcha-cloud-contract.test.cjs -/tests/widget-system/comment-hard-cut-contract.test.cjs -/tests/widget-system/download-config-contract.test.cjs -/tests/widget-system/run.php -/tests/widget-system/scratch-term-aggregation-harness.php + + /CLAUDE.md /AGENTS.md diff --git a/tests/fixtures/widget-golden-v1.json b/tests/fixtures/widget-golden-v1.json new file mode 100644 index 00000000..24dfdb22 --- /dev/null +++ b/tests/fixtures/widget-golden-v1.json @@ -0,0 +1,7188 @@ +{ + "schema": "aksrt.widget-golden.v1", + "captured_at": "", + "reference": { + "source_root": "C:\\Users\\Xing\\Desktop\\zibll", + "fingerprint": "47516d89bfa2a7984551ee7e4d9832ca60e99d5e081567091db9ee00c6d55bdb", + "files": { + "inc/widgets/widget-more.php": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528", + "inc/widgets/widget-posts.php": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409", + "inc/widgets/widget-produck.php": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d", + "inc/widgets/widget-slider.php": "a06a12500cb8ffbf57e496d9979eaed0edd545499ecb9c80d011d3ae49d2244e", + "inc/widgets/widget-user.php": "97a4fde11d0a93af229e499f9b11c8d769b21b6b7500eac9bb94b4dd850f6b24", + "inc/widgets/widget-index.php": "6f15b1b73f909ea7eccf4697b5274a38512deae2e931ae7b0a33e48a5fcd8b25", + "inc/functions/zib-posts-list.php": "ced813182c0b0fc5847ca5c04a57fa4379581ace13a6d40dfb7dfabb55e13ae4", + "inc/functions/zib-category.php": "d5b8a7f2b838c76cc60095645245444b8f3d009d4e0dec234c29971fd976f6a7", + "inc/functions/functions.php": "14ef009b26c8a2560e38486a04946e85c5e382c3432dac9eba0b5c01d6527680", + "js/section-navs.js": "24cc2c5c73932d98f0f346bcf3d62fc1502a9e8eabe31cc477d96efefe37f88d" + }, + "policy": { + "modern_widget_count": 37, + "legacy_modules_ignored": true + } + }, + "acceptance": { + "dimension_delta_px_max": 2, + "pixel_difference_percent_max": 1.5, + "console_errors_max": 0, + "unexpected_network_failures_max": 0, + "a11y_critical_max": 0, + "a11y_serious_max": 0, + "reduced_motion_required": true + }, + "dataset": { + "site": { + "name": "AKSRT 知识库", + "url": "https://fixtures.aksrt.test" + }, + "terms": [ + { + "id": 101, + "taxonomy": "category", + "name": "产品设计", + "count": 24 + }, + { + "id": 102, + "taxonomy": "category", + "name": "前端开发", + "count": 36 + }, + { + "id": 103, + "taxonomy": "post_tag", + "name": "系统课程", + "count": 18 + } + ], + "users": [ + { + "id": 201, + "name": "林知夏", + "role": "讲师", + "points": 9680, + "followers": 3280 + }, + { + "id": 202, + "name": "周屿", + "role": "作者", + "points": 7420, + "followers": 2160 + }, + { + "id": 203, + "name": "陈墨", + "role": "学员", + "points": 5360, + "followers": 980 + } + ], + "posts": [ + { + "id": 301, + "title": "从零构建知识产品体系", + "pay_type": "reading", + "author": 201, + "category": 101 + }, + { + "id": 302, + "title": "现代 WordPress 主题工程实践", + "pay_type": "video", + "author": 202, + "category": 102 + }, + { + "id": 303, + "title": "高质量课程资料包", + "pay_type": "download", + "author": 201, + "category": 102 + }, + { + "id": 304, + "title": "视觉案例图库", + "pay_type": "gallery", + "author": 202, + "category": 101 + }, + { + "id": 305, + "title": "会员专属进阶课", + "pay_type": "vip", + "author": 201, + "category": 101 + }, + { + "id": 306, + "title": "公开学习指南", + "pay_type": "no", + "author": 203, + "category": 102 + } + ], + "comments": [ + { + "id": 401, + "user": 203, + "post": 301, + "content": "课程结构清晰,案例非常实用。" + }, + { + "id": 402, + "user": 202, + "post": 302, + "content": "对主题工程化讲解得很完整。" + } + ], + "payment_states": [ + "guest-locked", + "member-locked", + "free", + "purchased", + "vip-authorized", + "unconfigured" + ], + "media": { + "images": [ + "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "https://fixtures.aksrt.test/media/course-cover-03.jpg" + ], + "video": "https://fixtures.aksrt.test/media/lesson.m3u8" + } + }, + "components": { + "search": { + "id_base": "aksrt_widget_search", + "name": "AKSRT 搜索框", + "group": "general", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "placeholder", + "search_style" + ], + "settings": { + "title": "AKSRT · Search", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/search", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/search", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/search", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "placeholder": "输入关键词搜索", + "search_style": "button" + }, + "root_selector": "[data-aksrt-widget=\"search\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "posts_toc": { + "id_base": "aksrt_widget_posts_toc", + "name": "AKSRT 文章目录树", + "group": "general", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "title", + "mini_title", + "in_affix" + ], + "settings": { + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "title": "AKSRT · Posts toc", + "mini_title": "AKSRT mini title 1", + "in_affix": false + }, + "root_selector": "[data-aksrt-widget=\"posts_toc\"]", + "states": [ + "default", + "hover", + "focus", + "expanded" + ] + }, + "quote": { + "id_base": "aksrt_widget_quote", + "name": "AKSRT 一言", + "group": "general", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "source", + "quotes", + "interval" + ], + "settings": { + "title": "AKSRT · Quote", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/quote", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/quote", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/quote", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "source": "local", + "quotes": "保持好奇,持续创造。\n知识因为分享而更有价值。", + "interval": 30 + }, + "root_selector": "[data-aksrt-widget=\"quote\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "icon_cards": { + "id_base": "aksrt_widget_icon_cards", + "name": "AKSRT 图标卡片(竖版)", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "show_widget_bg", + "pc_row", + "m_row", + "size", + "cards" + ], + "settings": { + "title": "AKSRT · Icon cards", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "show_widget_bg": false, + "pc_row": "2", + "m_row": "2", + "size": 0, + "cards": [ + { + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 1", + "link": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "icon_radius": false, + "icon_class": "c-yellow", + "icon_color": "key-color", + "icon_custom_color": "#667eea", + "title": "AKSRT · Icon cards", + "desc": "AKSRT desc 1" + }, + { + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 2", + "link": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "icon_radius": false, + "icon_class": "c-yellow", + "icon_color": "key-color", + "icon_custom_color": "#667eea", + "title": "AKSRT · Icon cards", + "desc": "AKSRT desc 2" + }, + { + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 3", + "link": { + "url": "https://fixtures.aksrt.test/icon_cards", + "text": "查看详情", + "target": "" + }, + "icon_radius": false, + "icon_class": "c-yellow", + "icon_color": "key-color", + "icon_custom_color": "#667eea", + "title": "AKSRT · Icon cards", + "desc": "AKSRT desc 3" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"icon_cards\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "video": { + "id_base": "aksrt_widget_video", + "name": "AKSRT 视频", + "group": "general", + "size": "any", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "url", + "poster", + "autoplay", + "muted", + "ratio" + ], + "settings": { + "title": "AKSRT · Video", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/video", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/video", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/video", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "url": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "poster": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "autoplay": false, + "muted": false, + "ratio": "16:9" + }, + "root_selector": "[data-aksrt-widget=\"video\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "embed": { + "id_base": "aksrt_widget_embed", + "name": "AKSRT 超级嵌入", + "group": "general", + "size": "any", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "url", + "ratio", + "allow_fullscreen" + ], + "settings": { + "title": "AKSRT · Embed", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/embed", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/embed", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/embed", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "url": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "ratio": 56.25, + "allow_fullscreen": true + }, + "root_selector": "[data-aksrt-widget=\"embed\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "media_cards": { + "id_base": "aksrt_widget_media_cards", + "name": "AKSRT 图文视频封面卡片", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "pc_row", + "m_row", + "mask_opacity", + "height_scale", + "font_size_pc", + "font_size_m", + "font_bold", + "font_color", + "covers" + ], + "settings": { + "title": "AKSRT · Media cards", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "pc_row": "4", + "m_row": "2", + "mask_opacity": 10, + "height_scale": 30, + "font_size_pc": 18, + "font_size_m": 14, + "font_bold": false, + "font_color": "#667eea", + "covers": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "hide": "", + "title": "AKSRT · Media cards", + "link": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + } + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "hide": "", + "title": "AKSRT · Media cards", + "link": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + } + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "hide": "", + "title": "AKSRT · Media cards", + "link": { + "url": "https://fixtures.aksrt.test/media_cards", + "text": "查看详情", + "target": "" + } + } + ] + }, + "root_selector": "[data-aksrt-widget=\"media_cards\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "icon_cover_cards": { + "id_base": "aksrt_widget_icon_cover_cards", + "name": "AKSRT 图标卡片(横版)", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "show_widget_bg", + "icon_radius4", + "cards" + ], + "settings": { + "title": "AKSRT · Icon cover cards", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": "4", + "m_row": "2", + "show_widget_bg": false, + "icon_radius4": false, + "cards": [ + { + "title": "AKSRT · Icon cover cards", + "desc": "AKSRT desc 1", + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 1", + "icon_class": "c-yellow", + "link": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Icon cover cards", + "desc": "AKSRT desc 2", + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 2", + "icon_class": "c-yellow", + "link": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Icon cover cards", + "desc": "AKSRT desc 3", + "icon": "fa fas fa-graduation-cap", + "customize_icon": "AKSRT customize icon 3", + "icon_class": "c-yellow", + "link": { + "url": "https://fixtures.aksrt.test/icon_cover_cards", + "text": "查看详情", + "target": "" + } + } + ] + }, + "root_selector": "[data-aksrt-widget=\"icon_cover_cards\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "partners": { + "id_base": "aksrt_widget_partners", + "name": "AKSRT 横向滚动合作伙伴", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "rows", + "m_rows", + "style_type", + "card_width", + "card_height", + "card_bg", + "card_radius", + "speed", + "direction", + "pause_hover", + "show_widget_bg", + "go_link", + "end_fade", + "link_type", + "link_cats", + "link_limit", + "link_orderby", + "page_links_order", + "partners" + ], + "settings": { + "title": "AKSRT · Partners", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "rows": "3", + "m_rows": "3", + "style_type": "card", + "card_width": 200, + "card_height": 60, + "card_bg": true, + "card_radius": 16, + "speed": 3, + "direction": "alternate", + "pause_hover": true, + "show_widget_bg": false, + "go_link": true, + "end_fade": true, + "link_type": "link", + "link_cats": [], + "link_limit": 50, + "link_orderby": "name", + "page_links_order": "ASC", + "partners": [ + { + "title": "AKSRT · Partners", + "desc": "AKSRT desc 1", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Partners", + "desc": "AKSRT desc 2", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Partners", + "desc": "AKSRT desc 3", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/partners", + "text": "查看详情", + "target": "" + } + } + ] + }, + "root_selector": "[data-aksrt-widget=\"partners\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide" + ] + }, + "combo_info": { + "id_base": "aksrt_widget_combo_info", + "name": "AKSRT 复合信息卡片", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "pc_row", + "m_row", + "pc_gap", + "m_gap", + "card_radius", + "top_band", + "top_band_height", + "go_link", + "cta_text", + "cta_color", + "cards" + ], + "settings": { + "title": "AKSRT · Combo info", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "pc_row": "4", + "m_row": "1", + "pc_gap": "10", + "m_gap": "5", + "card_radius": 16, + "top_band": true, + "top_band_height": 150, + "go_link": true, + "cta_text": "立即体验", + "cta_color": "", + "cards": [ + { + "title": "AKSRT · Combo info", + "icon": "fa fas fa-graduation-cap", + "icon_image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "tags": [ + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + } + ], + "desc": "AKSRT desc 1", + "link": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "cta_text": "AKSRT cta text 1", + "cta_color": "", + "band_color": "auto" + }, + { + "title": "AKSRT · Combo info", + "icon": "fa fas fa-graduation-cap", + "icon_image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "tags": [ + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + } + ], + "desc": "AKSRT desc 2", + "link": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "cta_text": "AKSRT cta text 2", + "cta_color": "", + "band_color": "auto" + }, + { + "title": "AKSRT · Combo info", + "icon": "fa fas fa-graduation-cap", + "icon_image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "tags": [ + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "color": "" + } + ], + "desc": "AKSRT desc 3", + "link": { + "url": "https://fixtures.aksrt.test/combo_info", + "text": "查看详情", + "target": "" + }, + "cta_text": "AKSRT cta text 3", + "cta_color": "", + "band_color": "auto" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"combo_info\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "text_title": { + "id_base": "aksrt_widget_text_title", + "name": "AKSRT 文字标题", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "heading", + "description", + "alignment" + ], + "settings": { + "title": "AKSRT · Text title", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/text_title", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/text_title", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/text_title", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "heading": "从入门到精通的系统学习路径", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "alignment": "center" + }, + "root_selector": "[data-aksrt-widget=\"text_title\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "buttons": { + "id_base": "aksrt_widget_buttons", + "name": "AKSRT 按钮组", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "pc_width", + "m_width", + "pc_padding", + "m_padding", + "pc_gap", + "m_gap", + "align", + "radius", + "hollow", + "go_link", + "items" + ], + "settings": { + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "pc_width": 0, + "m_width": 0, + "pc_padding": "large", + "m_padding": "medium", + "pc_gap": 12, + "m_gap": 6, + "align": "center", + "radius": false, + "hollow": false, + "go_link": true, + "items": [ + { + "text": "保持好奇,持续创造。", + "icon_left": "fa fas fa-graduation-cap", + "icon_right": "fa fas fa-graduation-cap", + "link": { + "url": "https://fixtures.aksrt.test/buttons", + "text": "查看详情", + "target": "" + }, + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "icon_left": "fa fas fa-graduation-cap", + "icon_right": "fa fas fa-graduation-cap", + "link": { + "url": "https://fixtures.aksrt.test/buttons", + "text": "查看详情", + "target": "" + }, + "color": "" + }, + { + "text": "保持好奇,持续创造。", + "icon_left": "fa fas fa-graduation-cap", + "icon_right": "fa fas fa-graduation-cap", + "link": { + "url": "https://fixtures.aksrt.test/buttons", + "text": "查看详情", + "target": "" + }, + "color": "" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"buttons\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "layout_gap": { + "id_base": "aksrt_widget_layout_gap", + "name": "AKSRT 布局额外间距", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_gap", + "m_gap" + ], + "settings": { + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_gap": 20, + "m_gap": 10 + }, + "root_selector": "[data-aksrt-widget=\"layout_gap\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "tag_cloud": { + "id_base": "aksrt_widget_tag_cloud", + "name": "AKSRT 标签云", + "group": "general", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "taxonomy", + "number", + "orderby", + "show_count" + ], + "settings": { + "title": "AKSRT · Tag cloud", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/tag_cloud", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/tag_cloud", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/tag_cloud", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "taxonomy": "post_tag", + "number": 20, + "orderby": "count", + "show_count": false + }, + "root_selector": "[data-aksrt-widget=\"tag_cloud\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "recent_comments": { + "id_base": "aksrt_widget_recent_comments", + "name": "AKSRT 最近评论", + "group": "general", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "limit", + "outer", + "outpost", + "show_source", + "style" + ], + "settings": { + "title": "AKSRT · Recent comments", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/recent_comments", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/recent_comments", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/recent_comments", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "limit": 8, + "outer": "1", + "outpost": "1", + "show_source": false, + "style": "" + }, + "root_selector": "[data-aksrt-widget=\"recent_comments\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "links": { + "id_base": "aksrt_widget_links", + "name": "AKSRT 链接列表", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "style", + "limit", + "links" + ], + "settings": { + "title": "AKSRT · Links", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "style": "card", + "limit": 12, + "links": [ + { + "title": "AKSRT · Links", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "link": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Links", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "link": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + } + }, + { + "title": "AKSRT · Links", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "link": { + "url": "https://fixtures.aksrt.test/links", + "text": "查看详情", + "target": "" + } + } + ] + }, + "root_selector": "[data-aksrt-widget=\"links\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "notice": { + "id_base": "aksrt_widget_notice", + "name": "AKSRT 上下滚动公告", + "group": "general", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-more.php", + "sha256": "07ea0c3260a9ee9701b1ce03795941fbbfb61c377ad71fe8f7820107763c5528" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "blank", + "radius", + "interval", + "color", + "source", + "msg_icon", + "count", + "desc_s", + "posts_opts", + "img_ids" + ], + "settings": { + "title": "AKSRT · Notice", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/notice", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/notice", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/notice", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "blank": false, + "radius": false, + "interval": 3, + "color": "c-blue", + "source": "", + "msg_icon": "fa fas fa-graduation-cap", + "count": 8, + "desc_s": false, + "posts_opts": { + "cat": "1", + "orderby": "", + "order": "desc" + }, + "img_ids": [ + { + "title": "AKSRT · Notice", + "icon": "fa fas fa-graduation-cap", + "href": "" + }, + { + "title": "AKSRT · Notice", + "icon": "fa fas fa-graduation-cap", + "href": "" + }, + { + "title": "AKSRT · Notice", + "icon": "fa fas fa-graduation-cap", + "href": "" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"notice\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide" + ] + }, + "term_cards": { + "id_base": "aksrt_widget_term_cards", + "name": "AKSRT 分类图文卡片", + "group": "content", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "term_id", + "type", + "height_scale", + "pc_row", + "m_row", + "mask_opacity", + "target_blank" + ], + "settings": { + "title": "AKSRT · Term cards", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/term_cards", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/term_cards", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/term_cards", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "term_id": [], + "type": "style-1", + "height_scale": 60, + "pc_row": "2", + "m_row": "2", + "mask_opacity": 10, + "target_blank": false + }, + "root_selector": "[data-aksrt-widget=\"term_cards\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "term_aggregation": { + "id_base": "aksrt_widget_term_aggregation", + "name": "AKSRT 分类聚合卡片", + "group": "content", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "pc_row", + "term_id", + "orderby", + "order", + "count", + "target_blank" + ], + "settings": { + "title": "AKSRT · Term aggregation", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/term_aggregation", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/term_aggregation", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/term_aggregation", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "pc_row": 2, + "term_id": [], + "orderby": "modified", + "order": "desc", + "count": 4, + "target_blank": false + }, + "root_selector": "[data-aksrt-widget=\"term_aggregation\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "hot_posts": { + "id_base": "aksrt_widget_hot_posts", + "name": "AKSRT 热榜文章", + "group": "content", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "orderby", + "limit_day", + "count", + "target_blank" + ], + "settings": { + "title": "AKSRT · Hot posts", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/hot_posts", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/hot_posts", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/hot_posts", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "orderby": "views", + "limit_day": 0, + "count": 6, + "target_blank": false + }, + "root_selector": "[data-aksrt-widget=\"hot_posts\"]", + "states": [ + "default", + "hover", + "focus", + "loading", + "empty", + "error" + ] + }, + "post_pay": { + "id_base": "aksrt_widget_post_pay", + "name": "AKSRT 付费购买", + "group": "content", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "theme" + ], + "settings": { + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "theme": "jb-red" + }, + "root_selector": "[data-aksrt-widget=\"post_pay\"]", + "states": [ + "default", + "hover", + "focus", + "guest-locked", + "member-locked", + "authorized", + "unconfigured" + ] + }, + "posts": { + "id_base": "aksrt_widget_posts", + "name": "AKSRT 文章列表", + "group": "content", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "load_mode", + "cat", + "zibpay_type", + "limit_day", + "orderby", + "order", + "style", + "mini_opt", + "count", + "paginate" + ], + "settings": { + "title": "AKSRT · Posts", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/posts", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/posts", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/posts", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "load_mode": "ajax", + "cat": "1", + "zibpay_type": [], + "limit_day": 0, + "orderby": "", + "order": "desc", + "style": "list", + "mini_opt": [], + "count": 12, + "paginate": "" + }, + "root_selector": "[data-aksrt-widget=\"posts\"]", + "states": [ + "default", + "hover", + "focus", + "loading", + "empty", + "error" + ] + }, + "tab_posts": { + "id_base": "aksrt_widget_tab_posts", + "name": "AKSRT 多栏目文章(新)", + "group": "content", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "style", + "mini_opt", + "count", + "paginate", + "tabs" + ], + "settings": { + "title": "AKSRT · Tab posts", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/tab_posts", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/tab_posts", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/tab_posts", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "style": "mini", + "mini_opt": [], + "count": 6, + "paginate": "", + "tabs": [ + { + "title": "AKSRT · Tab posts", + "cat": "1", + "zibpay_type": [], + "limit_day": 0, + "orderby": "", + "order": "desc" + }, + { + "title": "AKSRT · Tab posts", + "cat": "2", + "zibpay_type": [], + "limit_day": 0, + "orderby": "", + "order": "desc" + }, + { + "title": "AKSRT · Tab posts", + "cat": "3", + "zibpay_type": [], + "limit_day": 0, + "orderby": "", + "order": "desc" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"tab_posts\"]", + "states": [ + "default", + "hover", + "focus", + "alternate-tab", + "loading", + "empty", + "error" + ] + }, + "oneline_posts": { + "id_base": "aksrt_widget_oneline_posts", + "name": "AKSRT 横向滚动文章", + "group": "content", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-posts.php", + "sha256": "20b04007270ecfd265adaaa287eb1a696566385b1f86379079be9664cfaea409" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "cat", + "zibpay_type", + "orderby", + "order", + "style", + "count" + ], + "settings": { + "title": "AKSRT · Oneline posts", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/oneline_posts", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/oneline_posts", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/oneline_posts", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "cat": "1", + "zibpay_type": [], + "orderby": "", + "order": "desc", + "style": "card", + "count": 12 + }, + "root_selector": "[data-aksrt-widget=\"oneline_posts\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide", + "loading", + "empty", + "error" + ] + }, + "pricing_plans": { + "id_base": "aksrt_widget_pricing_plans", + "name": "AKSRT 知识产品方案卡片", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "plans" + ], + "settings": { + "title": "AKSRT · Pricing plans", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "plans": [ + { + "title": "AKSRT · Pricing plans", + "price": "¥99", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "features": "AKSRT features 1", + "cta_type": "link", + "post_id": 0, + "vip_level": 1, + "link": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "featured": false + }, + { + "title": "AKSRT · Pricing plans", + "price": "¥99", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "features": "AKSRT features 2", + "cta_type": "link", + "post_id": 0, + "vip_level": 1, + "link": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "featured": false + }, + { + "title": "AKSRT · Pricing plans", + "price": "¥99", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "features": "AKSRT features 3", + "cta_type": "link", + "post_id": 0, + "vip_level": 1, + "link": { + "url": "https://fixtures.aksrt.test/pricing_plans", + "text": "查看详情", + "target": "" + }, + "featured": false + } + ] + }, + "root_selector": "[data-aksrt-widget=\"pricing_plans\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "reviews": { + "id_base": "aksrt_widget_reviews", + "name": "AKSRT 知识产品评价", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "items" + ], + "settings": { + "title": "AKSRT · Reviews", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "items": [ + { + "title": "AKSRT · Reviews", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "value": "1280+", + "features": "AKSRT features 1", + "rating": 5 + }, + { + "title": "AKSRT · Reviews", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "value": "2560+", + "features": "AKSRT features 2", + "rating": 5 + }, + { + "title": "AKSRT · Reviews", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/reviews", + "text": "查看详情", + "target": "" + }, + "value": "3840+", + "features": "AKSRT features 3", + "rating": 5 + } + ] + }, + "root_selector": "[data-aksrt-widget=\"reviews\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide" + ] + }, + "faq": { + "id_base": "aksrt_widget_faq", + "name": "AKSRT 知识产品常见问题", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "search", + "items" + ], + "settings": { + "title": "AKSRT · Faq", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/faq", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/faq", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/faq", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "search": true, + "items": [ + { + "question": "购买后可以长期学习吗?", + "answer": "可以,已购买内容会永久保存在你的学习中心。" + }, + { + "question": "购买后可以长期学习吗?", + "answer": "可以,已购买内容会永久保存在你的学习中心。" + }, + { + "question": "购买后可以长期学习吗?", + "answer": "可以,已购买内容会永久保存在你的学习中心。" + } + ] + }, + "root_selector": "[data-aksrt-widget=\"faq\"]", + "states": [ + "default", + "hover", + "focus", + "expanded" + ] + }, + "stats": { + "id_base": "aksrt_widget_stats", + "name": "AKSRT 知识产品数据展示", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "items" + ], + "settings": { + "title": "AKSRT · Stats", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "items": [ + { + "title": "AKSRT · Stats", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "value": "1280+", + "features": "AKSRT features 1", + "rating": 5 + }, + { + "title": "AKSRT · Stats", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "value": "2560+", + "features": "AKSRT features 2", + "rating": 5 + }, + { + "title": "AKSRT · Stats", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/stats", + "text": "查看详情", + "target": "" + }, + "value": "3840+", + "features": "AKSRT features 3", + "rating": 5 + } + ] + }, + "root_selector": "[data-aksrt-widget=\"stats\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "highlights": { + "id_base": "aksrt_widget_highlights", + "name": "AKSRT 知识产品亮点卡片", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "items" + ], + "settings": { + "title": "AKSRT · Highlights", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "items": [ + { + "title": "AKSRT · Highlights", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "value": "1280+", + "features": "AKSRT features 1", + "rating": 5 + }, + { + "title": "AKSRT · Highlights", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "value": "2560+", + "features": "AKSRT features 2", + "rating": 5 + }, + { + "title": "AKSRT · Highlights", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/highlights", + "text": "查看详情", + "target": "" + }, + "value": "3840+", + "features": "AKSRT features 3", + "rating": 5 + } + ] + }, + "root_selector": "[data-aksrt-widget=\"highlights\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "feature_intro": { + "id_base": "aksrt_widget_feature_intro", + "name": "AKSRT 知识产品图文亮点", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "items" + ], + "settings": { + "title": "AKSRT · Feature intro", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "items": [ + { + "title": "AKSRT · Feature intro", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "value": "1280+", + "features": "AKSRT features 1", + "rating": 5 + }, + { + "title": "AKSRT · Feature intro", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "value": "2560+", + "features": "AKSRT features 2", + "rating": 5 + }, + { + "title": "AKSRT · Feature intro", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/feature_intro", + "text": "查看详情", + "target": "" + }, + "value": "3840+", + "features": "AKSRT features 3", + "rating": 5 + } + ] + }, + "root_selector": "[data-aksrt-widget=\"feature_intro\"]", + "states": [ + "default", + "hover", + "focus", + "alternate-tab" + ] + }, + "tilt_cases": { + "id_base": "aksrt_widget_tilt_cases", + "name": "AKSRT 知识产品 3D 展示", + "group": "knowledge_product", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-produck.php", + "sha256": "77194592685b50e5428c6db4d0e2ca2cbc52d0ff4a81200f4e10b56e26159b9d" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "pc_row", + "m_row", + "items" + ], + "settings": { + "title": "AKSRT · Tilt cases", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "pc_row": 3, + "m_row": 1, + "items": [ + { + "title": "AKSRT · Tilt cases", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "link": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "value": "1280+", + "features": "AKSRT features 1", + "rating": 5 + }, + { + "title": "AKSRT · Tilt cases", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "link": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "value": "2560+", + "features": "AKSRT features 2", + "rating": 5 + }, + { + "title": "AKSRT · Tilt cases", + "description": "固定内容用于组件 DOM、响应式和视觉差异验收。", + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "image_dark": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "link": { + "url": "https://fixtures.aksrt.test/tilt_cases", + "text": "查看详情", + "target": "" + }, + "value": "3840+", + "features": "AKSRT features 3", + "rating": 5 + } + ] + }, + "root_selector": "[data-aksrt-widget=\"tilt_cases\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "slider": { + "id_base": "aksrt_widget_slider", + "name": "AKSRT 幻灯片(新)", + "group": "slider", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-slider.php", + "sha256": "a06a12500cb8ffbf57e496d9979eaed0edd545499ecb9c80d011d3ae49d2244e" + }, + "field_ids": [ + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "slides", + "option" + ], + "settings": { + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "slides": [ + { + "background": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider", + "desc": "AKSRT desc 1", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + }, + { + "background": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider", + "desc": "AKSRT desc 2", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + }, + { + "background": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider", + "desc": "AKSRT desc 3", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + } + ], + "option": { + "direction": "horizontal", + "loop": true, + "button": false, + "pagination": false, + "effect": "slide", + "scale_height": true, + "scale": 35, + "auto_height": false, + "max_height": 500, + "min_height": 180, + "pc_height": 400, + "m_height": 200, + "spacebetween": 15, + "speed": 0, + "autoplay": true, + "interval": 4 + } + }, + "root_selector": "[data-aksrt-widget=\"slider\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide" + ] + }, + "slider_media_combo": { + "id_base": "aksrt_widget_slider_media_combo", + "name": "AKSRT 幻灯片加图文视频卡片", + "group": "slider", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-slider.php", + "sha256": "a06a12500cb8ffbf57e496d9979eaed0edd545499ecb9c80d011d3ae49d2244e" + }, + "field_ids": [ + "show_type", + "show_id_type", + "show_ids", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "obs_animation", + "animation_repeat", + "layout_ratio", + "slide_scale", + "pc_row", + "pc_col", + "m_layout_type", + "m_row", + "m_cover_ratio", + "slides", + "option", + "covers", + "mask_opacity", + "font_size_pc", + "font_size_m", + "font_bold", + "font_color" + ], + "settings": { + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "obs_animation": "", + "animation_repeat": false, + "layout_ratio": 60, + "slide_scale": 50, + "pc_row": "2", + "pc_col": "2", + "m_layout_type": "vertical", + "m_row": "2", + "m_cover_ratio": 45, + "slides": [ + { + "background": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider media combo", + "desc": "AKSRT desc 1", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + }, + { + "background": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider media combo", + "desc": "AKSRT desc 2", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + }, + { + "background": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "background_video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "hide": "", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + }, + "image_layer": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "free_size": false, + "align": "center", + "parallax": 0, + "parallax_scale": 100, + "parallax_opacity": 100 + } + ], + "text": { + "title": "AKSRT · Slider media combo", + "desc": "AKSRT desc 3", + "text_align": "left-bottom", + "text_size_pc": 30, + "text_size_m": 20, + "parallax": 40 + } + } + ], + "option": { + "loop": true, + "button": true, + "pagination": true, + "effect": "slide", + "spacebetween": 20, + "speed": 0, + "autoplay": true, + "interval": 4 + }, + "covers": [ + { + "image": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-01.jpg", + "hide": "", + "title": "AKSRT · Slider media combo", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + } + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-02.jpg", + "hide": "", + "title": "AKSRT · Slider media combo", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + } + }, + { + "image": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "video": "https://fixtures.aksrt.test/media/course-cover-03.jpg", + "hide": "", + "title": "AKSRT · Slider media combo", + "link": { + "url": "https://fixtures.aksrt.test/slider_media_combo", + "text": "查看详情", + "target": "" + } + } + ], + "mask_opacity": 0, + "font_size_pc": 16, + "font_size_m": 14, + "font_bold": false, + "font_color": "#667eea" + }, + "root_selector": "[data-aksrt-widget=\"slider_media_combo\"]", + "states": [ + "default", + "hover", + "focus", + "next-slide" + ] + }, + "user_card": { + "id_base": "aksrt_widget_user_card", + "name": "AKSRT 用户个人信息", + "group": "user", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-user.php", + "sha256": "97a4fde11d0a93af229e499f9b11c8d769b21b6b7500eac9bb94b4dd850f6b24" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "show_img_bg", + "loged_title", + "show_button", + "button_1", + "button_1_class", + "button_1_text", + "button_2", + "button_2_class", + "button_2_text" + ], + "settings": { + "title": "AKSRT · User card", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/user_card", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/user_card", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/user_card", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "show_img_bg": true, + "loged_title": "HI!请登录", + "show_button": true, + "button_1": "post", + "button_1_class": "jb-pink", + "button_1_text": "发布文章", + "button_2": "center", + "button_2_class": "jb-blue", + "button_2_text": "用户中心" + }, + "root_selector": "[data-aksrt-widget=\"user_card\"]", + "states": [ + "default", + "hover", + "focus", + "guest", + "signed-in" + ] + }, + "author_card": { + "id_base": "aksrt_widget_author_card", + "name": "AKSRT 文章作者信息", + "group": "user", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-user.php", + "sha256": "97a4fde11d0a93af229e499f9b11c8d769b21b6b7500eac9bb94b4dd850f6b24" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "show_img_bg", + "show_posts", + "post_style", + "limit", + "orderby", + "show_button", + "button_1", + "button_1_class", + "button_1_text", + "button_2", + "button_2_class", + "button_2_text" + ], + "settings": { + "title": "AKSRT · Author card", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/author_card", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/author_card", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/author_card", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "show_img_bg": true, + "show_posts": true, + "post_style": "mini", + "limit": 6, + "orderby": "date", + "show_button": true, + "button_1": "post", + "button_1_class": "jb-pink", + "button_1_text": "发布文章", + "button_2": "center", + "button_2_class": "jb-blue", + "button_2_text": "用户中心" + }, + "root_selector": "[data-aksrt-widget=\"author_card\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "user_ranking": { + "id_base": "aksrt_widget_user_ranking", + "name": "AKSRT 用户排行榜", + "group": "user", + "size": "sidebar", + "reference": { + "file": "inc/widgets/widget-user.php", + "sha256": "97a4fde11d0a93af229e499f9b11c8d769b21b6b7500eac9bb94b4dd850f6b24" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "sidebar_affix", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "orderby", + "number", + "show_badge" + ], + "settings": { + "title": "AKSRT · User ranking", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/user_ranking", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/user_ranking", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/user_ranking", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "sidebar_affix": false, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "orderby": "points", + "number": 8, + "show_badge": true + }, + "root_selector": "[data-aksrt-widget=\"user_ranking\"]", + "states": [ + "default", + "hover", + "focus" + ] + }, + "user_list": { + "id_base": "aksrt_widget_user_list", + "name": "AKSRT 用户列表", + "group": "user", + "size": "wide", + "reference": { + "file": "inc/widgets/widget-user.php", + "sha256": "97a4fde11d0a93af229e499f9b11c8d769b21b6b7500eac9bb94b4dd850f6b24" + }, + "field_ids": [ + "title", + "subtitle", + "title_style", + "title_highlight", + "title_highlight_color", + "title_link", + "title_link2", + "title_link3", + "title_link_style", + "show_type", + "show_id_type", + "show_ids", + "animation_in", + "animation_repeat", + "layout_pin_pc", + "layout_pin_m", + "layout_bg", + "number", + "include", + "exclude", + "orderby" + ], + "settings": { + "title": "AKSRT · User list", + "subtitle": "固定内容与交互状态视觉验收", + "title_style": "", + "title_highlight": "AKSRT", + "title_highlight_color": "focus-color", + "title_link": { + "url": "https://fixtures.aksrt.test/user_list", + "text": "查看详情", + "target": "" + }, + "title_link2": { + "url": "https://fixtures.aksrt.test/user_list", + "text": "查看详情", + "target": "" + }, + "title_link3": { + "url": "https://fixtures.aksrt.test/user_list", + "text": "查看详情", + "target": "" + }, + "title_link_style": { + "color_1": "jb-blue", + "color_2": "jb-yellow", + "color_3": "jb-green" + }, + "show_type": "all", + "show_id_type": "", + "show_ids": "", + "animation_in": "", + "animation_repeat": false, + "layout_pin_pc": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_pin_m": { + "top": 0, + "right": 0, + "bottom": 20, + "left": 0 + }, + "layout_bg": { + "light": { + "color": "#ffffff", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + }, + "dark": { + "color": "#1d1e24", + "image": "", + "position": "center center", + "repeat": "no-repeat", + "attachment": "scroll", + "size": "cover" + } + }, + "number": 12, + "include": "1", + "exclude": "1", + "orderby": "registered" + }, + "root_selector": "[data-aksrt-widget=\"user_list\"]", + "states": [ + "default", + "hover", + "focus" + ] + } + }, + "screenshot_matrix": { + "search:desktop:light": { + "widget": "search", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/search/desktop-light.png" + }, + "search:desktop:dark": { + "widget": "search", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/search/desktop-dark.png" + }, + "search:tablet:light": { + "widget": "search", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/search/tablet-light.png" + }, + "search:tablet:dark": { + "widget": "search", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/search/tablet-dark.png" + }, + "search:mobile:light": { + "widget": "search", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/search/mobile-light.png" + }, + "search:mobile:dark": { + "widget": "search", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/search/mobile-dark.png" + }, + "posts_toc:desktop:light": { + "widget": "posts_toc", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/posts_toc/desktop-light.png" + }, + "posts_toc:desktop:dark": { + "widget": "posts_toc", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/posts_toc/desktop-dark.png" + }, + "posts_toc:tablet:light": { + "widget": "posts_toc", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/posts_toc/tablet-light.png" + }, + "posts_toc:tablet:dark": { + "widget": "posts_toc", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/posts_toc/tablet-dark.png" + }, + "posts_toc:mobile:light": { + "widget": "posts_toc", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/posts_toc/mobile-light.png" + }, + "posts_toc:mobile:dark": { + "widget": "posts_toc", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/posts_toc/mobile-dark.png" + }, + "quote:desktop:light": { + "widget": "quote", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/quote/desktop-light.png" + }, + "quote:desktop:dark": { + "widget": "quote", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/quote/desktop-dark.png" + }, + "quote:tablet:light": { + "widget": "quote", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/quote/tablet-light.png" + }, + "quote:tablet:dark": { + "widget": "quote", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/quote/tablet-dark.png" + }, + "quote:mobile:light": { + "widget": "quote", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/quote/mobile-light.png" + }, + "quote:mobile:dark": { + "widget": "quote", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/quote/mobile-dark.png" + }, + "icon_cards:desktop:light": { + "widget": "icon_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/icon_cards/desktop-light.png" + }, + "icon_cards:desktop:dark": { + "widget": "icon_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cards/desktop-dark.png" + }, + "icon_cards:tablet:light": { + "widget": "icon_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/icon_cards/tablet-light.png" + }, + "icon_cards:tablet:dark": { + "widget": "icon_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cards/tablet-dark.png" + }, + "icon_cards:mobile:light": { + "widget": "icon_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/icon_cards/mobile-light.png" + }, + "icon_cards:mobile:dark": { + "widget": "icon_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cards/mobile-dark.png" + }, + "video:desktop:light": { + "widget": "video", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/video/desktop-light.png" + }, + "video:desktop:dark": { + "widget": "video", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/video/desktop-dark.png" + }, + "video:tablet:light": { + "widget": "video", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/video/tablet-light.png" + }, + "video:tablet:dark": { + "widget": "video", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/video/tablet-dark.png" + }, + "video:mobile:light": { + "widget": "video", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/video/mobile-light.png" + }, + "video:mobile:dark": { + "widget": "video", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/video/mobile-dark.png" + }, + "embed:desktop:light": { + "widget": "embed", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/embed/desktop-light.png" + }, + "embed:desktop:dark": { + "widget": "embed", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/embed/desktop-dark.png" + }, + "embed:tablet:light": { + "widget": "embed", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/embed/tablet-light.png" + }, + "embed:tablet:dark": { + "widget": "embed", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/embed/tablet-dark.png" + }, + "embed:mobile:light": { + "widget": "embed", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/embed/mobile-light.png" + }, + "embed:mobile:dark": { + "widget": "embed", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/embed/mobile-dark.png" + }, + "media_cards:desktop:light": { + "widget": "media_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/media_cards/desktop-light.png" + }, + "media_cards:desktop:dark": { + "widget": "media_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/media_cards/desktop-dark.png" + }, + "media_cards:tablet:light": { + "widget": "media_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/media_cards/tablet-light.png" + }, + "media_cards:tablet:dark": { + "widget": "media_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/media_cards/tablet-dark.png" + }, + "media_cards:mobile:light": { + "widget": "media_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/media_cards/mobile-light.png" + }, + "media_cards:mobile:dark": { + "widget": "media_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/media_cards/mobile-dark.png" + }, + "icon_cover_cards:desktop:light": { + "widget": "icon_cover_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/icon_cover_cards/desktop-light.png" + }, + "icon_cover_cards:desktop:dark": { + "widget": "icon_cover_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cover_cards/desktop-dark.png" + }, + "icon_cover_cards:tablet:light": { + "widget": "icon_cover_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/icon_cover_cards/tablet-light.png" + }, + "icon_cover_cards:tablet:dark": { + "widget": "icon_cover_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cover_cards/tablet-dark.png" + }, + "icon_cover_cards:mobile:light": { + "widget": "icon_cover_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/icon_cover_cards/mobile-light.png" + }, + "icon_cover_cards:mobile:dark": { + "widget": "icon_cover_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/icon_cover_cards/mobile-dark.png" + }, + "partners:desktop:light": { + "widget": "partners", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/partners/desktop-light.png" + }, + "partners:desktop:dark": { + "widget": "partners", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/partners/desktop-dark.png" + }, + "partners:tablet:light": { + "widget": "partners", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/partners/tablet-light.png" + }, + "partners:tablet:dark": { + "widget": "partners", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/partners/tablet-dark.png" + }, + "partners:mobile:light": { + "widget": "partners", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/partners/mobile-light.png" + }, + "partners:mobile:dark": { + "widget": "partners", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/partners/mobile-dark.png" + }, + "combo_info:desktop:light": { + "widget": "combo_info", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/combo_info/desktop-light.png" + }, + "combo_info:desktop:dark": { + "widget": "combo_info", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/combo_info/desktop-dark.png" + }, + "combo_info:tablet:light": { + "widget": "combo_info", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/combo_info/tablet-light.png" + }, + "combo_info:tablet:dark": { + "widget": "combo_info", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/combo_info/tablet-dark.png" + }, + "combo_info:mobile:light": { + "widget": "combo_info", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/combo_info/mobile-light.png" + }, + "combo_info:mobile:dark": { + "widget": "combo_info", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/combo_info/mobile-dark.png" + }, + "text_title:desktop:light": { + "widget": "text_title", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/text_title/desktop-light.png" + }, + "text_title:desktop:dark": { + "widget": "text_title", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/text_title/desktop-dark.png" + }, + "text_title:tablet:light": { + "widget": "text_title", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/text_title/tablet-light.png" + }, + "text_title:tablet:dark": { + "widget": "text_title", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/text_title/tablet-dark.png" + }, + "text_title:mobile:light": { + "widget": "text_title", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/text_title/mobile-light.png" + }, + "text_title:mobile:dark": { + "widget": "text_title", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/text_title/mobile-dark.png" + }, + "buttons:desktop:light": { + "widget": "buttons", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/buttons/desktop-light.png" + }, + "buttons:desktop:dark": { + "widget": "buttons", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/buttons/desktop-dark.png" + }, + "buttons:tablet:light": { + "widget": "buttons", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/buttons/tablet-light.png" + }, + "buttons:tablet:dark": { + "widget": "buttons", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/buttons/tablet-dark.png" + }, + "buttons:mobile:light": { + "widget": "buttons", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/buttons/mobile-light.png" + }, + "buttons:mobile:dark": { + "widget": "buttons", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/buttons/mobile-dark.png" + }, + "layout_gap:desktop:light": { + "widget": "layout_gap", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/layout_gap/desktop-light.png" + }, + "layout_gap:desktop:dark": { + "widget": "layout_gap", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/layout_gap/desktop-dark.png" + }, + "layout_gap:tablet:light": { + "widget": "layout_gap", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/layout_gap/tablet-light.png" + }, + "layout_gap:tablet:dark": { + "widget": "layout_gap", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/layout_gap/tablet-dark.png" + }, + "layout_gap:mobile:light": { + "widget": "layout_gap", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/layout_gap/mobile-light.png" + }, + "layout_gap:mobile:dark": { + "widget": "layout_gap", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/layout_gap/mobile-dark.png" + }, + "tag_cloud:desktop:light": { + "widget": "tag_cloud", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/tag_cloud/desktop-light.png" + }, + "tag_cloud:desktop:dark": { + "widget": "tag_cloud", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/tag_cloud/desktop-dark.png" + }, + "tag_cloud:tablet:light": { + "widget": "tag_cloud", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/tag_cloud/tablet-light.png" + }, + "tag_cloud:tablet:dark": { + "widget": "tag_cloud", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/tag_cloud/tablet-dark.png" + }, + "tag_cloud:mobile:light": { + "widget": "tag_cloud", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/tag_cloud/mobile-light.png" + }, + "tag_cloud:mobile:dark": { + "widget": "tag_cloud", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/tag_cloud/mobile-dark.png" + }, + "recent_comments:desktop:light": { + "widget": "recent_comments", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/recent_comments/desktop-light.png" + }, + "recent_comments:desktop:dark": { + "widget": "recent_comments", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/recent_comments/desktop-dark.png" + }, + "recent_comments:tablet:light": { + "widget": "recent_comments", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/recent_comments/tablet-light.png" + }, + "recent_comments:tablet:dark": { + "widget": "recent_comments", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/recent_comments/tablet-dark.png" + }, + "recent_comments:mobile:light": { + "widget": "recent_comments", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/recent_comments/mobile-light.png" + }, + "recent_comments:mobile:dark": { + "widget": "recent_comments", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/recent_comments/mobile-dark.png" + }, + "links:desktop:light": { + "widget": "links", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/links/desktop-light.png" + }, + "links:desktop:dark": { + "widget": "links", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/links/desktop-dark.png" + }, + "links:tablet:light": { + "widget": "links", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/links/tablet-light.png" + }, + "links:tablet:dark": { + "widget": "links", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/links/tablet-dark.png" + }, + "links:mobile:light": { + "widget": "links", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/links/mobile-light.png" + }, + "links:mobile:dark": { + "widget": "links", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/links/mobile-dark.png" + }, + "notice:desktop:light": { + "widget": "notice", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/notice/desktop-light.png" + }, + "notice:desktop:dark": { + "widget": "notice", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/notice/desktop-dark.png" + }, + "notice:tablet:light": { + "widget": "notice", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/notice/tablet-light.png" + }, + "notice:tablet:dark": { + "widget": "notice", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/notice/tablet-dark.png" + }, + "notice:mobile:light": { + "widget": "notice", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/notice/mobile-light.png" + }, + "notice:mobile:dark": { + "widget": "notice", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/notice/mobile-dark.png" + }, + "term_cards:desktop:light": { + "widget": "term_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/term_cards/desktop-light.png" + }, + "term_cards:desktop:dark": { + "widget": "term_cards", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/term_cards/desktop-dark.png" + }, + "term_cards:tablet:light": { + "widget": "term_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/term_cards/tablet-light.png" + }, + "term_cards:tablet:dark": { + "widget": "term_cards", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/term_cards/tablet-dark.png" + }, + "term_cards:mobile:light": { + "widget": "term_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/term_cards/mobile-light.png" + }, + "term_cards:mobile:dark": { + "widget": "term_cards", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/term_cards/mobile-dark.png" + }, + "term_aggregation:desktop:light": { + "widget": "term_aggregation", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/term_aggregation/desktop-light.png" + }, + "term_aggregation:desktop:dark": { + "widget": "term_aggregation", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/term_aggregation/desktop-dark.png" + }, + "term_aggregation:tablet:light": { + "widget": "term_aggregation", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/term_aggregation/tablet-light.png" + }, + "term_aggregation:tablet:dark": { + "widget": "term_aggregation", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/term_aggregation/tablet-dark.png" + }, + "term_aggregation:mobile:light": { + "widget": "term_aggregation", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/term_aggregation/mobile-light.png" + }, + "term_aggregation:mobile:dark": { + "widget": "term_aggregation", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/term_aggregation/mobile-dark.png" + }, + "hot_posts:desktop:light": { + "widget": "hot_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/hot_posts/desktop-light.png" + }, + "hot_posts:desktop:dark": { + "widget": "hot_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/hot_posts/desktop-dark.png" + }, + "hot_posts:tablet:light": { + "widget": "hot_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/hot_posts/tablet-light.png" + }, + "hot_posts:tablet:dark": { + "widget": "hot_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/hot_posts/tablet-dark.png" + }, + "hot_posts:mobile:light": { + "widget": "hot_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/hot_posts/mobile-light.png" + }, + "hot_posts:mobile:dark": { + "widget": "hot_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/hot_posts/mobile-dark.png" + }, + "post_pay:desktop:light": { + "widget": "post_pay", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/post_pay/desktop-light.png" + }, + "post_pay:desktop:dark": { + "widget": "post_pay", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/post_pay/desktop-dark.png" + }, + "post_pay:tablet:light": { + "widget": "post_pay", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/post_pay/tablet-light.png" + }, + "post_pay:tablet:dark": { + "widget": "post_pay", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/post_pay/tablet-dark.png" + }, + "post_pay:mobile:light": { + "widget": "post_pay", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/post_pay/mobile-light.png" + }, + "post_pay:mobile:dark": { + "widget": "post_pay", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/post_pay/mobile-dark.png" + }, + "posts:desktop:light": { + "widget": "posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/posts/desktop-light.png" + }, + "posts:desktop:dark": { + "widget": "posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/posts/desktop-dark.png" + }, + "posts:tablet:light": { + "widget": "posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/posts/tablet-light.png" + }, + "posts:tablet:dark": { + "widget": "posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/posts/tablet-dark.png" + }, + "posts:mobile:light": { + "widget": "posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/posts/mobile-light.png" + }, + "posts:mobile:dark": { + "widget": "posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/posts/mobile-dark.png" + }, + "tab_posts:desktop:light": { + "widget": "tab_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/tab_posts/desktop-light.png" + }, + "tab_posts:desktop:dark": { + "widget": "tab_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/tab_posts/desktop-dark.png" + }, + "tab_posts:tablet:light": { + "widget": "tab_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/tab_posts/tablet-light.png" + }, + "tab_posts:tablet:dark": { + "widget": "tab_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/tab_posts/tablet-dark.png" + }, + "tab_posts:mobile:light": { + "widget": "tab_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/tab_posts/mobile-light.png" + }, + "tab_posts:mobile:dark": { + "widget": "tab_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/tab_posts/mobile-dark.png" + }, + "oneline_posts:desktop:light": { + "widget": "oneline_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/oneline_posts/desktop-light.png" + }, + "oneline_posts:desktop:dark": { + "widget": "oneline_posts", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/oneline_posts/desktop-dark.png" + }, + "oneline_posts:tablet:light": { + "widget": "oneline_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/oneline_posts/tablet-light.png" + }, + "oneline_posts:tablet:dark": { + "widget": "oneline_posts", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/oneline_posts/tablet-dark.png" + }, + "oneline_posts:mobile:light": { + "widget": "oneline_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/oneline_posts/mobile-light.png" + }, + "oneline_posts:mobile:dark": { + "widget": "oneline_posts", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/oneline_posts/mobile-dark.png" + }, + "pricing_plans:desktop:light": { + "widget": "pricing_plans", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/pricing_plans/desktop-light.png" + }, + "pricing_plans:desktop:dark": { + "widget": "pricing_plans", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/pricing_plans/desktop-dark.png" + }, + "pricing_plans:tablet:light": { + "widget": "pricing_plans", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/pricing_plans/tablet-light.png" + }, + "pricing_plans:tablet:dark": { + "widget": "pricing_plans", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/pricing_plans/tablet-dark.png" + }, + "pricing_plans:mobile:light": { + "widget": "pricing_plans", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/pricing_plans/mobile-light.png" + }, + "pricing_plans:mobile:dark": { + "widget": "pricing_plans", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/pricing_plans/mobile-dark.png" + }, + "reviews:desktop:light": { + "widget": "reviews", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/reviews/desktop-light.png" + }, + "reviews:desktop:dark": { + "widget": "reviews", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/reviews/desktop-dark.png" + }, + "reviews:tablet:light": { + "widget": "reviews", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/reviews/tablet-light.png" + }, + "reviews:tablet:dark": { + "widget": "reviews", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/reviews/tablet-dark.png" + }, + "reviews:mobile:light": { + "widget": "reviews", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/reviews/mobile-light.png" + }, + "reviews:mobile:dark": { + "widget": "reviews", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/reviews/mobile-dark.png" + }, + "faq:desktop:light": { + "widget": "faq", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/faq/desktop-light.png" + }, + "faq:desktop:dark": { + "widget": "faq", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/faq/desktop-dark.png" + }, + "faq:tablet:light": { + "widget": "faq", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/faq/tablet-light.png" + }, + "faq:tablet:dark": { + "widget": "faq", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/faq/tablet-dark.png" + }, + "faq:mobile:light": { + "widget": "faq", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/faq/mobile-light.png" + }, + "faq:mobile:dark": { + "widget": "faq", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/faq/mobile-dark.png" + }, + "stats:desktop:light": { + "widget": "stats", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/stats/desktop-light.png" + }, + "stats:desktop:dark": { + "widget": "stats", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/stats/desktop-dark.png" + }, + "stats:tablet:light": { + "widget": "stats", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/stats/tablet-light.png" + }, + "stats:tablet:dark": { + "widget": "stats", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/stats/tablet-dark.png" + }, + "stats:mobile:light": { + "widget": "stats", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/stats/mobile-light.png" + }, + "stats:mobile:dark": { + "widget": "stats", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/stats/mobile-dark.png" + }, + "highlights:desktop:light": { + "widget": "highlights", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/highlights/desktop-light.png" + }, + "highlights:desktop:dark": { + "widget": "highlights", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/highlights/desktop-dark.png" + }, + "highlights:tablet:light": { + "widget": "highlights", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/highlights/tablet-light.png" + }, + "highlights:tablet:dark": { + "widget": "highlights", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/highlights/tablet-dark.png" + }, + "highlights:mobile:light": { + "widget": "highlights", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/highlights/mobile-light.png" + }, + "highlights:mobile:dark": { + "widget": "highlights", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/highlights/mobile-dark.png" + }, + "feature_intro:desktop:light": { + "widget": "feature_intro", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/feature_intro/desktop-light.png" + }, + "feature_intro:desktop:dark": { + "widget": "feature_intro", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/feature_intro/desktop-dark.png" + }, + "feature_intro:tablet:light": { + "widget": "feature_intro", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/feature_intro/tablet-light.png" + }, + "feature_intro:tablet:dark": { + "widget": "feature_intro", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/feature_intro/tablet-dark.png" + }, + "feature_intro:mobile:light": { + "widget": "feature_intro", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/feature_intro/mobile-light.png" + }, + "feature_intro:mobile:dark": { + "widget": "feature_intro", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/feature_intro/mobile-dark.png" + }, + "tilt_cases:desktop:light": { + "widget": "tilt_cases", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/tilt_cases/desktop-light.png" + }, + "tilt_cases:desktop:dark": { + "widget": "tilt_cases", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/tilt_cases/desktop-dark.png" + }, + "tilt_cases:tablet:light": { + "widget": "tilt_cases", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/tilt_cases/tablet-light.png" + }, + "tilt_cases:tablet:dark": { + "widget": "tilt_cases", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/tilt_cases/tablet-dark.png" + }, + "tilt_cases:mobile:light": { + "widget": "tilt_cases", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/tilt_cases/mobile-light.png" + }, + "tilt_cases:mobile:dark": { + "widget": "tilt_cases", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/tilt_cases/mobile-dark.png" + }, + "slider:desktop:light": { + "widget": "slider", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/slider/desktop-light.png" + }, + "slider:desktop:dark": { + "widget": "slider", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/slider/desktop-dark.png" + }, + "slider:tablet:light": { + "widget": "slider", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/slider/tablet-light.png" + }, + "slider:tablet:dark": { + "widget": "slider", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/slider/tablet-dark.png" + }, + "slider:mobile:light": { + "widget": "slider", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/slider/mobile-light.png" + }, + "slider:mobile:dark": { + "widget": "slider", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/slider/mobile-dark.png" + }, + "slider_media_combo:desktop:light": { + "widget": "slider_media_combo", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/slider_media_combo/desktop-light.png" + }, + "slider_media_combo:desktop:dark": { + "widget": "slider_media_combo", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/slider_media_combo/desktop-dark.png" + }, + "slider_media_combo:tablet:light": { + "widget": "slider_media_combo", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/slider_media_combo/tablet-light.png" + }, + "slider_media_combo:tablet:dark": { + "widget": "slider_media_combo", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/slider_media_combo/tablet-dark.png" + }, + "slider_media_combo:mobile:light": { + "widget": "slider_media_combo", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/slider_media_combo/mobile-light.png" + }, + "slider_media_combo:mobile:dark": { + "widget": "slider_media_combo", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/slider_media_combo/mobile-dark.png" + }, + "user_card:desktop:light": { + "widget": "user_card", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/user_card/desktop-light.png" + }, + "user_card:desktop:dark": { + "widget": "user_card", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/user_card/desktop-dark.png" + }, + "user_card:tablet:light": { + "widget": "user_card", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/user_card/tablet-light.png" + }, + "user_card:tablet:dark": { + "widget": "user_card", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/user_card/tablet-dark.png" + }, + "user_card:mobile:light": { + "widget": "user_card", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/user_card/mobile-light.png" + }, + "user_card:mobile:dark": { + "widget": "user_card", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/user_card/mobile-dark.png" + }, + "author_card:desktop:light": { + "widget": "author_card", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/author_card/desktop-light.png" + }, + "author_card:desktop:dark": { + "widget": "author_card", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/author_card/desktop-dark.png" + }, + "author_card:tablet:light": { + "widget": "author_card", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/author_card/tablet-light.png" + }, + "author_card:tablet:dark": { + "widget": "author_card", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/author_card/tablet-dark.png" + }, + "author_card:mobile:light": { + "widget": "author_card", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/author_card/mobile-light.png" + }, + "author_card:mobile:dark": { + "widget": "author_card", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/author_card/mobile-dark.png" + }, + "user_ranking:desktop:light": { + "widget": "user_ranking", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/user_ranking/desktop-light.png" + }, + "user_ranking:desktop:dark": { + "widget": "user_ranking", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/user_ranking/desktop-dark.png" + }, + "user_ranking:tablet:light": { + "widget": "user_ranking", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/user_ranking/tablet-light.png" + }, + "user_ranking:tablet:dark": { + "widget": "user_ranking", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/user_ranking/tablet-dark.png" + }, + "user_ranking:mobile:light": { + "widget": "user_ranking", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/user_ranking/mobile-light.png" + }, + "user_ranking:mobile:dark": { + "widget": "user_ranking", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/user_ranking/mobile-dark.png" + }, + "user_list:desktop:light": { + "widget": "user_list", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "light", + "path": "tests/visual-results/user_list/desktop-light.png" + }, + "user_list:desktop:dark": { + "widget": "user_list", + "viewport": { + "name": "desktop", + "width": 1440, + "height": 1100 + }, + "mode": "dark", + "path": "tests/visual-results/user_list/desktop-dark.png" + }, + "user_list:tablet:light": { + "widget": "user_list", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "light", + "path": "tests/visual-results/user_list/tablet-light.png" + }, + "user_list:tablet:dark": { + "widget": "user_list", + "viewport": { + "name": "tablet", + "width": 1024, + "height": 1000 + }, + "mode": "dark", + "path": "tests/visual-results/user_list/tablet-dark.png" + }, + "user_list:mobile:light": { + "widget": "user_list", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "light", + "path": "tests/visual-results/user_list/mobile-light.png" + }, + "user_list:mobile:dark": { + "widget": "user_list", + "viewport": { + "name": "mobile", + "width": 390, + "height": 844 + }, + "mode": "dark", + "path": "tests/visual-results/user_list/mobile-dark.png" + } + } +} diff --git a/tests/visual-results/README.md b/tests/visual-results/README.md new file mode 100644 index 00000000..5f506020 --- /dev/null +++ b/tests/visual-results/README.md @@ -0,0 +1,11 @@ +# Widget visual results + +This directory is intentionally empty until validation runs against the user-provided WordPress site. + +The browser run must create the screenshot paths declared by `tests/fixtures/widget-golden-v1.json` and a `manifest.json` using schema `aksrt.widget-visual-results.v1`. Validate completed results with: + +```text +php tools/validate-widget-golden.php --require-results +``` + +The validator requires all 222 viewport/theme screenshots, every declared interaction state, zero console errors, zero unexpected network failures, zero critical/serious accessibility findings, reduced-motion verification, a maximum 2 px component-boundary delta, and a maximum 1.5% pixel difference. diff --git a/tests/visual-results/static-a11y-report.md b/tests/visual-results/static-a11y-report.md new file mode 100644 index 00000000..1dd72a0e --- /dev/null +++ b/tests/visual-results/static-a11y-report.md @@ -0,0 +1,28 @@ +# AKSRT widget static accessibility audit + +Scope: `src/WidgetSystem/Renderers/`, `assets/widgets/frontend.js`, and `assets/widgets/frontend.css`. + +The source audit was repeated after remediation. Browser, screen-reader, Lighthouse/axe, console, and network validation remain pending until a target WordPress URL and browser MCP are available. + +## Critical (WCAG A) + +No static critical issue was found. + +## Serious (WCAG AA) + +No unresolved static serious issue remains. + +## Resolved source findings + +- **WCAG 2.1.1 Keyboard:** article and feature tabs now implement Arrow Left/Right, Home/End, focus movement, roving `tabindex`, and stable tab/panel associations. +- **WCAG 2.4.7 Focus Visible:** all widget links, buttons, inputs, selects, textareas, and explicit tabindex targets receive high-contrast light, dark, and forced-colors focus rings. +- **WCAG 2.2.2 Pause, Stop, Hide:** autoplay carousels pause on keyboard focus and expose a labeled, persistent pause/resume button; reduced-motion mode continues to disable autoplay. +- **WCAG 4.1.3 Status Messages:** AJAX containers expose `aria-live` and `aria-busy`, loading skeletons use `role="status"`, and video failure uses an assertive alert. + +These contracts are enforced by `tests/widget-system/a11y-contract.test.cjs`. + +## Browser verification still required + +- Confirm Swiper-generated pagination bullets, disabled navigation states, and pause/resume behavior with the bundled runtime. +- Verify 200% zoom, high-contrast mode, dark-mode contrast, focus order, and focus retention after AJAX replacement. +- Run Lighthouse or axe and perform keyboard-only checks at 1440, 1024, and 390 px in light and dark modes. diff --git a/tests/widget-system/a11y-contract.test.cjs b/tests/widget-system/a11y-contract.test.cjs new file mode 100644 index 00000000..c86e3f01 --- /dev/null +++ b/tests/widget-system/a11y-contract.test.cjs @@ -0,0 +1,33 @@ +'use strict'; + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +const root = path.resolve(__dirname, '../..'); +const read = (file) => fs.readFileSync(path.join(root, file), 'utf8'); +const js = read('assets/widgets/frontend.js'); +const css = read('assets/widgets/frontend.css'); +const content = read('src/WidgetSystem/Renderers/ContentRenderer.php'); +const knowledge = read('src/WidgetSystem/Renderers/KnowledgeProductRenderer.php'); +const general = read('src/WidgetSystem/Renderers/GeneralRenderer.php'); + +for (const key of ['ArrowRight', 'ArrowLeft', 'Home', 'End']) assert.match(js, new RegExp(key)); +assert.match(js, /setAttribute\('tabindex', tab === button \? '0' : '-1'\)/); +assert.match(js, /setAttribute\('aria-labelledby', button\.id\)/); +assert.match(content, /role="tab"[^;]+aria-controls=/); +assert.match(content, /role="tabpanel"[^;]+aria-labelledby=/); +assert.match(knowledge, /role="tab"[^;]+aria-controls=/); +assert.match(knowledge, /role="tabpanel"[^;]+aria-labelledby=/); + +assert.match(css, /:focus-visible/); +assert.match(css, /forced-colors: active/); +assert.match(content, /aria-live="polite" aria-busy="true"/); +assert.match(content, /role="status"/); +assert.match(js, /setAttribute\('aria-busy', 'true'\)/); +assert.match(js, /setAttribute\('aria-busy', 'false'\)/); +assert.match(general, /role="alert" aria-live="assertive"/); +assert.match(css, /prefers-reduced-motion: reduce/); +assert.match(js, /prefers-reduced-motion: reduce/); + +console.log('Widget accessibility contract tests passed: keyboard tabs, focus, live states and reduced motion.'); diff --git a/tests/widget-system/admin-core.test.cjs b/tests/widget-system/admin-core.test.cjs new file mode 100644 index 00000000..ee62c11e --- /dev/null +++ b/tests/widget-system/admin-core.test.cjs @@ -0,0 +1,20 @@ +'use strict'; + +const assert = require('node:assert/strict'); +const core = require('../../assets/widgets/admin-core.js'); + +assert.deepEqual(core.parseDependency('["mode","==","cards"]'), ['mode', '==', 'cards']); +assert.deepEqual(core.parseDependency('{broken'), []); +assert.equal(core.dependencyVisible(['mode', '==', 'cards'], 'cards'), true); +assert.equal(core.dependencyVisible(['mode', '==', 'cards'], 'list'), false); +assert.equal(core.dependencyVisible(['mode', '!=', 'cards'], 'list'), true); +assert.equal(core.dependencyVisible(['mode', '!=', 'cards'], 'cards'), false); +assert.equal(core.dependencyVisible([], 'anything'), true); + +assert.equal( + core.replaceRepeaterIndexes('widget-aksrt_widget_slider[4][slides][__index_ab12cd34__][layers][9][title]', [2, 1]), + 'widget-aksrt_widget_slider[4][slides][2][layers][1][title]' +); +assert.equal(core.replaceRepeaterIndexes('plain[name]', [1]), 'plain[name]'); + +console.log('Widget admin core tests passed: dependency visibility and nested repeater indexing.'); diff --git a/tests/widget-system/comment-hard-cut-contract.test.cjs b/tests/widget-system/comment-hard-cut-contract.test.cjs new file mode 100644 index 00000000..dd13a345 --- /dev/null +++ b/tests/widget-system/comment-hard-cut-contract.test.cjs @@ -0,0 +1,189 @@ +'use strict'; + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const test = require('node:test'); + +const root = path.resolve(__dirname, '..', '..'); +const read = (file) => fs.readFileSync(path.join(root, file), 'utf8'); +const exists = (file) => fs.existsSync(path.join(root, file)); + +test('comment area styles are fully owned (hard cut from vendor main.css)', () => { + const layout = read('assets/css/frontend/comments/layout.css'); + const mobile = read('assets/css/frontend/comments/mobile-item.css'); + + // 1:1 移植的关键布局选择器必须存在于自有文件。 + const layoutSelectors = [ + '#comments .comment-box .comments-closed', + '#comments #postcomments .comt-ctrl .but', + '#comment {', + '.comment-signarea {', + '#postcomments .comment-footer {', + '#postcomments .avatar-img {', + '#postcomments .children {', + '#postcomments .comt-meta > span:not(:empty)', + '#postcomments .comment-approve-link.approve {', + '#postcomments .comment-approve-link.unapprove {', + '#postcomments .comt-meta > span .comment-trash-link {', + '.comment-content {', + '#postcomments .comment-content img {', + '#comments .virtual-input {', + '.commentlist .no-more {', + ]; + for (const selector of layoutSelectors) { + assert.ok(layout.includes(selector), `layout.css must contain ${selector}`); + } + // 桌面隐藏必须带 #comments 前缀(id 特异性),任何后加载的 + // .flex{display:flex} 单类工具规则都无法在宽屏把假输入条顶出来。 + assert.equal(layout.includes('\n.virtual-input {'), false, 'desktop hide must be id-scoped, not bare .virtual-input'); + + // 移动端弹层 / 虚拟输入 / 640px 覆盖。 + const mobileSelectors = [ + '@media (max-width: 767px)', + '@media (max-width: 640px)', + '#comments .virtual-input {', + '.drop-fixed-sm .dropdown-menu,', + '.mobile-fixed {', + '#respond.mobile-fixed {', + '.drop-fixed-sm .dropdown-menu::before {', + '#comments .comt-box {', + '#postcomments .commentlist > .comment > .list-inline .comment-footer {', + ]; + for (const selector of mobileSelectors) { + assert.ok(mobile.includes(selector), `mobile-item.css must contain ${selector}`); + } + + // 自有文件不得包含表情/快捷回复样式。 + for (const [file, source] of [['layout.css', layout], ['mobile-item.css', mobile]]) { + for (const token of ['smilie', 'dropdown-quick-often', 'quick-reply-item', 'quick-reply-action']) { + assert.equal(source.includes(token), false, `${file} must not contain ${token}`); + } + } + + // 构建产物 comments.css 聚合了自有规则。 + const built = read('assets/css/build/comments.css'); + for (const selector of ['#postcomments .comt-meta > span:not(:empty)', '.mobile-fixed {', '#comments .virtual-input {', '#comments .comt-title {']) { + assert.ok(built.includes(selector), `build/comments.css must contain ${selector}`); + } +}); + +test('vendor main.css no longer carries comment-area rules (no dual path)', () => { + for (const file of ['assets/css/main.css', 'assets/css/main.min.css']) { + const source = read(file); + for (const token of [ + '#postcomments', + '.commentlist', + '.comt-', + '.comment-signarea', + '.comment-filter', + '.mobile-fixed', + '.drop-fixed-sm', + '#respond', + '#comments', + ]) { + assert.equal(source.includes(token), false, `${file} must not contain ${token}`); + } + // 小部件与共享规则仍留在全站表。 + assert.ok(source.includes('.comment-widget-item'), `${file} must keep .comment-widget-item`); + assert.ok(source.includes('.comment-mini-lists'), `${file} must keep .comment-mini-lists`); + assert.ok(source.includes('.content-after-box'), `${file} must keep .content-after-box`); + assert.ok(source.includes('.theme-pagination.pagenav'), `${file} must keep .theme-pagination.pagenav`); + } +}); + +test('quick reply is removed across the owned comment stack', () => { + const files = [ + 'assets/admin/src/schema/sections/post-list/comment.js', + 'assets/css/main.css', + 'assets/css/build/comments.css', + 'assets/js/comment-tools.js', + 'inc/helpers/aksrt-comments.php', + 'inc/helpers/comments/form-parts.php', + 'src/Admin/Schema/SchemaPostList.php', + 'src/Core/ScriptsPart1c.php', + 'src/Settings/PostDisplay.php', + ]; + const tokens = [ + 'comment_quick_s', + 'comment_quick_often', + 'quick_phrases', + 'parse_comment_quick_phrases', + 'quick-reply-item', + 'dropdown-quick-often', + 'input-quick', + 'commentQuickPhrases', + '快捷回复', + ]; + for (const file of files) { + const source = read(file); + for (const token of tokens) { + assert.equal(source.includes(token), false, `${file} must not contain ${token}`); + } + } +}); + +test('dead vendor comment archives stay deleted', () => { + for (const file of [ + 'assets/js/runtime/comment.js', + 'assets/js/runtime/comment.min.js', + 'assets/js/runtime/input-expand.js', + 'assets/js/runtime/input-expand.min.js', + ]) { + assert.equal(exists(file), false, `${file} must not exist`); + } + const loader = read('assets/js/runtime/loader.js'); + assert.doesNotMatch(loader, /['"](?:comment|input-expand)['"]\s*:/, 'legacy comment modules must have no loader mapping'); + assert.doesNotMatch(read('assets/js/runtime/main.js'), /stubVendorCommentModule|unbindVendorAjaxLoop/); +}); + +test('every comment-rendering singular loads the owned build bundle', () => { + // 旧的静态聚合文件已删除:它缺 layout.css 且 @import 无版本号, + // 曾导致页面/资源页手机端 .mobile-fixed 抽屉规则缺失、表单直接内联显示。 + assert.equal(exists('assets/css/frontend/comments.css'), false, 'stale frontend/comments.css aggregator must not exist'); + + const part1b = read('src/Core/ScriptsPart1b.php'); + // 统一入口:任何渲染评论区的 singular 都加载 build 聚合。 + assert.ok( + part1b.includes('is_singular() && !empty($singular_assets[\'needs_comments\'])'), + 'ScriptsPart1b must enqueue the comments bundle for every comment-rendering singular' + ); + assert.ok(part1b.includes('assets/css/build/'), 'comments enqueue must point at the build bundle'); + // 旧的两处按需入口必须移除(否则资源页/页面回到缺规则的聚合文件)。 + assert.equal(part1b.includes("$enqueue_module('comments')"), false, 'stale aggregator enqueue must be gone'); +}); + +test('comment markup keeps the 1:1 legacy DOM contract', () => { + const item = read('inc/helpers/comments/item.php'); + // 点赞按钮(legacy: zib_get_comment_like — svg + text + count)。 + assert.ok(item.includes(""), 'like button must render before '); + assert.ok(item.includes('aksrt_get_comment_icon(\'like\''), 'like button must use the sprite icon'); + assert.ok(item.includes('aksrt_get_comment_icon(\'topping\')'), 'topping badge must use the sprite icon'); + assert.ok(item.includes('aksrt_get_comment_icon(\'approve\''), 'approve action must use the sprite icon'); + assert.ok(item.includes('aksrt_get_comment_icon(\'menu_2\')'), 'action dropdown must use the sprite icon'); + assert.ok(item.includes('data-toggle="tooltip"'), 'time/reply tooltip parity'); + assert.equal(item.includes('fa fa-thumbs-up'), false, 'legacy fa like icon must be gone'); + + const comments = read('inc/helpers/aksrt-comments.php'); + assert.ok(comments.includes('post_password_required() || !comments_open()'), 'closed comments must render nothing'); + assert.ok(comments.includes('user_url_enabled'), 'guest url field toggle must be wired'); + assert.ok(comments.includes("name=\"url\""), 'guest url input must render'); + assert.ok(comments.includes("aksrt_get_comment_icon('signup', 'icon mr10')"), 'signarea signup must use the sprite icon'); + assert.ok(comments.includes('aksrt_render_vip_badge'), 'comt-title must render the vip badge (legacy: zibpay_get_vip_icon)'); + assert.equal(comments.includes('aksrt_render_user_identity_chips'), false, 'identity chips must not crowd the narrow comt-title'); + + const formParts = read('inc/helpers/comments/form-parts.php'); + assert.ok(formParts.includes("case 'link':"), 'link dropdown case must exist'); + assert.equal(formParts.includes("case 'quick':"), false, 'quick case must be gone'); + assert.equal(formParts.includes('fa-bolt'), false, 'quick button icon must be gone'); + + const icons = read('inc/helpers/comments/icons.php'); + assert.ok(icons.includes('function aksrt_get_comment_icon'), 'sprite icon helper must exist'); + const bootstrap = read('inc/bootstrap.php'); + assert.ok(bootstrap.includes("comments/icons.php"), 'bootstrap must load the icon helper'); + + // 设置契约:link / user_url 开关进入显示设置。 + const settings = read('src/Settings/PostDisplay.php'); + assert.ok(settings.includes("'link' => !empty($settings['comment_link'])"), 'toolbar link toggle'); + assert.ok(settings.includes("'user_url' => !empty($settings['comment_user_url_s'])"), 'user url toggle'); +}); diff --git a/tests/widget-system/download-config-contract.test.cjs b/tests/widget-system/download-config-contract.test.cjs new file mode 100644 index 00000000..a7feb105 --- /dev/null +++ b/tests/widget-system/download-config-contract.test.cjs @@ -0,0 +1,173 @@ +'use strict'; + +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const test = require('node:test'); + +const root = path.resolve(__dirname, '..', '..'); +const read = (file) => fs.readFileSync(path.join(root, file), 'utf8'); + +test('download settings section exists on both schema sides with matching defaults', () => { + const php = read('src/Admin/Schema/SchemaPermissions.php'); + const vue = read('assets/admin/src/schema/sections/permissions/index.js'); + + // PHP side is the authoritative contract. + assert.match(php, /'download' => \[/); + assert.match(php, /'key'\s+=> 'download'/); + assert.match(php, /'option_key' => 'aksrt_download_config'/); + + // Field parity: same four keys with the same defaults on both ends. + const fields = [ + ['enabled', 'true', 'enabled: true'], + ['url_alias', "'download'", "url_alias: 'download'"], + ['default_max_uses', '1', 'default_max_uses: 1'], + ['ttl_minutes', '10', 'ttl_minutes: 10'], + ]; + for (const [key, phpDefault, vueDefault] of fields) { + const phpField = new RegExp(`'key' => '${key}'[^\\]]*'default' => ${phpDefault}`); + assert.match(php, phpField, `PHP default mismatch for ${key}`); + assert.match(vue, new RegExp(`${vueDefault}`), `Vue default mismatch for ${key}`); + } + + // The link rules depend on the master switch on both ends. + assert.match(php, /'title' => '下载总开关'/); + assert.match(php, /'dependsOn' => \['key' => 'enabled', 'value' => true\]/); + assert.match(vue, /dependsOn: \{ key: 'enabled', value: true \}/); + + // Vue mirrors labels so admins see the same wording as validation errors. + assert.match(vue, /download: \{/); + assert.match(vue, /下载链接 URL 别名/); + assert.match(vue, /下载链接默认使用次数/); + assert.match(vue, /下载链接默认有效期限(分钟)/); +}); + +test('the download settings page is registered under the permissions menu', () => { + const menu = read('assets/admin/src/constants/sections/permissions.js'); + assert.match(menu, /schemaPage\(\{\s*key: 'permissions-download'/); + assert.match(menu, /route: '\/permissions\/download'/); + assert.match(menu, /canonicalDomain: 'permissions',\s*section: 'download',/); + + const settings = read('src/Settings/Settings.php'); + assert.match(settings, /'aksrt_download_config'/); +}); + +test('invalid url aliases are rejected server-side with admin-facing messages', () => { + const provider = read('src/Admin/SchemaProvider.php'); + assert.match(provider, /\$domain === 'permissions' && \$section === 'download'/); + assert.match(provider, /URL 别名不能为空/); + assert.match(provider, /\/\^\[A-Za-z0-9_-\]\+\$\//); + assert.match(provider, /禁止中文、空格和 \/ \\\\ \? # & 等特殊符号/); + assert.match(provider, /reserved_download_aliases/); + assert.match(provider, /'wp-json', 'wp-admin', 'wp-content', 'wp-includes'/); +}); + +test('Download.php derives endpoint, ttl and max uses from configuration', () => { + const dl = read('src/Content/Download.php'); + + // Dead hard-coded values are gone. + assert.doesNotMatch(dl, /const ENDPOINT/); + assert.doesNotMatch(dl, /const TOKEN_TTL/); + assert.doesNotMatch(dl, /aksrt-dl/); + + // Rewrite regex and URL building share the configured alias. + assert.match(dl, /preg_quote\(\$this->config\(\)\['endpoint'\], '\/'\)/); + assert.match(dl, /home_url\('\/' \. \$config\['endpoint'\] \. '\/' \. \$token\)/); + assert.match(dl, /add_action\('init', \[\$this, 'maybe_flush_rewrite'\], 99\)/); + assert.match(dl, /flush_rewrite_rules\(false\)/); + assert.match(dl, /aksrt_dl_rewrite_version/); + + // TTL and per-token max uses come from the settings section. + assert.match(dl, /'expires_in'\s+=> \$config\['ttl'\]/); + assert.match(dl, /'max_uses'\s+=> \(int\) \$config\['max_uses'\]/); +}); + +test('usage is counted only after full delivery, never for probes', () => { + const dl = read('src/Content/Download.php'); + + // Probe detection covers HEAD requests and speculative prefetches, which + // validate availability but consume nothing. + assert.match(dl, /private function is_probe_request\(\): bool/); + assert.match(dl, /REQUEST_METHOD.*=== 'HEAD'/); + assert.match(dl, /HTTP_SEC_PURPOSE/); + assert.match(dl, /'prefetch'/); + assert.match(dl, /!\$is_probe\) \{\s*\$this->consume_token/); + + // Local streaming splits headers from body and aborts stop consumption. + assert.match(dl, /private function send_download_headers\(string \$path\): void/); + assert.match(dl, /private function stream_body\(string \$path\): bool/); + assert.match(dl, /if \(connection_aborted\(\)\) \{/); + assert.match(dl, /return !connection_aborted\(\);/); + + // Atomic cap so concurrent finishes can not overshoot max_uses. + assert.match(dl, /SET used_count = used_count \+ 1 WHERE token = %s AND used_count < max_uses/); + + // Expired / exhausted links stay a dead end instead of re-issuing silently. + assert.match(dl, /status_header\(410\)/); + assert.match(dl, /请回到资源页重新获取/); + assert.doesNotMatch(dl, /fail_410\(\);\s*issue_token/); +}); + +test('expired links render a themed flat 410 page that follows the theme color', () => { + const dl = read('src/Content/Download.php'); + + // Full theme chrome instead of a bare wp_die page. + assert.match(dl, /private function render_expired_page\(\): void/); + assert.match(dl, /get_header\(\)/); + assert.match(dl, /get_footer\(\)/); + + // wp_die remains only as the safety net when output already started. + assert.match(dl, /headers_sent\(\)/); + + // Flat hero keyed to the runtime theme variables (light + html.dark). + assert.match(dl, /var\(--color-primary-soft/); + assert.match(dl, /var\(--color-primary/); + assert.match(dl, /var\(--key-color/); + assert.match(dl, /var\(--muted-4-color/); + + // Theme button system and FA5 icon form only (never "fa fa-"). + assert.match(dl, /class="btn-primary"/); + assert.match(dl, /class="btn-outline"/); + assert.match(dl, /fa fas fa-hourglass-end/); + assert.doesNotMatch(dl, /\bfa fa-/); + + // The 410 page is a utility rewrite; the header component must never match + // a page type for it (custom rewrites retain the is_home flag). + const slider = read('inc/helpers/homepage/header-components.php'); + assert.match(slider, /class_exists\('\\AKSRT\\Content\\Download'\)/); + assert.match(slider, /get_query_var\(\\AKSRT\\Content\\Download::QUERY_VAR\)/); +}); + +test('token generation retries on primary-key collisions', () => { + const dl = read('src/Content/Download.php'); + assert.match(dl, /PRIMARY KEY\(token\) already guarantees uniqueness/); + assert.match(dl, /for \(\$attempt = 0; \$attempt < 3; \$attempt\+\+\)/); +}); + +test('master switch off puts the token system to sleep and renders direct links', () => { + const dl = read('src/Content/Download.php'); + const box = read('templates/parts/resource-download-box.php'); + const pay = read('inc/helpers/aksrt-pay.php'); + + // The switch is a public runtime check; missing key means enabled. + assert.match(dl, /public function is_enabled\(\): bool/); + assert.match(dl, /!isset\(\$cfg\['enabled'\]\) \|\| !empty\(\$cfg\['enabled'\]\)/); + + // Rewrite, REST routes and token serving all bail out when disabled. + assert.match(dl, /if \(!\$this->is_enabled\(\)\) \{\s*return;\s*\}/); + assert.match(dl, /Master switch off: the token system is retired/); + + // The unused policy endpoint stays removed. + assert.doesNotMatch(dl, /download\/policy/); + assert.doesNotMatch(dl, /rest_policy/); + + // Direct mode renders anchors to the raw source URL instead of token buttons. + assert.match(box, /\$direct_download = class_exists\('\\AKSRT\\Content\\Download'\)/); + assert.match(box, /elseif \(\$direct_download\) \{/); + assert.match(box, /href="<\?php echo esc_url\(\$btn_href\); \?>/); + assert.match(box, /data-clipboard-text="<\?php echo esc_attr\(\$extract_code\); \?>/); + assert.match(pay, /if \(\$direct_download\) \{\s*\$buttons \.= 'failures) . "\n"); + exit(1); + } + echo "Widget system tests passed: {$this->assertions} assertions across schema, query, visibility, transfer, REST and payment states.\n"; + } + + private function schema_contract(): void { + $fields = [ + ['id' => 'mode', 'type' => 'select', 'default' => 'cards', 'options' => ['cards' => 'Cards', 'list' => 'List']], + ['id' => 'count', 'type' => 'slider', 'default' => 3, 'min' => 1, 'max' => 8], + ['id' => 'ids', 'type' => 'text', 'sanitize' => 'ids'], + ['id' => 'link', 'type' => 'link'], + ['id' => 'layout', 'type' => 'fieldset', 'fields' => [ + ['id' => 'enabled', 'type' => 'switcher', 'default' => false], + ['id' => 'gap', 'type' => 'number', 'default' => 8, 'min' => 0, 'max' => 40], + ]], + ['id' => 'rows', 'type' => 'group', 'max_items' => 2, 'fields' => [ + ['id' => 'title', 'type' => 'text'], + ['id' => 'tone', 'type' => 'radio', 'default' => 'blue', 'options' => ['blue' => 'Blue', 'red' => 'Red']], + ]], + ]; + $defaults = FieldSchema::defaults($fields); + $this->same('cards', $defaults['mode'], 'schema defaults preserve enums'); + $this->same(['enabled' => false, 'gap' => 8], $defaults['layout'], 'nested defaults are recursive'); + $normalized = FieldSchema::normalize($fields, [ + 'mode' => 'invalid', 'count' => 99, 'ids' => '2, 2,7 bad -4', + 'link' => ['url' => 'javascript:alert(1)', 'text' => '课程', 'target' => 'popup'], + 'layout' => ['enabled' => 'yes', 'gap' => -9, 'unknown' => 'drop'], + 'rows' => [ + ['title' => '第一项', 'tone' => 'red'], + ['title' => '第二项', 'tone' => 'invalid'], + ['title' => '第三项'], + ], + ]); + $this->same('cards', $normalized['mode'], 'invalid enum falls back'); + $this->same(8, $normalized['count'], 'numeric value clamps to maximum'); + $this->same('2,7,4', $normalized['ids'], 'ID list is unique and normalized'); + $this->same(['url' => '', 'text' => '课程', 'target' => ''], $normalized['link'], 'link parts sanitize independently'); + $this->same(['enabled' => true, 'gap' => 0], $normalized['layout'], 'nested values clamp and drop unknown keys'); + $this->same(2, count($normalized['rows']), 'group max_items is enforced'); + $this->same('blue', $normalized['rows'][1]['tone'], 'nested enum fallback is enforced'); + + $definition = new WidgetDefinition([ + 'slug' => 'dependency_test', 'name' => 'Dependency Test', + 'common' => ['title' => false, 'affix' => false, 'visibility' => false, 'animation' => false, 'layout' => false], + 'fields' => [ + ['id' => 'controller', 'type' => 'select', 'default' => 'off', 'options' => ['off' => 'Off', 'on' => 'On']], + ['id' => 'dependent', 'type' => 'text', 'dependency' => ['controller', '==', 'on']], + ], + ]); + $widget = new SchemaWidget($definition); + ob_start(); + $widget->render_full_form(['controller' => 'on', 'dependent' => 'visible']); + $html = (string) ob_get_clean(); + $this->contains('data-dependency=', $html, 'form exports dependency rule'); + $this->contains('"controller"', $html, 'dependency JSON is safely escaped'); + } + + private function query_contract(): void { + $args = PostQuery::arguments([ + 'count' => 99, 'category_ids' => '2,5', 'category_id' => 9, 'tag_ids' => '8,13', + 'limit_day' => 14, 'orderby' => 'like', 'order' => 'asc', 'pay_type' => 'gallery', + ], 0); + $this->same(50, $args['posts_per_page'], 'query count clamps'); + $this->same(1, $args['paged'], 'query page clamps'); + $this->same([9], $args['category__in'], 'segment category overrides category list'); + $this->same([8, 13], $args['tag__in'], 'query tag filter is normalized'); + $this->same('ASC', $args['order'], 'query order allowlist is applied'); + $this->same('meta_value_num', $args['orderby'], 'metric ordering uses numeric meta'); + $this->contains('gallery', json_encode($args['meta_query']), 'DomainModel pay type reaches meta query'); + $reference = PostQuery::arguments([ + 'count' => 6, 'cat' => '1, -2,3 bad', + 'orderby' => 'views', 'order' => 'DESC', 'limit_day' => 7, 'paginate' => '', + ], 3); + $this->same([1, 3], $reference['category__in'], 'reference cat includes positive IDs'); + $this->same([2], $reference['category__not_in'], 'reference cat excludes negative IDs'); + $this->false(isset($reference['tax_query']), 'topic filters are removed with the topics feature'); + $this->same('aksrt_post_views', $reference['meta_key'], 'reference view ordering uses numeric view meta'); + $this->false(isset($reference['meta_query']), 'modern reference queries do not apply commerce filters by default'); + $this->same(1, $reference['paged'], 'no-pagination queries stay on first page'); + $paywalled = PostQuery::arguments(['cat' => '1', 'zibpay_type' => ['1', '6'], 'paginate' => ''], 1, ['cat' => '1']); + $this->contains('reading', json_encode($paywalled['meta_query'] ?? []), 'tab commerce filters map to pay meta'); + $this->contains('video', json_encode($paywalled['meta_query'] ?? []), 'tab commerce filters cover every selected type'); + $invalid = PostQuery::arguments(['cat' => '', 'orderby' => 'drop table'], 1, ['cat' => '']); + $this->false(isset($invalid['meta_query']), 'modern reference fields never add commerce filters'); + $this->same('date', $invalid['orderby'], 'unknown orderby falls back'); + $tabs = ['tabs' => [['title' => 'A', 'category_id' => 2], ['title' => 'B', 'category_id' => 3]]]; + $this->same(3, PostQuery::segment($tabs, '1')['category_id'], 'valid tab segment resolves'); + $this->same(2, PostQuery::segment($tabs, '99')['category_id'], 'invalid tab segment falls back to first'); + } + + private function modern_widget_contract(): void { + $tab_fields = WidgetSchemas::for('tab_posts'); + $tab_defaults = FieldSchema::defaults($tab_fields); + $this->same('mini', $tab_defaults['style'], 'modern tabs default to mini'); + $this->same(6, $tab_defaults['count'], 'modern tabs default to six posts'); + $this->same(['热门推荐', '最近更新', '猜你喜欢'], array_column($tab_defaults['tabs'], 'title'), 'modern tab defaults match reference ordering'); + $tab = FieldSchema::normalize($tab_fields, ['tabs' => [[ + 'title' => '栏目', 'cat' => '1,-2 3', 'zibpay_type' => ['1', '6'], + 'order' => 'asc', + ]]]); + $this->same('1,-2,3', $tab['tabs'][0]['cat'], 'tab cat keeps signed reference IDs'); + $this->false(isset($tab['tabs'][0]['topics']), 'topic filters are gone from tab configuration'); + $this->same(['1', '6'], $tab['tabs'][0]['zibpay_type'], 'tab commerce filters are preserved'); + $this->contains('栏目', $tab['tabs'][0]['title'], 'tab title keeps controlled HTML'); + $this->false(str_contains($tab['tabs'][0]['title'], ' 最新课程', + 'show_type' => 'invalid', + 'show_id_type' => 'show', + 'show_ids' => '3, 3,9 bad -4', + 'count' => 999, + 'style' => 'broken', + 'cat' => '4,-7', +]); +if ($normalized['count'] !== 20 || $normalized['style'] !== 'list' || $normalized['show_type'] !== 'all') { + $errors[] = 'Schema clamping or enum fallback failed.'; +} +if ($normalized['show_ids'] !== '3,9,4' || $normalized['cat'] !== '4,-7') { + $errors[] = 'ID list normalization failed: ' . $normalized['show_ids']; +} +if (str_contains($normalized['title'], '