跳到内容
导航菜单
切换导航
登录
产品
行动
自动化任何工作流
包装
托管和管理包
安全
查找并修复漏洞
代码空间
即时开发环境
GitHub Copilot公司
使用AI编写更好的代码
代码审查
管理代码更改
问题
计划和跟踪工作
讨论
在代码外协作
探索
所有功能
文档
GitHub技能
博客
解决
按大小
企业
团队
创业公司
按行业划分
保健
金融服务
制造业
按用例
CI/CD和自动化
开发运营
开发安全操作
资源
话题
人工智能
开发运营
安全
软件开发
查看全部
探索
学习途径
白皮书、电子书、网络研讨会
客户案例
合作伙伴
开放源代码
GitHub赞助商
资助开源开发人员
ReadME项目
GitHub社区文章
存储库
话题
趋向
收藏
企业
企业平台
AI驱动的开发人员平台
可用附加组件
高级安全
企业级安全功能
GitHub Copilot公司
企业级AI功能
特优支持
企业级全天候支持
定价
搜索或跳转到。。。
搜索代码、存储库、用户、问题、推送请求。。。
搜索
清除
搜索语法提示
提供反馈
我们阅读了每一条反馈,并非常认真地对待您的意见。
包括我的电子邮件地址以便联系我
保存的搜索
使用保存的搜索更快地筛选结果
姓名
查询
要查看所有可用的限定符,请参阅我们的
文档
.
登录
注册
重置焦点
您使用另一个选项卡或窗口登录。
重新加载
刷新会话。
您在另一个选项卡或窗口中注销。
重新加载
刷新会话。
您在另一个选项卡或窗口上切换了帐户。
重新加载
刷新会话。
解除警报
{{消息}}
WordPress(文字出版社)
/
文字印刷-开发
公共镜像
镜像自
git://develop.git.wordpress.org/
通知
您必须登录才能更改通知设置
福克
2.5公里
星星
2.5公里
代码
Pull请求
1.7公里
行动
安全
洞察力
其他导航选项
代码
Pull请求
行动
安全
洞察力
文件夹
a412372号
面包屑
文字印刷-开发
/
型钢混凝土
/
wp包括
/
交互性api
/
class-wp-interactivity-api.php
责备
责备
最新提交
历史
历史
1000行(915个位置)·37.3 KB
a412372号
面包屑
文字印刷-开发
/
型钢混凝土
/
wp包括
/
交互性api
/
class-wp-interactivity-api.php
顶部
文件元数据和控件
代码
责备
1000行(915个位置)·37.3 KB
原始
1
2
三
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?
php(电话)
/**
*交互API:WP_Interactivity_API类。
*
*@package WordPress
*@subpackage交互API
*自6.5.0起
*/
/**
*用于处理服务器上的Interactivity API的类。
*
*自6.5.0起
*/
最终的
班
WP_互动_API
{
/**
*保存指令属性名到其处理器方法的映射。
*
*自6.5.0起
*@var数组
*/
私有的
静止的
$
定向处理器
=
阵列
(
'
数据wp交互
'
=>
'
数据交互处理器
'
,
'
数据-路由器区域
'
=>
'
数据路由器区域处理器
'
,
'
数据-wp-context
'
=>
'
数据wpcontext_processor
'
,
'
数据wp绑定
'
=>
'
数据_绑定_处理器
'
,
'
数据wp类
'
=>
'
数据wp类处理器
'
,
'
数据wp样式
'
=>
'
数据类型处理器
'
,
'
数据-文本
'
=>
'
数据_文本_处理器
'
,
/*
*“data-wp-each”需要在最后处理,因为它会移动
*光标指向已处理项的末尾,以防止它们被
*处理了两次。
*/
'
数据-wp-each
'
=>
'
数据处理器
'
,
);
/**
*保存不同交互API存储的初始状态。
*
*此状态在服务器指令处理期间使用。
那么,它就是
*序列化并作为交互数据的一部分发送给客户端
*在客户端交互存储的水合过程中恢复。
*
*自6.5.0起
*@var数组
*/
私有的
$
状态_数据
=
阵列
();
/**
*保存不同交互API存储所需的配置。
*
*此配置被序列化并作为
*交互数据,可以由客户端交互存储区访问。
*
*自6.5.0起
*@var数组
*/
私有的
$
配置数据
=
阵列
();
/**
*指示“data-wp-router-region”指令是否具有
*在HTML中找到并处理。
*
*该值保存在WP_Interactivity_API的私有属性中
*实例,而不是在处理器内使用静态变量
*函数,它将为所有实例保留相同的值
*无论他们是否处理过
*“data-wp-router-region”指令与否。
*
*自6.5.0起
*@var布尔
*/
私有的
$
已处理路由器区域
=
假
;
/**
*获取和/或设置
*给定的命名空间。
*
*如果该存储命名空间的状态已经存在,则会合并新的
*用现有状态提供状态。
*
*自6.5.0起
*
*@param string$store_namespace唯一的存储命名空间标识符。
*@param array$state可选。
将与指定的现有状态合并的数组
*存储命名空间。
*@return array指定存储命名空间的当前状态。
如果$state为
*提供了参数。
*/
公众的
功能
状态
(
一串
$
存储名称空间
,
阵列
$
状态
=
阵列
() ):
阵列
{
如果
( !
发行
(
$
这
->
状态数据
[
$
存储名称空间
] ) ) {
$
这
->
状态_数据
[
$
存储名称空间
] =
阵列
();
}
如果
(
是数组(_A)
(
$
状态
) ) {
$
这
->
状态_数据
[
$
存储名称空间
] =
数组替换递归
(
$
这
->
状态_数据
[
$
存储名称空间
],
$
状态
);
}
返回
$
这
->
状态_数据
[
$
商店名称空间
];
}
/**
*获取和/或设置给定
*存储命名空间。
*
*如果存在该存储命名空间的配置,则会合并新的
*提供了现有配置。
*
*自6.5.0起
*
*@param string$store_namespace唯一的存储命名空间标识符。
*@param array$config可选。
将与现有配置合并的阵列
*指定的存储命名空间。
*@return array指定存储命名空间的配置。
这将是更新的配置,如果
*提供了$config参数。
*/
公众的
功能
配置
(
一串
$
存储名称空间
,
阵列
$
配置
=
阵列
() ):
阵列
{
如果
( !
发行
(
$
这
->
配置数据
[
$
存储名称空间
] ) ) {
$
这
->
配置数据
[
$
存储名称空间
] =
阵列
();
}
如果
(
是数组(_A)
(
$
配置
) ) {
$
这
->
配置数据
[
$
存储名称空间
] =
数组替换递归
(
$
这
->
配置数据
[
$
存储名称空间
],
$
配置
);
}
返回
$
这
->
配置数据
[
$
商店名称空间
];
}
/**
*打印序列化的客户端交互数据。
*
*将配置和初始状态编码为JSON,并在
*类型为“application/json”的脚本标记。
进入浏览器后,状态将
*被解析并用于水合客户端交互存储和
*可以使用“getConfig”实用程序进行配置。
*
*自6.5.0起
*/
公众的
功能
打印客户端交互数据
() {
如果
(
空的
(
$
这
->
状态_数据
) &&
空的
(
$
这
->
配置数据
) ) {
返回
;
}
$
交互数据
=
阵列
();
$
配置
=
阵列
();
foreach公司
(
$
这
->
配置数据
作为
$
钥匙
=>
$
价值
) {
如果
( !
空的
(
$
价值
) ) {
$
配置
[
$
钥匙
] =
$
价值
;
}
}
如果
( !
空的
(
$
配置
) ) {
$
互动性数据
[
'
配置
'
] =
$
配置
;
}
$
状态
=
阵列
();
foreach公司
(
$
这
->
状态_数据
作为
$
钥匙
=>
$
价值
) {
如果
( !
空的
(
$
价值
) ) {
$
状态
[
$
钥匙
] =
$
价值
;
}
}
如果
( !
空的
(
$
状态
) ) {
$
交互数据
[
'
状态
'
] =
$
状态
;
}
如果
( !
空的
(
$
交互数据
) ) {
wp_print_inline_script_tag(打印行脚本标记)
(
wp_json编码
(
$
交互数据
,
JSON_HEX_TAG格式
|
JSON_HEX_AMP格式
),
阵列
(
'
类型
'
=>
'
应用程序/json
'
,
'
身份证件
'
=>
'
wp-交互数据
'
,
)
);
}
}
/**
*注册“@wordpress/interactivity”脚本模块。
*
*自6.5.0起
*/
公众的
功能
寄存器脚本模块
() {
$
后缀
=
wp_scripts_get_suffix
();
wp_寄存器_脚本_模块
(
'
@wordpress/互动
'
,
包含url
(
"
js/dist/交互性
$
后缀
.js文件
"
)
);
wp_寄存器_脚本_模块
(
'
@wordpress/交互式路由器
'
,
包含url
(
"
js/dist/interactivity路由器
$
后缀
.js文件
"
),
阵列
(
'
@wordpress/互动
'
)
);
}
/**
*为Interactivity API添加必要的挂钩。
*
*自6.5.0起
*/
公众的
功能
添加挂钩(_H)
() {
添加操作(_A)
(
'
wp_排队_脚本
'
,
阵列
(
$
这
,
'
寄存器脚本模块
'
) );
添加操作(_A)
(
'
wp_脚垫
'
,
阵列
(
$
这
,
'
打印客户端交互数据
'
) );
}
/**
*处理HTML内容中包含的交互指令
*并相应地更新标记。
*
*自6.5.0起
*
*@param string$html要处理的html内容。
*@return string处理的HTML内容。
当HTML包含不平衡的标记时,它将返回原始内容。
*/
公众的
功能
流程_指令
(
一串
$
html格式
):
一串
{
如果
( !
字符串(_C)
(
$
html格式
,
'
数据-wp-
'
) ) {
返回
$
html格式
;
}
$
上下文堆栈
=
阵列
();
$
命名空间堆栈
=
阵列
();
$
结果
=
$
这
->
进程目录参数
(
$
html格式
,
$
上下文堆栈
,
$
命名空间堆栈
);
返回
无效的
===
$
结果
?
$
html格式
:
$
结果
;
}
/**
*处理HTML内容中包含的交互指令
*并相应地更新标记。
*
*它需要通过引用传递上下文和命名空间堆栈,并且
*如果HTML包含不平衡的标记,则返回null。
*
*自6.5.0起
*
*@param string$html要处理的html内容。
*@param array$context_stack对数组的引用,用于在处理期间跟踪上下文。
*@param array$namespace_stack对处理期间用于管理命名空间的数组的引用。
*@return string | null已处理的HTML内容。
当HTML包含不平衡的标记时,它返回null。
*/
私有的
功能
进程目录参数
(
一串
$
html格式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
$
第页
=
新的
WP_交互_API_指令_处理器
(
$
html格式
);
$
标记_堆栈
=
阵列
();
$
不平衡的
=
假
;
$
方向处理器前缀
=
数组键
(
自己
::
$
定向处理器
);
$
方向处理器前缀反向
=
阵列_反向
(
$
方向处理器前缀
);
虽然
(
$
第页
->
下一个标签
(
阵列
(
'
标记输送器
'
=>
'
参观
'
) ) ) {
$
标记名
=
$
第页
->
获取标签(_T)
();
/*
*SVG和MATH标记中的指令未被处理,
*因为它们与标记处理器不兼容。
*我们仍然处理HTML的其余部分。
*/
如果
(
'
SVG公司
'
===
$
标记名
||
'
数学
'
===
$
标记名
) {
$
第页
->
跳过标签输送器
();
持续
;
}
如果
(
$
第页
->
是标签失败者
() ) {
列表
(
$
打开标签名称
,
$
方向_前缀
) =
结束
(
$
标记_堆栈
);
如果
(
0
===
计数
(
$
标记_堆栈
) ||
$
打开标记名
!==
$
标记名
) {
/*
*如果标记堆栈为空或匹配的开始标记不是
*与结束标记相同,这意味着HTML是不平衡的
*停止处理。
*/
$
不平衡的
=
真实的
;
打破
;
}
其他的
{
//从堆栈中删除最后一个标记。
阵列_弹出
(
$
标记_堆栈
);
}
}
其他的
{
如果
(
0
!==
计数
(
$
第页
->
使用前缀获取属性名称
(
'
数据-每个孩子
'
) ) ) {
/*
*如果标记有“data-wp-each-child”指令,请跳到其更接近的位置
*标记,因为这些标记已被处理。
*/
$
第页
->
下一个平衡标记失败者标记
();
持续
;
}
其他的
{
$
方向_前缀
=
阵列
();
//检查是否为每个指令注册了服务器指令处理器。
foreach公司
(
$
第页
->
使用前缀获取属性名称
(
'
数据-wp-
'
)
作为
$
属性_名称
) {
列表
(
$
方向_前缀
) =
$
这
->
提取前缀和后缀
(
$
属性_名称
);
如果
(
数组键存在
(
$
方向_前缀
,
自己
::
$
定向处理器
) ) {
$
方向_前缀
[] =
$
方向_前缀
;
}
}
/*
*如果此标记将访问其更近的标记,它会将其添加到标记堆栈中
*因此,它可以处理其结束标记并检查不平衡标记。
*/
如果
(
$
第页
->
has_and_visits_its_clower_tag
() ) {
$
标记_堆栈
[] =
阵列
(
$
标记名
,
$
方向_前缀
);
}
}
}
/*
*如果匹配的opener标记没有任何指令,它可以跳过
*处理。
*/
如果
(
0
===
计数
(
$
方向_前缀
) ) {
持续
;
}
//指令处理可能会有所不同,这取决于它是进入标记还是退出标记。
$
模式
=
阵列
(
'
进入
'
=> !
$
第页
->
is_tag_closer(is_tag_closer)
(),
'
出口
'
=>
$
第页
->
是标签失败者
() || !
$
第页
->
has_and_visits_its_clower_tag
(),
);
foreach公司
(
$
模式
作为
$
模式
=>
$
应该运行(_R)
) {
如果
( !
$
应该运行(_R)
) {
持续
;
}
/*
*按“directives_processor”数组的顺序对属性进行排序
*并检查此元素中存在哪些指令。
*/
$
现有目录前缀
=
阵列_相交
(
'
进入
'
===
$
模式
?
$
方向处理器前缀
:
$
方向处理器前缀反向
,
$
方向_前缀
);
foreach公司
(
$
存在_方向_前缀
作为
$
方向_前缀
) {
$
函数
=
是数组(_A)
(
自己
::
$
定向处理器
[
$
方向_前缀
] )
?
自己
::
$
定向处理器
[
$
方向_前缀
]
:
阵列
(
$
这
,
自己
::
$
定向处理器
[
$
方向_前缀
] );
呼叫用户取消阵列
(
$
函数
,
阵列
(
$
第页
,
$
模式
, &
$
上下文堆栈
, &
$
命名空间堆栈
, &
$
标记_堆栈
)
);
}
}
}
/*
*如果HTML不平衡,则返回null,因为HTML不平衡
*加工不安全。
在这种情况下,Interactivity API运行时将
*在水合过程中更新客户端的HTML。
*/
返回
$
不平衡的
||
0
<
计数
(
$
标记_堆栈
) ?
无效的
:
$
第页
->
获取更新的html
();
}
/**
*根据当前的
*存储命名空间、状态和上下文。
*
*自6.5.0起
*
*@param string | true$directive_value指令属性值字符串或“true”(当它是布尔属性时)。
*@param string$default_namespace如果指令中没有显式定义名称空间,则使用默认名称空间
*值。
*@param array | false$context用于计算指令的当前上下文,如果没有,则为false
*上下文。
*@return mixed|null评估的结果。
如果引用路径不存在,则为Null。
*/
私有的
功能
评价
(
$
方向值
,
一串
$
默认命名空间
,
$
上下文
=
假
) {
列表
(
$
纳秒
,
$
路径
) =
$
这
->
提取方向值
(
$
方向值
,
$
默认命名空间
);
如果
(
空的
(
$
路径
) ) {
返回
无效的
;
}
$
商店
=
阵列
(
'
状态
'
=>
$
这
->
状态_数据
[
$
纳秒
] ??
阵列
(),
'
上下文
'
=>
$
上下文
[
$
纳秒
] ??
阵列
(),
);
//检查引用路径前面是否有否定运算符(!)。
$
应该_无效_值
=
'
!
'
===
$
路径
[
0
];
$
路径
=
$
应为负值
?
子(substr)
(
$
路径
,
1
) :
$
路径
;
//使用引用路径从存储中提取值。
$
路径段(_S)
=
爆炸
(
'
.
'
,
$
路径
);
$
现在的
=
$
商店
;
foreach公司
(
$
路径段(_S)
作为
$
路径段(_S)
) {
如果
(
发行
(
$
现在的
[
$
路径段(_S)
] ) ) {
$
现在的
=
$
现在的
[
$
路径段(_S)
];
}
其他的
{
返回
无效的
;
}
}
//如果包含否定运算符(!),则返回相反值。
返回
$
应为负值
? !
$
现在的
:
$
现在的
;
}
/**
*提取指令属性名称以分隔并返回指令
*前缀和可选后缀。
*
*后缀是第一个双连字符后面的字符串,前缀是
*后缀之前的所有内容。
*
*示例:
*
*extract_prefix_and_suffix(“data-wp-interactive”)=>数组(“datawp-interative”,null)
*extract_prefix_and_suffix(“data-wp-bind--src”)=>数组(“datawp-bind”,“src”)
*extract_prefix_and_suffix('data wp foo--and--bar')=>数组('data wp foo','and--bar')
*
*自6.5.0起
*
*@param string$directive_name指令属性名称。
*@return array包含指令前缀和可选后缀的数组。
*/
私有的
功能
提取前缀和后缀
(
一串
$
方向_名称
):
阵列
{
返回
爆炸
(
'
--
'
,
$
方向_名称
,
2
);
}
/**
*解析并提取给定的命名空间和引用路径
*指令属性值。
*
*如果值不包含显式名称空间,则返回
*默认值。
如果值包含JSON对象而不是引用
*路径,函数尝试解析它并返回结果数组。
如果
*该值包含表示布尔值的字符串(“true”和“false”),
*数字(“1”和“1.2”)或“null”,函数还将它们转换为
*常规布尔值、数字和“null”。
*
*示例:
*
*extract_directive_value(“actions.foo”,“myPlugin”)=>数组(“myPlupin”,“actions.foo”)
*extract_directive_value('otherPlugin::actions.foo','myPlugin')=>数组('oterPlugin','actions.foo')
*extract_directive_value('{“isOpen”:false}','myPlugin')=>数组('myPlugin',array('isOpen'=>false))
*extract_directive_value('otherPlugin::{“isOpen”:false}','myPlugin')=>数组('ottherPlugin',数组('isOpen'=>false))
*
*自6.5.0起
*
*@param string | true$directive_value指令属性值。
当它是布尔值时,它可以为“true”
*属性。
*@param string | null$default_namespace可选。
如果没有,则显式定义默认名称空间。
*@return array一个数组,其中包含第一项中的命名空间和JSON、引用路径或
*第二项。
*/
私有的
功能
提取方向值
(
$
方向值
,
$
默认命名空间
=
无效的
):
阵列
{
如果
(
空的
(
$
方向值
) ||
是池(_B)
(
$
方向值
) ) {
返回
阵列
(
$
默认命名空间
,
无效的
);
}
//如果值中有命名空间,则替换值和命名空间。
如果
(
1
===
预匹配(_M)
(
'
/^([\w\-_\/]+)::/
'
,
$
方向值
) ) {
列表
(
$
默认命名空间
,
$
方向性_值
) =
爆炸
(
'
::
'
,
$
方向值
,
2
);
}
/*
*尝试将值解码为JSON对象。
如果失败
*不是“null”,则返回原样的值。否则,返回
*字符串“null”的解码JSON或null。
*/
$
解码json
=
json代码
(
$
方向值
,
真实的
);
如果
(
无效的
!==
$
解码.json
||
'
无效的
'
===
$
方向值
) {
$
方向值
=
$
解码.json
;
}
返回
阵列
(
$
默认命名空间
,
$
方向值
);
}
/**
*将烤肉串转换为camelCase。
*
*@param string$str要转换为camelCase的烤肉串。
*@return string转换后的camelCase字符串。
*/
私有的
功能
烤肉串_骆驼肉
(
一串
$
字符串
):
一串
{
返回
lcfirst公司
(
preg重新放置回调
(
'
/(-)([a-z])/
'
,
功能
(
$
比赛
) {
返回
斯特图珀
(
$
比赛
[
2
] );
},
斯特劳尔
(
rtrim公司
(
$
字符串
,
'
-
'
) )
)
);
}
/**
*处理“data-wp-interactive”指令。
*
*它将指令值中定义的默认存储命名空间添加到
*堆栈,以便它可用于嵌套的交互元素。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据交互处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
//退出标记时,它会从堆栈中删除最后一个名称空间。
如果
(
'
出口
'
===
$
模式
) {
阵列_弹出
(
$
命名空间堆栈
);
返回
;
}
//尝试解码“data-wp-interactive”属性值。
$
属性_值
=
$
第页
->
获取属性
(
'
数据wp交互
'
);
/*
*如果
*“data-wp-interactive”定义无效或不包含
*命名空间。
这样做是因为函数弹出了当前名称空间
*只要找到“data-wp-interactive”的结束标记,
*独立于先前的“数据wp交互式”定义
*包含有效的命名空间。
*/
$
新建命名空间(_N)
=
无效的
;
如果
(
是字符串
(
$
属性_值
) && !
空的
(
$
属性_值
) ) {
$
解码.json
=
json代码
(
$
属性_值
,
真实的
);
如果
(
是数组(_A)
(
$
解码.json
) ) {
$
新建命名空间(_N)
=
$
解码.json
[
'
命名空间
'
] ??
无效的
;
}
其他的
{
$
新建命名空间(_N)
=
$
属性_值
;
}
}
$
命名空间堆栈
[] = (
$
新建命名空间(_N)
&&
1
===
预匹配(_M)
(
'
/^([\w\-_\/]+)/
'
,
$
新建命名空间(_N)
) )
?
$
新建命名空间(_N)
:
结束
(
$
命名空间堆栈
);
}
/**
*处理“data-wp-context”指令。
*
*它将指令值中定义的上下文添加到堆栈中,以便
*它可用于嵌套的交互元素。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据wpcontext_processor
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
名称空间_堆栈
) {
//退出标记时,它会从堆栈中删除最后一个上下文。
如果
(
'
出口
'
===
$
模式
) {
阵列_弹出
(
$
上下文堆栈
);
返回
;
}
$
属性_值
=
$
第页
->
获取属性
(
'
数据-wp-context
'
);
$
命名空间值
=
结束
(
$
命名空间堆栈
);
//将命名空间与上下文JSON对象分隔开。
列表
(
$
命名空间值
,
$
解码.json
) =
是字符串
(
$
属性_值
) && !
空的
(
$
属性_值
)
?
$
这
->
提取方向值
(
$
属性_值
,
$
命名空间值
)
:
阵列
(
$
命名空间值
,
无效的
);
/*
*如果有一个命名空间,它会向堆栈中添加一个新的上下文,合并
*前一个上下文与新上下文。
*/
如果
(
是字符串
(
$
命名空间值
) ) {
$
上下文堆栈
[] =
数组替换递归
(
结束
(
$
上下文堆栈
) !==
假
?
结束
(
$
上下文堆栈
) :
阵列
(),
阵列
(
$
命名空间值
=>
是数组(_A)
(
$
解码.json
) ?
$
解码.json
:
阵列
() )
);
}
其他的
{
/*
*如果没有名称空间,则将当前上下文推送到堆栈。
*它需要这样做,因为函数弹出当前上下文
*只要它找到“data-wp-context”的结束标记,就会从堆栈中删除。
*/
$
上下文堆栈
[] =
结束
(
$
上下文堆栈
);
}
}
/**
*处理“data-wp-bind”指令。
*
*它基于对其的评估来更新或删除绑定属性
*关联引用。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据_绑定_处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
如果
(
'
进入
'
===
$
模式
) {
$
所有绑定方向
=
$
第页
->
使用前缀获取属性名称
(
'
数据wp绑定--
'
);
foreach公司
(
$
所有绑定方向
作为
$
属性_名称
) {
列表
( ,
$
bound_attribute(绑定属性)
) =
$
这
->
提取前缀和后缀
(
$
属性名称
);
如果
(
空的
(
$
bound_attribute(绑定属性)
) ) {
返回
;
}
$
属性_值
=
$
第页
->
获取属性
(
$
属性_名称
);
$
结果
=
$
这
->
评价
(
$
属性_值
,
结束
(
$
命名空间堆栈
),
结束
(
$
上下文堆栈
) );
如果
(
无效的
!==
$
结果
&&
(
假
!==
$
结果
||
(
斯特伦
(
$
bound_attribute(绑定属性)
) >
5
&&
'
-
'
===
$
bound_attribute(绑定属性)
[
4
] )
)
) {
/*
*如果计算结果是布尔值,且属性为
*`aria-`或`data-,将其转换为字符串“true”或“false”。
它
*遵循与Preact完全相同的逻辑,因为它需要
*复制Preact稍后将在客户端执行的操作:
*
https://github.com/preactjs/preact/blob/ea49f7a0f9d1ff2c98c0bdd66aa0cbc583055246/src/diff/props.js#L131C24
-L136线
*/
如果
(
是池(_B)
(
$
结果
) &&
(
斯特伦
(
$
bound_attribute(绑定属性)
) >
5
&&
'
-
'
===
$
bound_attribute(绑定属性)
[
4
] )
) {
$
结果
=
$
结果
?
'
真实的
'
:
'
假
'
;
}
$
第页
->
集合属性
(
$
bound_attribute(绑定属性)
,
$
结果
);
}
其他的
{
$
第页
->
删除属性
(
$
bound_attribute(绑定属性)
);
}
}
}
}
/**
*处理“data-wp-class”指令。
*
*它基于
*对其相关参考文献的评估。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据wp类处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
如果
(
'
进入
'
===
$
模式
) {
$
所有类目录
=
$
第页
->
使用前缀获取属性名称
(
'
数据wp类--
'
);
foreach公司
(
$
所有类别_整改
作为
$
属性_名称
) {
列表
( ,
$
类名称
) =
$
这
->
提取前缀和后缀
(
$
属性_名称
);
如果
(
空的
(
$
类名称
) ) {
返回
;
}
$
属性_值
=
$
第页
->
获取属性
(
$
属性_名称
);
$
结果
=
$
这
->
评价
(
$
属性_值
,
结束
(
$
命名空间堆栈
),
结束
(
$
上下文堆栈
) );
如果
(
$
结果
) {
$
第页
->
添加类(_C)
(
$
类名称
);
}
其他的
{
$
第页
->
删除类
(
$
类名称
);
}
}
}
}
/**
*处理“data-wp-style”指令。
*
*它根据
*相关参考文献的评估。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据类型处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
如果
(
'
进入
'
===
$
模式
) {
$
所有样式属性
=
$
第页
->
获取具有前缀的属性名称
(
'
数据wp样式--
'
);
foreach公司
(
$
所有样式属性
作为
$
属性_名称
) {
列表
( ,
$
样式属性
) =
$
这
->
提取前缀和后缀
(
$
属性_名称
);
如果
(
空的
(
$
样式属性
) ) {
持续
;
}
$
方向属性值
=
$
第页
->
获取属性
(
$
属性_名称
);
$
样式_属性_值
=
$
这
->
评价
(
$
方向属性值
,
结束
(
$
命名空间堆栈
),
结束
(
$
上下文堆栈
) );
$
样式属性值
=
$
第页
->
获取属性
(
'
风格
'
);
$
样式属性值
= (
$
样式属性值
&& !
是池(_B)
(
$
样式属性值
) ) ?
$
样式属性值
:
''
;
/*
*首先检查样式属性是否为falsy,以及样式
*属性值不为空,因为如果为空,则不需要
*更新属性值。
*/
如果
(
$
样式属性值
||
$
样式属性值
) {
$
样式属性值
=
$
这
->
合并样式属性
(
$
样式属性值
,
$
样式属性
,
$
样式属性值
);
/*
*如果样式属性值不为空,则设置它。否则,
*它会删除它。
*/
如果
( !
空的
(
$
样式属性值
) ) {
$
第页
->
集合属性
(
'
风格
'
,
$
样式属性值
);
}
其他的
{
$
第页
->
删除属性
(
'
风格
'
);
}
}
}
}
}
/**
*将单个样式属性合并到HTML的“样式”属性中
*元素,必要时更新或删除属性。
*
*如果修改了属性,则会删除旧属性并添加新属性
*在列表的末尾。
*
*自6.5.0起
*
*示例:
*
*merge_style_property('颜色:绿色;','颜色','红色')=>'颜色:红色;'
*merge_style_property('background:green;','color','red')=>'背景:green;
颜色:红色;'
*merge_style_property(“color:green;”,“color”,null)=>“”
*
*@param string$style_attribute_value当前样式属性值。
*@param string$style_property_name要设置的样式属性名称。
*@param string | false | null$style_property_value要为样式属性设置的值。
带有false、null或
*空字符串,则删除样式属性。
*@return string添加、更新或删除指定属性后的新样式属性值。
*/
私有的
功能
合并样式属性
(
一串
$
样式属性值
,
一串
$
样式属性名称
,
$
样式属性值
):
一串
{
$
样式_分配
=
爆炸
(
'
;
'
,
$
样式属性值
);
$
结果
=
阵列
();
$
样式属性值
= !
空的
(
$
样式属性值
) ?
rtrim公司
(
修剪
(
$
样式属性值
),
'
;
'
) :
无效的
;
$
新样式属性
=
$
样式属性值
?
$
样式属性名称
.
'
:
'
.
$
样式属性值
.
'
;
'
:
''
;
//生成一个数组,该数组包含除修改后的属性之外的所有属性。
foreach公司
(
$
样式_分配
作为
$
样式_分配
) {
如果
(
空的
(
修剪
(
$
样式_分配
) ) ) {
持续
;
}
列表
(
$
名称
,
$
价值
) =
爆炸
(
'
:
'
,
$
样式_分配
);
如果
(
修剪
(
$
名称
) !==
$
样式属性名称
) {
$
结果
[] =
修剪
(
$
名称
) .
'
:
'
.
修剪
(
$
价值
) .
'
;
'
;
}
}
//在列表末尾添加新的/修改的属性。
$
结果
[] =
$
新样式属性
;
返回
内爆
(
''
,
$
结果
);
}
/**
*处理“data-wp-text”指令。
*
*它基于
*评估其相关参考。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*/
私有的
功能
数据_文本_处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
) {
如果
(
'
进入
'
===
$
模式
) {
$
属性_值
=
$
第页
->
获取属性
(
'
数据-文本
'
);
$
结果
=
$
这
->
评价
(
$
属性_值
,
结束
(
$
命名空间堆栈
),
结束
(
$
上下文堆栈
) );
/*
*遵循与客户端中Preact相同的逻辑,只更改
*内容(如果值是字符串或数字)。
否则,它会删除
*内容。
*/
如果
(
是字符串
(
$
结果
) ||
是数字(_N)
(
$
结果
) ) {
$
第页
->
设置平衡标签之间的内容
(
esc_html
(
$
结果
) );
}
其他的
{
$
第页
->
set_content_between_balanced_tags之间的设置
(
''
);
}
}
}
/**
*返回用于在路由器中设置顶部加载栏动画的CSS样式。
*
*自6.5.0起
*
*@return string路由器顶部加载栏动画的CSS样式。
*/
私有的
功能
获取路由器动画样式
():
一串
{
返回
<<<CSS
.wp-interactivity-router-loading-bar{
位置:固定;
顶部:0;
左:0;
边距:0;
填充:0;
宽度:100vw;
最大宽度:100vw!
重要;
高度:4px;
背景色:#000;
不透明度:0
}
.wp-interactivity-router-loading-bar.启动动画{
动画:wp-interactivity-router-loading-bar-start-animation 30s cubic-bezier(0.03,0.5,0,1)forwards
}
.wp-interactivity-router-loading-bar.finish-动画{
动画:wp-interactivity-router-loading-bar-fish-animation 300ms轻松实现
}
@关键帧wp-interactivity-router-loading-bar-start-animation{
0%{变换:scaleX(0);变换原点:0 0;不透明度:1}
100%{变换:scaleX(1);变换原点:0 0;不透明度:1}
}
@关键帧wp-interactivity-router-loading-bar-fish-animation{
0%{不透明度:1}
50%{不透明度:1}
100%{不透明度:0}
}
CSS公司
;
}
/**
*输出顶部加载指示器和屏幕读取器的标记
*客户端导航期间的通知。
*
*此方法打印代表加载条的div元素,加载条在
*导航,以及屏幕可以读取的aria-live区域
*读者宣布导航状态。
*
*自6.5.0起
*/
公众的
功能
打印路由器加载与屏幕阅读器标记
() {
回声
<<<HTML
<迪夫
class=“wp-interactivity-router-loading-bar”
data-wp-interactive=“核心/路由器”
data-wp-class--start-animation=“state.navigation.hasStarted”
data-wp-class--finish-animation=“state.navigation.hasFinished”
></div>
<迪夫
class=“屏幕阅读器文本”
aria-live=“礼貌”
data-wp-interactive=“核心/路由器”
data-wp-text=“state.navigation.message”
></div>
HTML格式
;
}
/**
*处理“data-wp-router-region”指令。
*
*它在页脚中呈现一组HTML元素以通知用户
*客户端导航。
更具体地说,添加的元素是1)a
*顶部加载条,以直观地通知导航正在进行
*以及2)一个“aria-live”区域,用于无障碍导航公告。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*/
私有的
功能
数据路由器区域处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
) {
如果
(
'
进入
'
===
$
模式
&& !
$
这
->
已处理路由区域
) {
$
这
->
已处理路由器区域
=
真实的
;
//初始化“核心/路由器”存储。
$
这
->
状态
(
'
核心/路由器
'
,
阵列
(
'
航行
'
=>
阵列
(
'
文本
'
=>
阵列
(
'
加载
'
=>
__
(
'
正在加载页面,请稍候。
'
),
'
加载
'
=>
__
(
'
页面已加载。
'
),
),
),
)
);
//以内联方式排队。
wp注册样式
(
'
wp-interactivity-router-动画
'
,
假
);
wp_add_inline样式
(
'
wp-interactivity-router-动画
'
,
$
这
->
获取路由器动画样式
() );
wp_enque_样式
(
'
wp-interactivity-router-动画
'
);
//将必要的标记添加到页脚。
添加操作(_A)
(
'
wp_脚垫
'
,
阵列
(
$
这
,
'
打印路由器加载与屏幕阅读器标记
'
) );
}
}
/**
*处理“data-wp-each”指令。
*
*此指令获取作为引用传递的数组并对其进行迭代
*基于的内部标记为每个项生成新内容
*`template`标记。
*
*自6.5.0起
*
*@param WP_Interactivity_API_Directives_Processor$p指令处理器实例。
*@param string$mode处理是进入还是退出标记。
*@param array$context_stack对上下文堆栈的引用。
*@param array$namespace_stack对存储命名空间堆栈的引用。
*@param array$tag_stack对标记堆栈的引用。
*/
私有的
功能
数据处理器
(
WP_交互_API_指令_处理器
$
第页
,
一串
$
模式
,
阵列
&
$
上下文堆栈
,
阵列
&
$
命名空间堆栈
,
阵列
&
$
标记_堆栈
) {
如果
(
'
进入
'
===
$
模式
&&
'
模板
'
===
$
第页
->
获取标签(_T)
() ) {
$
属性_名称
=
$
第页
->
使用前缀获取属性名称
(
'
数据-wp-each
'
)[
0
];
$
提取的后缀
=
$
这
->
提取前缀和后缀
(
$
属性名称
);
$
项目名称
=
发行
(
$
提取的后缀
[
1
] ) ?
$
这
->
烤肉串_骆驼肉
(
$
提取的后缀
[
1
] ) :
'
项目
'
;
$
属性_值
=
$
第页
->
获取属性
(
$
属性_名称
);
$
结果
=
$
这
->
评价
(
$
属性_值
,
结束
(
$
命名空间堆栈
),
结束
(
$
上下文堆栈
) );
//获取模板标记之间的内容,并将光标留在更近的标记中。
$
内部内容
=
$
第页
->
在平衡模板标记之间获取内容
();
//检查是否存在手动服务器端指令处理。
$
模板结束(_E)
=
'
data-wp-each:模板结束
'
;
$
第页
->
集合书签
(
$
模板结束(_E)
);
$
第页
->
下一个标签
();
$
手册_sdp
=
$
第页
->
获取属性
(
'
数据-每个孩子
'
);
$
第页
->
寻求
(
$
模板结束(_E)
);
//倒回到模板闭合器标记。
$
第页
->
发布_书签
(
$
模板结束(_E)
);
/*
*在以下情况下不进行处理:
*-手动处理服务器端指令。
*-空值或非数组值。
*-关联数组,因为这些数组在JS中被反序列化为对象。
*-包含顶级文本的模板,因为这些文本不能
*在客户端中识别并删除。
*/
如果
(
$
手册_sdp
||
空的
(
$
结果
) ||
!
是数组(_A)
(
$
结果
) ||
!
数组是列表
(
$
结果
) ||
!
str_starts_与
(
修剪
(
$
内部内容
),
'
<
'
) ||
!
str_ends_带
(
修剪
(
$
内部内容
),
'
>
'
)
) {
阵列_弹出
(
$
标记_堆栈
);
返回
;
}
//从指令属性值中提取命名空间。
$
命名空间值
=
结束
(
$
命名空间堆栈
);
列表
(
$
命名空间值
) =
是字符串
(
$
属性_值
) && !
空的
(
$
属性_值
)
?
$
这
->
提取方向性值
(
$
属性_值
,
$
命名空间值
)
:
阵列
(
$
命名空间值
,
无效的
);
//处理数组中每个项的内部内容。
$
处理的内容
=
''
;
foreach公司
(
$
结果
作为
$
项目
) {
//创建包含数组当前项的新上下文。
$
上下文堆栈
[] =
数组替换递归
(
结束
(
$
上下文堆栈
) !==
假
?
结束
(
$
上下文堆栈
) :
阵列
(),
阵列
(
$
命名空间值
=>
阵列
(
$
项目名称
=>
$
项目
) )
);
//使用新上下文处理内部内容。
$
处理的项目
=
$
这
->
进程目录参数
(
$
内部内容
,
$
上下文堆栈
,
$
命名空间堆栈
);
如果
(
无效的
===
$
处理的项目
) {
//如果HTML不平衡,请停止处理。
阵列_弹出
(
$
上下文堆栈
);
返回
;
}
//将“data-wp-each-child”添加到每个顶级标记。
$
我
=
新的
WP_交互_API_指令_处理器
(
$
处理的项目
);
虽然
(
$
我
->
下一个标签
() ) {
$
我
->
集合属性
(
'
数据-每个孩子
'
,
真实的
);
$
我
->
下一个平衡标记失败者标记
();
}
$
处理的内容
.=
$
我
->
获取更新的html
();
//从堆栈中移除当前上下文。
阵列_弹出
(
$
上下文堆栈
);
}
//将处理过的内容追加到模板的标记结束符之后。
$
第页
->
附加内容后模板标签丢失器
(
$
处理的内容
);
//弹出最后一个标记,因为它跳过了模板标记的结束标记。
阵列_弹出
(
$
标记_堆栈
);
}
}
}
在原始视图中查看文件的其余部分
此时无法执行该操作。