模板:NavboxV2/sandbox
这是Template:NavboxV2(差异)的沙盒。 |
此模板沙盒被引用于许多页面。 为了避免造成大规模的影响,所有对此模板沙盒的编辑应先于沙盒、测试样例或您的沙盒上测试。 测试后无误的版本可以一次性地加入此模板沙盒中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
此模板不能在维基百科的移动视图中显示,只能在桌面版显示。请阅读文档以获得解释。 |
这是((NavboxV2))的Lua实现代码。
简介[编辑]
合并了((Navbox))相关的一系列模板。融合了((Navbox))的行式、((Navbox subgroup))的子代模块包含、((Navbox with columns))的列式,((Navbox with collapsible groups)))的折叠行式。
改写自模块:Navbox。
设计用途[编辑]
在Category:引用模板后大小超过限制的页面中,有相当一部分页面是由于((Navbox))模板超载导致。
- 根据WP:模板限制中“嵌套展开”的说法,相同页面的多次嵌套调用是会被分次统计的(例如:页面A嵌入页面B,页面B嵌入页面C,页面C相对页面A统计到的展开字节数是被计算了2次)。而现在Navbox的子代块、列式,折叠行式的实现都是基于Navbox行式的模板调用或类似样式结构迭代,这样就符合内部多次调用Navbox的条件,页面很容易会超过模版展开后大小的限制。
- 其次,实际上Lua的运行限制条件相当宽裕,50MB的内存限制,10秒的运行时限制,很多页面实际使用只在十分之一左右或以下,可以被大量压榨性能。
所以将Navbox所有的实现全部以Lua实现,希望能腾出解释器运行量到Lua运行量,降低解析器触发展开后大小限制的可能。
效果[编辑]
- 在对于包含一层子Navbox的情况,展开后大小下降最多有50~60%左右。
对比例子[编辑]
参数[编辑]
与((Navbox))系列模板几乎兼容。但新增部分参数填入:
type
:Navbox的类型,对应值为vertical
(对应((Navbox)))、horizontal
(对应((Navbox with columns)))、vertical_collapsible
(对应((Navbox with collapsible groups))),默认值为vertical
。border
:Navbox的隐藏参数,用于控制Navbox的边框机制来使子Navbox能被嵌入到父Navbox的值字段(例如list
、col
等)中,实际对应((Navbox subgroup))的实现机制。对应值为child
、subgroup
任一个。
- 在本模板添加子Navbox层时,必须传入这两个参数,这是本模板区分是否存在子Navbox层的依赖。本模板首层Navbox层无需添加
border
,按需添加type
。
- 在本模板添加子Navbox层时,必须传入这两个参数,这是本模板区分是否存在子Navbox层的依赖。本模板首层Navbox层无需添加
removeGroupPadding
:用于区别((Navbox|child))和((Navbox subgroup)),后者在Groupn字段的单元格增加一组padding的配置,适用于子Navbox层。任意值,存在则可,为移除该padding配置(对应((Navbox|child)))。
[编辑]
将原有嵌入((Navbox))系列模板的值字段listn
(其他类同)改为listn-
,并作为相应嵌套子Navbox模板的参数的前缀来加入,使这些模板嵌套转换为扁平化的一层模板参数。
((Navbox))系列 | 本模板 |
---|---|
((Navbox
|name = Navbox/doc
|state = uncollapsed
|image = (({image))}
|imageleft = (({imageleft))}
|title = (({title))}
|above = (({above))}
|group1 = (({group1))}
|list1 = ((Navbox subgroup
| title = (({list1-title))}
| above = (({list1-above))}
| below = (({list1-below))}
| imageleft = (({list1-imageleft))}
| image = (({list1-image))}
| group1 = (({list1-group1))}
| list1 = (({list1-list1))}
| group2 = (({list1-group2))}
| list2 = (({list1-list2))}
))
|group2 = (({group2))}
|list2 = ((Navbox subgroup
| group1 = (({list2-group1))}
| list1 = (({list2-list1))}
| group2 = (({list2-group2))}
| list2 = (({list2-list2))}
))
|below = (({below))}
))
|
((NavboxV2
|name = Navbox/doc
|state = uncollapsed
|image = (({image))}
|imageleft = (({imageleft))}
|title = (({title))}
|above = (({above))}
<!-- list1 -->
|group1 = (({group1))}
<!-- list1-sub-->
|list1-type =vertical <!--作为list1的子Navbox层,全部相应参数加上对应前缀“list1-”,下同,如此类推 -->
|list1-border=child
|list1-title = (({list1-title))}
|list1-above = (({list1-above))}
|list1-below = (({list1-below))}
|list1-imageleft = (({list1-imageleft))}
|list1-image = (({list1-image))}
|list1-group1 = (({list1-group1))}
|list1-list1 = (({list1-list1))}
|list1-group2 = (({list1-group2))}
|list1-list2 = (({list1-list2))}
<!-- list2 -->
|group2 = (({group2))}
<!-- list2-sub-->
|list2-type =vertical <!--作为list2的子Navbox层,全部相应参数加上对应前缀“list2-”,下同,如此类推 -->
|list2-border=child
|list2-group1 = (({list2-group1))}
|list2-list1 = (({list2-list1))}
|list2-group2 = (({list2-group2))}
|list2-list2 = (({list2-list2))}
<!--end-->
|below = (({below))}
))
|
转换注意[编辑]
由于((Navbox))系列的实现较为复杂和涉及自我嵌套,本模板的实现也为此做了对应兼容性调整,可能会出现一些参数被过度透传(可能在样式控制部分,原因是原有设计通过控制参数传入来隔离,而本设计为了使参数扁平化,导致部分这些参数无法隔离)。而且模板参数非常依赖命名规律,在转换替换前,请进行testcase检查,确认转换后能与原来的样式、功能基本一致,才应用转换。如果出现问题,请保留案例并联络本模板维护编辑协助处理,或者放弃。
虽然可以在值字段(例如list
、col
等)重新嵌入((Navbox))系列模板,但这和原有做法一样,失去了本模板降低解析器限制的作用,不建议这样做。
上述文档嵌入自Module:NavboxV2/doc。 (编辑 | 历史) 编者可以在本模板的沙盒 (编辑 | 差异)和测试样例 (创建)页面进行实验。 本模板的子页面。 |
Text is available under the CC BY-SA 4.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.