@tmagic/editor 1.0.0-beta.12 → 1.0.0-beta.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/coverage/clover.xml +1444 -0
  2. package/coverage/coverage-final.json +34 -0
  3. package/coverage/lcov-report/Icon.vue.html +172 -0
  4. package/coverage/lcov-report/ToolButton.vue.html +655 -0
  5. package/coverage/lcov-report/base.css +224 -0
  6. package/coverage/lcov-report/block-navigation.js +87 -0
  7. package/coverage/lcov-report/favicon.png +0 -0
  8. package/coverage/lcov-report/index.html +206 -0
  9. package/coverage/lcov-report/layouts/sidebar/LayerMenu.vue.html +364 -0
  10. package/coverage/lcov-report/layouts/sidebar/index.html +116 -0
  11. package/coverage/lcov-report/prettify.css +1 -0
  12. package/coverage/lcov-report/prettify.js +2 -0
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +196 -0
  15. package/coverage/lcov-report/src/Editor.vue.html +787 -0
  16. package/coverage/lcov-report/src/components/Icon.vue.html +172 -0
  17. package/coverage/lcov-report/src/components/ScrollViewer.vue.html +283 -0
  18. package/coverage/lcov-report/src/components/ToolButton.vue.html +655 -0
  19. package/coverage/lcov-report/src/components/index.html +146 -0
  20. package/coverage/lcov-report/src/index.html +131 -0
  21. package/coverage/lcov-report/src/layouts/AddPageBox.vue.html +214 -0
  22. package/coverage/lcov-report/src/layouts/Framework.vue.html +304 -0
  23. package/coverage/lcov-report/src/layouts/NavMenu.vue.html +208 -0
  24. package/coverage/lcov-report/src/layouts/PropsPanel.vue.html +316 -0
  25. package/coverage/lcov-report/src/layouts/Resizer.vue.html +268 -0
  26. package/coverage/lcov-report/src/layouts/index.html +176 -0
  27. package/coverage/lcov-report/src/layouts/sidebar/ComponentListPanel.vue.html +292 -0
  28. package/coverage/lcov-report/src/layouts/sidebar/LayerMenu.vue.html +364 -0
  29. package/coverage/lcov-report/src/layouts/sidebar/LayerPanel.vue.html +853 -0
  30. package/coverage/lcov-report/src/layouts/sidebar/Sidebar.vue.html +343 -0
  31. package/coverage/lcov-report/src/layouts/sidebar/index.html +161 -0
  32. package/coverage/lcov-report/src/layouts/workspace/PageBar.vue.html +631 -0
  33. package/coverage/lcov-report/src/layouts/workspace/Stage.vue.html +766 -0
  34. package/coverage/lcov-report/src/layouts/workspace/ViewerMenu.vue.html +421 -0
  35. package/coverage/lcov-report/src/layouts/workspace/Workspace.vue.html +586 -0
  36. package/coverage/lcov-report/src/layouts/workspace/index.html +161 -0
  37. package/coverage/lcov-report/src/services/BaseService.ts.html +643 -0
  38. package/coverage/lcov-report/src/services/componentList.ts.html +229 -0
  39. package/coverage/lcov-report/src/services/editor.ts.html +1984 -0
  40. package/coverage/lcov-report/src/services/events.ts.html +331 -0
  41. package/coverage/lcov-report/src/services/history.ts.html +457 -0
  42. package/coverage/lcov-report/src/services/index.html +206 -0
  43. package/coverage/lcov-report/src/services/props.ts.html +418 -0
  44. package/coverage/lcov-report/src/services/ui.ts.html +514 -0
  45. package/coverage/lcov-report/src/type.ts.html +850 -0
  46. package/coverage/lcov-report/src/utils/compose.ts.html +184 -0
  47. package/coverage/lcov-report/src/utils/config.ts.html +172 -0
  48. package/coverage/lcov-report/src/utils/editor.ts.html +838 -0
  49. package/coverage/lcov-report/src/utils/index.html +221 -0
  50. package/coverage/lcov-report/src/utils/index.ts.html +151 -0
  51. package/coverage/lcov-report/src/utils/logger.ts.html +226 -0
  52. package/coverage/lcov-report/src/utils/props.ts.html +739 -0
  53. package/coverage/lcov-report/src/utils/scroll-viewer.ts.html +733 -0
  54. package/coverage/lcov-report/src/utils/undo-redo.ts.html +313 -0
  55. package/coverage/lcov-report/utils/index.html +116 -0
  56. package/coverage/lcov-report/utils/undo-redo.ts.html +313 -0
  57. package/coverage/lcov.info +3407 -0
  58. package/dist/style.css +3 -2
  59. package/dist/tmagic-editor.es.js +326 -194
  60. package/dist/tmagic-editor.es.js.map +1 -1
  61. package/dist/tmagic-editor.umd.js +328 -197
  62. package/dist/tmagic-editor.umd.js.map +1 -1
  63. package/dist/types/src/layouts/sidebar/LayerPanel.vue.d.ts +1 -1
  64. package/dist/types/src/services/editor.d.ts +5 -2
  65. package/dist/types/src/services/ui.d.ts +1 -0
  66. package/dist/types/src/utils/editor.d.ts +2 -2
  67. package/package.json +18 -9
  68. package/src/components/ScrollViewer.vue +1 -1
  69. package/src/components/ToolButton.vue +3 -3
  70. package/src/layouts/workspace/Workspace.vue +74 -16
  71. package/src/services/BaseService.ts +1 -1
  72. package/src/services/editor.ts +65 -9
  73. package/src/services/ui.ts +5 -0
  74. package/src/theme/layer-panel.scss +1 -0
  75. package/src/utils/editor.ts +6 -2
  76. package/tsconfig.json +0 -9
  77. package/vite.config.ts +0 -30
@@ -0,0 +1,1984 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/services/editor.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/services</a> editor.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">75.92% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>205/270</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">60.17% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>68/113</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">80% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>28/35</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">80.99% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>196/242</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a>
599
+ <a name='L534'></a><a href='#L534'>534</a>
600
+ <a name='L535'></a><a href='#L535'>535</a>
601
+ <a name='L536'></a><a href='#L536'>536</a>
602
+ <a name='L537'></a><a href='#L537'>537</a>
603
+ <a name='L538'></a><a href='#L538'>538</a>
604
+ <a name='L539'></a><a href='#L539'>539</a>
605
+ <a name='L540'></a><a href='#L540'>540</a>
606
+ <a name='L541'></a><a href='#L541'>541</a>
607
+ <a name='L542'></a><a href='#L542'>542</a>
608
+ <a name='L543'></a><a href='#L543'>543</a>
609
+ <a name='L544'></a><a href='#L544'>544</a>
610
+ <a name='L545'></a><a href='#L545'>545</a>
611
+ <a name='L546'></a><a href='#L546'>546</a>
612
+ <a name='L547'></a><a href='#L547'>547</a>
613
+ <a name='L548'></a><a href='#L548'>548</a>
614
+ <a name='L549'></a><a href='#L549'>549</a>
615
+ <a name='L550'></a><a href='#L550'>550</a>
616
+ <a name='L551'></a><a href='#L551'>551</a>
617
+ <a name='L552'></a><a href='#L552'>552</a>
618
+ <a name='L553'></a><a href='#L553'>553</a>
619
+ <a name='L554'></a><a href='#L554'>554</a>
620
+ <a name='L555'></a><a href='#L555'>555</a>
621
+ <a name='L556'></a><a href='#L556'>556</a>
622
+ <a name='L557'></a><a href='#L557'>557</a>
623
+ <a name='L558'></a><a href='#L558'>558</a>
624
+ <a name='L559'></a><a href='#L559'>559</a>
625
+ <a name='L560'></a><a href='#L560'>560</a>
626
+ <a name='L561'></a><a href='#L561'>561</a>
627
+ <a name='L562'></a><a href='#L562'>562</a>
628
+ <a name='L563'></a><a href='#L563'>563</a>
629
+ <a name='L564'></a><a href='#L564'>564</a>
630
+ <a name='L565'></a><a href='#L565'>565</a>
631
+ <a name='L566'></a><a href='#L566'>566</a>
632
+ <a name='L567'></a><a href='#L567'>567</a>
633
+ <a name='L568'></a><a href='#L568'>568</a>
634
+ <a name='L569'></a><a href='#L569'>569</a>
635
+ <a name='L570'></a><a href='#L570'>570</a>
636
+ <a name='L571'></a><a href='#L571'>571</a>
637
+ <a name='L572'></a><a href='#L572'>572</a>
638
+ <a name='L573'></a><a href='#L573'>573</a>
639
+ <a name='L574'></a><a href='#L574'>574</a>
640
+ <a name='L575'></a><a href='#L575'>575</a>
641
+ <a name='L576'></a><a href='#L576'>576</a>
642
+ <a name='L577'></a><a href='#L577'>577</a>
643
+ <a name='L578'></a><a href='#L578'>578</a>
644
+ <a name='L579'></a><a href='#L579'>579</a>
645
+ <a name='L580'></a><a href='#L580'>580</a>
646
+ <a name='L581'></a><a href='#L581'>581</a>
647
+ <a name='L582'></a><a href='#L582'>582</a>
648
+ <a name='L583'></a><a href='#L583'>583</a>
649
+ <a name='L584'></a><a href='#L584'>584</a>
650
+ <a name='L585'></a><a href='#L585'>585</a>
651
+ <a name='L586'></a><a href='#L586'>586</a>
652
+ <a name='L587'></a><a href='#L587'>587</a>
653
+ <a name='L588'></a><a href='#L588'>588</a>
654
+ <a name='L589'></a><a href='#L589'>589</a>
655
+ <a name='L590'></a><a href='#L590'>590</a>
656
+ <a name='L591'></a><a href='#L591'>591</a>
657
+ <a name='L592'></a><a href='#L592'>592</a>
658
+ <a name='L593'></a><a href='#L593'>593</a>
659
+ <a name='L594'></a><a href='#L594'>594</a>
660
+ <a name='L595'></a><a href='#L595'>595</a>
661
+ <a name='L596'></a><a href='#L596'>596</a>
662
+ <a name='L597'></a><a href='#L597'>597</a>
663
+ <a name='L598'></a><a href='#L598'>598</a>
664
+ <a name='L599'></a><a href='#L599'>599</a>
665
+ <a name='L600'></a><a href='#L600'>600</a>
666
+ <a name='L601'></a><a href='#L601'>601</a>
667
+ <a name='L602'></a><a href='#L602'>602</a>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-neutral">&nbsp;</span>
713
+ <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-yes">5x</span>
718
+ <span class="cline-any cline-yes">5x</span>
719
+ <span class="cline-any cline-yes">5x</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-yes">5x</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-yes">5x</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-yes">5x</span>
727
+ <span class="cline-any cline-yes">5x</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-yes">5x</span>
730
+ <span class="cline-any cline-yes">5x</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-neutral">&nbsp;</span>
739
+ <span class="cline-any cline-neutral">&nbsp;</span>
740
+ <span class="cline-any cline-yes">5x</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-yes">5x</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-yes">5x</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-yes">5x</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-yes">5x</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-yes">103x</span>
787
+ <span class="cline-any cline-yes">103x</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-yes">103x</span>
790
+ <span class="cline-any cline-yes">21x</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-yes">218x</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-yes">55x</span>
810
+ <span class="cline-any cline-yes">55x</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-yes">55x</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-yes">55x</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-yes">55x</span>
819
+ <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-yes">46x</span>
821
+ <span class="cline-any cline-yes">46x</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-yes">46x</span>
824
+ <span class="cline-any cline-yes">46x</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-yes">46x</span>
827
+ <span class="cline-any cline-yes">120x</span>
828
+ <span class="cline-any cline-yes">46x</span>
829
+ <span class="cline-any cline-yes">46x</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-yes">46x</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-yes">11x</span>
843
+ <span class="cline-any cline-yes">11x</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-yes">3x</span>
853
+ <span class="cline-any cline-yes">3x</span>
854
+ <span class="cline-any cline-yes">3x</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-yes">24x</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-yes">24x</span>
864
+ <span class="cline-any cline-yes">13x</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-yes">11x</span>
869
+ <span class="cline-any cline-yes">8x</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-yes">3x</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-neutral">&nbsp;</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-neutral">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-neutral">&nbsp;</span>
881
+ <span class="cline-any cline-yes">26x</span>
882
+ <span class="cline-any cline-yes">24x</span>
883
+ <span class="cline-any cline-yes">24x</span>
884
+ <span class="cline-any cline-yes">24x</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-yes">24x</span>
887
+ <span class="cline-any cline-yes">24x</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-no">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-yes">24x</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
+ <span class="cline-any cline-neutral">&nbsp;</span>
897
+ <span class="cline-any cline-no">&nbsp;</span>
898
+ <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-no">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-no">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-no">&nbsp;</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-no">&nbsp;</span>
908
+ <span class="cline-any cline-no">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-no">&nbsp;</span>
915
+ <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-neutral">&nbsp;</span>
919
+ <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-neutral">&nbsp;</span>
921
+ <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-no">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-no">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-neutral">&nbsp;</span>
932
+ <span class="cline-any cline-neutral">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-no">&nbsp;</span>
935
+ <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-no">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-yes">6x</span>
947
+ <span class="cline-any cline-yes">6x</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-yes">6x</span>
952
+ <span class="cline-any cline-yes">2x</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-yes">4x</span>
955
+ <span class="cline-any cline-yes">1x</span>
956
+ <span class="cline-any cline-yes">3x</span>
957
+ <span class="cline-any cline-yes">2x</span>
958
+ <span class="cline-any cline-neutral">&nbsp;</span>
959
+ <span class="cline-any cline-yes">1x</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-yes">6x</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-yes">6x</span>
965
+ <span class="cline-any cline-yes">6x</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-neutral">&nbsp;</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-yes">6x</span>
973
+ <span class="cline-any cline-yes">1x</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-yes">5x</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-yes">5x</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-yes">5x</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-yes">5x</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-yes">5x</span>
985
+ <span class="cline-any cline-yes">5x</span>
986
+ <span class="cline-any cline-yes">3x</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-yes">5x</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-yes">5x</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-neutral">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-neutral">&nbsp;</span>
1000
+ <span class="cline-any cline-yes">4x</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-yes">4x</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-yes">4x</span>
1005
+ <span class="cline-any cline-neutral">&nbsp;</span>
1006
+ <span class="cline-any cline-yes">4x</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-yes">4x</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-yes">3x</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-yes">3x</span>
1013
+ <span class="cline-any cline-neutral">&nbsp;</span>
1014
+ <span class="cline-any cline-yes">3x</span>
1015
+ <span class="cline-any cline-yes">3x</span>
1016
+ <span class="cline-any cline-yes">3x</span>
1017
+ <span class="cline-any cline-neutral">&nbsp;</span>
1018
+ <span class="cline-any cline-yes">3x</span>
1019
+ <span class="cline-any cline-yes">1x</span>
1020
+ <span class="cline-any cline-yes">1x</span>
1021
+ <span class="cline-any cline-yes">1x</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-neutral">&nbsp;</span>
1024
+ <span class="cline-any cline-yes">2x</span>
1025
+ <span class="cline-any cline-yes">2x</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-yes">3x</span>
1029
+ <span class="cline-any cline-yes">3x</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-yes">3x</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-neutral">&nbsp;</span>
1038
+ <span class="cline-any cline-neutral">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-yes">11x</span>
1041
+ <span class="cline-any cline-neutral">&nbsp;</span>
1042
+ <span class="cline-any cline-yes">10x</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-yes">10x</span>
1045
+ <span class="cline-any cline-neutral">&nbsp;</span>
1046
+ <span class="cline-any cline-yes">9x</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-yes">9x</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-yes">9x</span>
1051
+ <span class="cline-any cline-yes">47x</span>
1052
+ <span class="cline-any cline-yes">3x</span>
1053
+ <span class="cline-any cline-neutral">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-yes">9x</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-yes">8x</span>
1059
+ <span class="cline-any cline-no">&nbsp;</span>
1060
+ <span class="cline-any cline-no">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-neutral">&nbsp;</span>
1063
+ <span class="cline-any cline-yes">8x</span>
1064
+ <span class="cline-any cline-yes">8x</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-yes">8x</span>
1067
+ <span class="cline-any cline-yes">8x</span>
1068
+ <span class="cline-any cline-neutral">&nbsp;</span>
1069
+ <span class="cline-any cline-yes">8x</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-yes">8x</span>
1072
+ <span class="cline-any cline-yes">8x</span>
1073
+ <span class="cline-any cline-yes">8x</span>
1074
+ <span class="cline-any cline-yes">1x</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-yes">8x</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-yes">8x</span>
1080
+ <span class="cline-any cline-yes">4x</span>
1081
+ <span class="cline-any cline-neutral">&nbsp;</span>
1082
+ <span class="cline-any cline-neutral">&nbsp;</span>
1083
+ <span class="cline-any cline-yes">8x</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-yes">8x</span>
1086
+ <span class="cline-any cline-yes">4x</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-yes">8x</span>
1090
+ <span class="cline-any cline-yes">8x</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-yes">8x</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-neutral">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-neutral">&nbsp;</span>
1102
+ <span class="cline-any cline-yes">1x</span>
1103
+ <span class="cline-any cline-yes">1x</span>
1104
+ <span class="cline-any cline-yes">1x</span>
1105
+ <span class="cline-any cline-neutral">&nbsp;</span>
1106
+ <span class="cline-any cline-yes">1x</span>
1107
+ <span class="cline-any cline-yes">2x</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-yes">1x</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-yes">1x</span>
1112
+ <span class="cline-any cline-yes">1x</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-yes">1x</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-yes">1x</span>
1117
+ <span class="cline-any cline-yes">1x</span>
1118
+ <span class="cline-any cline-neutral">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-neutral">&nbsp;</span>
1124
+ <span class="cline-any cline-neutral">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-yes">1x</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span>
1131
+ <span class="cline-any cline-neutral">&nbsp;</span>
1132
+ <span class="cline-any cline-neutral">&nbsp;</span>
1133
+ <span class="cline-any cline-neutral">&nbsp;</span>
1134
+ <span class="cline-any cline-neutral">&nbsp;</span>
1135
+ <span class="cline-any cline-yes">2x</span>
1136
+ <span class="cline-any cline-neutral">&nbsp;</span>
1137
+ <span class="cline-any cline-yes">2x</span>
1138
+ <span class="cline-any cline-yes">2x</span>
1139
+ <span class="cline-any cline-yes">1x</span>
1140
+ <span class="cline-any cline-neutral">&nbsp;</span>
1141
+ <span class="cline-any cline-neutral">&nbsp;</span>
1142
+ <span class="cline-any cline-yes">1x</span>
1143
+ <span class="cline-any cline-neutral">&nbsp;</span>
1144
+ <span class="cline-any cline-yes">1x</span>
1145
+ <span class="cline-any cline-neutral">&nbsp;</span>
1146
+ <span class="cline-any cline-no">&nbsp;</span>
1147
+ <span class="cline-any cline-no">&nbsp;</span>
1148
+ <span class="cline-any cline-neutral">&nbsp;</span>
1149
+ <span class="cline-any cline-neutral">&nbsp;</span>
1150
+ <span class="cline-any cline-yes">1x</span>
1151
+ <span class="cline-any cline-yes">1x</span>
1152
+ <span class="cline-any cline-yes">1x</span>
1153
+ <span class="cline-any cline-neutral">&nbsp;</span>
1154
+ <span class="cline-any cline-neutral">&nbsp;</span>
1155
+ <span class="cline-any cline-neutral">&nbsp;</span>
1156
+ <span class="cline-any cline-neutral">&nbsp;</span>
1157
+ <span class="cline-any cline-neutral">&nbsp;</span>
1158
+ <span class="cline-any cline-yes">1x</span>
1159
+ <span class="cline-any cline-neutral">&nbsp;</span>
1160
+ <span class="cline-any cline-neutral">&nbsp;</span>
1161
+ <span class="cline-any cline-neutral">&nbsp;</span>
1162
+ <span class="cline-any cline-neutral">&nbsp;</span>
1163
+ <span class="cline-any cline-neutral">&nbsp;</span>
1164
+ <span class="cline-any cline-neutral">&nbsp;</span>
1165
+ <span class="cline-any cline-neutral">&nbsp;</span>
1166
+ <span class="cline-any cline-neutral">&nbsp;</span>
1167
+ <span class="cline-any cline-yes">1x</span>
1168
+ <span class="cline-any cline-yes">1x</span>
1169
+ <span class="cline-any cline-yes">1x</span>
1170
+ <span class="cline-any cline-yes">1x</span>
1171
+ <span class="cline-any cline-no">&nbsp;</span>
1172
+ <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-neutral">&nbsp;</span>
1174
+ <span class="cline-any cline-yes">1x</span>
1175
+ <span class="cline-any cline-yes">1x</span>
1176
+ <span class="cline-any cline-neutral">&nbsp;</span>
1177
+ <span class="cline-any cline-neutral">&nbsp;</span>
1178
+ <span class="cline-any cline-yes">1x</span>
1179
+ <span class="cline-any cline-yes">1x</span>
1180
+ <span class="cline-any cline-yes">1x</span>
1181
+ <span class="cline-any cline-yes">1x</span>
1182
+ <span class="cline-any cline-neutral">&nbsp;</span>
1183
+ <span class="cline-any cline-yes">1x</span>
1184
+ <span class="cline-any cline-neutral">&nbsp;</span>
1185
+ <span class="cline-any cline-neutral">&nbsp;</span>
1186
+ <span class="cline-any cline-neutral">&nbsp;</span>
1187
+ <span class="cline-any cline-neutral">&nbsp;</span>
1188
+ <span class="cline-any cline-neutral">&nbsp;</span>
1189
+ <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-neutral">&nbsp;</span>
1191
+ <span class="cline-any cline-yes">1x</span>
1192
+ <span class="cline-any cline-yes">1x</span>
1193
+ <span class="cline-any cline-yes">1x</span>
1194
+ <span class="cline-any cline-yes">1x</span>
1195
+ <span class="cline-any cline-neutral">&nbsp;</span>
1196
+ <span class="cline-any cline-yes">1x</span>
1197
+ <span class="cline-any cline-no">&nbsp;</span>
1198
+ <span class="cline-any cline-yes">1x</span>
1199
+ <span class="cline-any cline-no">&nbsp;</span>
1200
+ <span class="cline-any cline-neutral">&nbsp;</span>
1201
+ <span class="cline-any cline-yes">1x</span>
1202
+ <span class="cline-any cline-neutral">&nbsp;</span>
1203
+ <span class="cline-any cline-neutral">&nbsp;</span>
1204
+ <span class="cline-any cline-yes">1x</span>
1205
+ <span class="cline-any cline-neutral">&nbsp;</span>
1206
+ <span class="cline-any cline-neutral">&nbsp;</span>
1207
+ <span class="cline-any cline-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-neutral">&nbsp;</span>
1209
+ <span class="cline-any cline-neutral">&nbsp;</span>
1210
+ <span class="cline-any cline-neutral">&nbsp;</span>
1211
+ <span class="cline-any cline-neutral">&nbsp;</span>
1212
+ <span class="cline-any cline-yes">1x</span>
1213
+ <span class="cline-any cline-yes">1x</span>
1214
+ <span class="cline-any cline-yes">1x</span>
1215
+ <span class="cline-any cline-neutral">&nbsp;</span>
1216
+ <span class="cline-any cline-neutral">&nbsp;</span>
1217
+ <span class="cline-any cline-neutral">&nbsp;</span>
1218
+ <span class="cline-any cline-neutral">&nbsp;</span>
1219
+ <span class="cline-any cline-neutral">&nbsp;</span>
1220
+ <span class="cline-any cline-neutral">&nbsp;</span>
1221
+ <span class="cline-any cline-neutral">&nbsp;</span>
1222
+ <span class="cline-any cline-yes">1x</span>
1223
+ <span class="cline-any cline-yes">1x</span>
1224
+ <span class="cline-any cline-yes">1x</span>
1225
+ <span class="cline-any cline-neutral">&nbsp;</span>
1226
+ <span class="cline-any cline-neutral">&nbsp;</span>
1227
+ <span class="cline-any cline-neutral">&nbsp;</span>
1228
+ <span class="cline-any cline-no">&nbsp;</span>
1229
+ <span class="cline-any cline-no">&nbsp;</span>
1230
+ <span class="cline-any cline-neutral">&nbsp;</span>
1231
+ <span class="cline-any cline-no">&nbsp;</span>
1232
+ <span class="cline-any cline-no">&nbsp;</span>
1233
+ <span class="cline-any cline-neutral">&nbsp;</span>
1234
+ <span class="cline-any cline-no">&nbsp;</span>
1235
+ <span class="cline-any cline-no">&nbsp;</span>
1236
+ <span class="cline-any cline-neutral">&nbsp;</span>
1237
+ <span class="cline-any cline-no">&nbsp;</span>
1238
+ <span class="cline-any cline-neutral">&nbsp;</span>
1239
+ <span class="cline-any cline-neutral">&nbsp;</span>
1240
+ <span class="cline-any cline-neutral">&nbsp;</span>
1241
+ <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-neutral">&nbsp;</span>
1244
+ <span class="cline-any cline-neutral">&nbsp;</span>
1245
+ <span class="cline-any cline-neutral">&nbsp;</span>
1246
+ <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-neutral">&nbsp;</span>
1248
+ <span class="cline-any cline-no">&nbsp;</span>
1249
+ <span class="cline-any cline-no">&nbsp;</span>
1250
+ <span class="cline-any cline-no">&nbsp;</span>
1251
+ <span class="cline-any cline-no">&nbsp;</span>
1252
+ <span class="cline-any cline-no">&nbsp;</span>
1253
+ <span class="cline-any cline-neutral">&nbsp;</span>
1254
+ <span class="cline-any cline-neutral">&nbsp;</span>
1255
+ <span class="cline-any cline-neutral">&nbsp;</span>
1256
+ <span class="cline-any cline-no">&nbsp;</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-neutral">&nbsp;</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-yes">18x</span>
1261
+ <span class="cline-any cline-yes">16x</span>
1262
+ <span class="cline-any cline-neutral">&nbsp;</span>
1263
+ <span class="cline-any cline-neutral">&nbsp;</span>
1264
+ <span class="cline-any cline-neutral">&nbsp;</span>
1265
+ <span class="cline-any cline-neutral">&nbsp;</span>
1266
+ <span class="cline-any cline-yes">16x</span>
1267
+ <span class="cline-any cline-yes">16x</span>
1268
+ <span class="cline-any cline-yes">14x</span>
1269
+ <span class="cline-any cline-neutral">&nbsp;</span>
1270
+ <span class="cline-any cline-neutral">&nbsp;</span>
1271
+ <span class="cline-any cline-neutral">&nbsp;</span>
1272
+ <span class="cline-any cline-neutral">&nbsp;</span>
1273
+ <span class="cline-any cline-neutral">&nbsp;</span>
1274
+ <span class="cline-any cline-yes">16x</span>
1275
+ <span class="cline-any cline-neutral">&nbsp;</span>
1276
+ <span class="cline-any cline-neutral">&nbsp;</span>
1277
+ <span class="cline-any cline-neutral">&nbsp;</span>
1278
+ <span class="cline-any cline-yes">2x</span>
1279
+ <span class="cline-any cline-neutral">&nbsp;</span>
1280
+ <span class="cline-any cline-yes">2x</span>
1281
+ <span class="cline-any cline-yes">2x</span>
1282
+ <span class="cline-any cline-yes">2x</span>
1283
+ <span class="cline-any cline-yes">2x</span>
1284
+ <span class="cline-any cline-no">&nbsp;</span>
1285
+ <span class="cline-any cline-no">&nbsp;</span>
1286
+ <span class="cline-any cline-no">&nbsp;</span>
1287
+ <span class="cline-any cline-neutral">&nbsp;</span>
1288
+ <span class="cline-any cline-neutral">&nbsp;</span>
1289
+ <span class="cline-any cline-neutral">&nbsp;</span>
1290
+ <span class="cline-any cline-neutral">&nbsp;</span>
1291
+ <span class="cline-any cline-yes">9x</span>
1292
+ <span class="cline-any cline-neutral">&nbsp;</span>
1293
+ <span class="cline-any cline-yes">9x</span>
1294
+ <span class="cline-any cline-yes">2x</span>
1295
+ <span class="cline-any cline-yes">1x</span>
1296
+ <span class="cline-any cline-yes">1x</span>
1297
+ <span class="cline-any cline-yes">1x</span>
1298
+ <span class="cline-any cline-neutral">&nbsp;</span>
1299
+ <span class="cline-any cline-neutral">&nbsp;</span>
1300
+ <span class="cline-any cline-neutral">&nbsp;</span>
1301
+ <span class="cline-any cline-yes">9x</span>
1302
+ <span class="cline-any cline-neutral">&nbsp;</span>
1303
+ <span class="cline-any cline-neutral">&nbsp;</span>
1304
+ <span class="cline-any cline-neutral">&nbsp;</span>
1305
+ <span class="cline-any cline-neutral">&nbsp;</span>
1306
+ <span class="cline-any cline-yes">26x</span>
1307
+ <span class="cline-any cline-yes">15x</span>
1308
+ <span class="cline-any cline-neutral">&nbsp;</span>
1309
+ <span class="cline-any cline-yes">11x</span>
1310
+ <span class="cline-any cline-neutral">&nbsp;</span>
1311
+ <span class="cline-any cline-yes">26x</span>
1312
+ <span class="cline-any cline-yes">1x</span>
1313
+ <span class="cline-any cline-neutral">&nbsp;</span>
1314
+ <span class="cline-any cline-neutral">&nbsp;</span>
1315
+ <span class="cline-any cline-yes">25x</span>
1316
+ <span class="cline-any cline-yes">25x</span>
1317
+ <span class="cline-any cline-neutral">&nbsp;</span>
1318
+ <span class="cline-any cline-yes">24x</span>
1319
+ <span class="cline-any cline-no">&nbsp;</span>
1320
+ <span class="cline-any cline-neutral">&nbsp;</span>
1321
+ <span class="cline-any cline-yes">24x</span>
1322
+ <span class="cline-any cline-neutral">&nbsp;</span>
1323
+ <span class="cline-any cline-neutral">&nbsp;</span>
1324
+ <span class="cline-any cline-neutral">&nbsp;</span>
1325
+ <span class="cline-any cline-neutral">&nbsp;</span>
1326
+ <span class="cline-any cline-neutral">&nbsp;</span>
1327
+ <span class="cline-any cline-neutral">&nbsp;</span>
1328
+ <span class="cline-any cline-neutral">&nbsp;</span>
1329
+ <span class="cline-any cline-neutral">&nbsp;</span>
1330
+ <span class="cline-any cline-neutral">&nbsp;</span>
1331
+ <span class="cline-any cline-yes">5x</span>
1332
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/*
1333
+ * Tencent is pleased to support the open source community by making TMagicEditor available.
1334
+ *
1335
+ * Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
1336
+ *
1337
+ * Licensed under the Apache License, Version 2.0 (the "License");
1338
+ * you may not use this file except in compliance with the License.
1339
+ * You may obtain a copy of the License at
1340
+ *
1341
+ * http://www.apache.org/licenses/LICENSE-2.0
1342
+ *
1343
+ * Unless required by applicable law or agreed to in writing, software
1344
+ * distributed under the License is distributed on an "AS IS" BASIS,
1345
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346
+ * See the License for the specific language governing permissions and
1347
+ * limitations under the License.
1348
+ */
1349
+ &nbsp;
1350
+ import { reactive, toRaw } from 'vue';
1351
+ import { cloneDeep, mergeWith } from 'lodash-es';
1352
+ import serialize from 'serialize-javascript';
1353
+ &nbsp;
1354
+ import type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';
1355
+ import { NodeType } from '@tmagic/schema';
1356
+ import StageCore from '@tmagic/stage';
1357
+ import { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';
1358
+ &nbsp;
1359
+ import historyService, { StepValue } from '@editor/services/history';
1360
+ import propsService from '@editor/services/props';
1361
+ import type { AddMNode, EditorNodeInfo, StoreState } from '@editor/type';
1362
+ import { LayerOffset, Layout } from '@editor/type';
1363
+ import {
1364
+ change2Fixed,
1365
+ COPY_STORAGE_KEY,
1366
+ Fixed2Other,
1367
+ getNodeIndex,
1368
+ initPosition,
1369
+ isFixed,
1370
+ setLayout,
1371
+ setNewItemId,
1372
+ } from '@editor/utils/editor';
1373
+ import { log } from '@editor/utils/logger';
1374
+ &nbsp;
1375
+ import BaseService from './BaseService';
1376
+ &nbsp;
1377
+ class Editor extends BaseService {
1378
+ private isHistoryStateChange = false;
1379
+ &nbsp;
1380
+ private state = reactive&lt;StoreState&gt;({
1381
+ root: null,
1382
+ page: null,
1383
+ parent: null,
1384
+ node: null,
1385
+ stage: null,
1386
+ highlightNode: null,
1387
+ modifiedNodeIds: new Map(),
1388
+ });
1389
+ &nbsp;
1390
+ constructor() {
1391
+ super(
1392
+ [
1393
+ 'getLayout',
1394
+ 'select',
1395
+ 'add',
1396
+ 'remove',
1397
+ 'update',
1398
+ 'sort',
1399
+ 'copy',
1400
+ 'paste',
1401
+ 'alignCenter',
1402
+ 'moveLayer',
1403
+ 'undo',
1404
+ 'redo',
1405
+ 'highlight',
1406
+ ],
1407
+ // 需要注意循环依赖问题,如果函数间有相互调用的话,不能设置为串行调用
1408
+ ['select', 'update', 'moveLayer'],
1409
+ );
1410
+ }
1411
+ &nbsp;
1412
+ /**
1413
+ * 设置当前指点节点配置
1414
+ * @param name 'root' | 'page' | 'parent' | 'node' | 'highlightNode'
1415
+ * @param value MNode
1416
+ * @returns MNode
1417
+ */
1418
+ public set&lt;T = MNode&gt;(name: keyof StoreState, value: T) {
1419
+ this.state[name] = value as any;
1420
+ log('store set ', name, ' ', value);
1421
+ &nbsp;
1422
+ if (name === 'root') {
1423
+ this.emit('root-change', value);
1424
+ }
1425
+ }
1426
+ &nbsp;
1427
+ /**
1428
+ * 获取当前指点节点配置
1429
+ * @param name 'root' | 'page' | 'parent' | 'node'
1430
+ * @returns MNode
1431
+ */
1432
+ public get&lt;T = MNode&gt;(name: keyof StoreState): T {
1433
+ return (this.state as any)[name];
1434
+ }
1435
+ &nbsp;
1436
+ /**
1437
+ * 根据id获取组件、组件的父组件以及组件所属的页面节点
1438
+ * @param {number | string} id 组件id
1439
+ * @returns {EditorNodeInfo}
1440
+ */
1441
+ public getNodeInfo(id: Id): EditorNodeInfo {
1442
+ const root = toRaw(this.get&lt;MApp | null&gt;('root'));
1443
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!root) <span class="cstat-no" title="statement not covered" >return {};</span>
1444
+ &nbsp;
1445
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (id === root.id) {
1446
+ <span class="cstat-no" title="statement not covered" > return { node: root };</span>
1447
+ }
1448
+ &nbsp;
1449
+ const path = getNodePath(id, root.items);
1450
+ &nbsp;
1451
+ if (!path.length) return {};
1452
+ &nbsp;
1453
+ path.unshift(root);
1454
+ const info: EditorNodeInfo = {};
1455
+ &nbsp;
1456
+ info.node = path[path.length - 1] as MComponent;
1457
+ info.parent = path[path.length - 2] as MContainer;
1458
+ &nbsp;
1459
+ path.forEach((item) =&gt; {
1460
+ if (item.type === NodeType.PAGE) {
1461
+ info.page = item as MPage;
1462
+ return;
1463
+ }
1464
+ });
1465
+ &nbsp;
1466
+ return info;
1467
+ }
1468
+ &nbsp;
1469
+ /**
1470
+ * 根据ID获取指点节点配置
1471
+ * @param id 组件ID
1472
+ * @returns 组件节点配置
1473
+ */
1474
+ public getNodeById(id: Id): MNode | undefined {
1475
+ const { node } = this.getNodeInfo(id);
1476
+ return node;
1477
+ }
1478
+ &nbsp;
1479
+ /**
1480
+ * 根据ID获取指点节点的父节点配置
1481
+ * @param id 组件ID
1482
+ * @returns 指点组件的父节点配置
1483
+ */
1484
+ public getParentById(id: Id): MContainer | undefined {
1485
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.get&lt;MApp | null&gt;('root')) <span class="cstat-no" title="statement not covered" >return;</span>
1486
+ const { parent } = this.getNodeInfo(id);
1487
+ return parent;
1488
+ }
1489
+ &nbsp;
1490
+ /**
1491
+ * 只有容器拥有布局
1492
+ */
1493
+ public async getLayout(parent: MNode, node?: MNode): Promise&lt;Layout&gt; {
1494
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (node &amp;&amp; typeof node !== 'function' &amp;&amp; isFixed(node)) <span class="cstat-no" title="statement not covered" >return Layout.FIXED;</span>
1495
+ &nbsp;
1496
+ if (parent.layout) {
1497
+ return parent.layout;
1498
+ }
1499
+ &nbsp;
1500
+ // 如果该节点没有设置position,则认为是流式布局,例如获取root的布局时
1501
+ if (!parent.style?.position) {
1502
+ return Layout.RELATIVE;
1503
+ }
1504
+ &nbsp;
1505
+ return Layout.ABSOLUTE;
1506
+ }
1507
+ &nbsp;
1508
+ /**
1509
+ * 选中指定节点(将指定节点设置成当前选中状态)
1510
+ * @param config 指定节点配置或者ID
1511
+ * @returns 当前选中的节点配置
1512
+ */
1513
+ public async select(config: MNode | Id): Promise&lt;MNode&gt; | never {
1514
+ const { node, page, parent } = this.selectedConfigExceptionHandler(config);
1515
+ this.set('node', node);
1516
+ this.set('page', page || <span class="branch-1 cbranch-no" title="branch not covered" >null)</span>;
1517
+ this.set('parent', parent || <span class="branch-1 cbranch-no" title="branch not covered" >null)</span>;
1518
+ &nbsp;
1519
+ if (page) {
1520
+ historyService.changePage(toRaw(page));
1521
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1522
+ <span class="cstat-no" title="statement not covered" > historyService.empty();</span>
1523
+ }
1524
+ return node!;
1525
+ }
1526
+ &nbsp;
1527
+ public <span class="fstat-no" title="function not covered" >async </span>selectNextNode(): Promise&lt;MNode&gt; | never {
1528
+ const node = <span class="cstat-no" title="statement not covered" >toRaw(this.get('node'));</span>
1529
+ &nbsp;
1530
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!node || isPage(node) || node.type === NodeType.ROOT) <span class="cstat-no" title="statement not covered" >return node;</span></span>
1531
+ &nbsp;
1532
+ const parent = <span class="cstat-no" title="statement not covered" >toRaw(this.getParentById(node.id));</span>
1533
+ &nbsp;
1534
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!parent) <span class="cstat-no" title="statement not covered" >return node;</span></span>
1535
+ &nbsp;
1536
+ const index = <span class="cstat-no" title="statement not covered" >getNodeIndex(node, parent);</span>
1537
+ &nbsp;
1538
+ const nextNode = <span class="cstat-no" title="statement not covered" >parent.items[index + 1] || parent.items[0];</span>
1539
+ &nbsp;
1540
+ <span class="cstat-no" title="statement not covered" > await this.select(nextNode);</span>
1541
+ <span class="cstat-no" title="statement not covered" > this.get&lt;StageCore&gt;('stage')?.select(nextNode.id);</span>
1542
+ &nbsp;
1543
+ <span class="cstat-no" title="statement not covered" > return nextNode;</span>
1544
+ }
1545
+ &nbsp;
1546
+ public <span class="fstat-no" title="function not covered" >async </span>selectNextPage(): Promise&lt;MNode&gt; | never {
1547
+ const root = <span class="cstat-no" title="statement not covered" >toRaw(this.get&lt;MApp&gt;('root'));</span>
1548
+ const page = <span class="cstat-no" title="statement not covered" >toRaw(this.get('page'));</span>
1549
+ &nbsp;
1550
+ const index = <span class="cstat-no" title="statement not covered" >getNodeIndex(page, root);</span>
1551
+ &nbsp;
1552
+ const nextPage = <span class="cstat-no" title="statement not covered" >root.items[index + 1] || root.items[0];</span>
1553
+ &nbsp;
1554
+ <span class="cstat-no" title="statement not covered" > await this.select(nextPage);</span>
1555
+ <span class="cstat-no" title="statement not covered" > this.get&lt;StageCore&gt;('stage')?.select(nextPage.id);</span>
1556
+ &nbsp;
1557
+ <span class="cstat-no" title="statement not covered" > return nextPage;</span>
1558
+ }
1559
+ &nbsp;
1560
+ /**
1561
+ * 高亮指定节点
1562
+ * @param config 指定节点配置或者ID
1563
+ * @returns 当前高亮的节点配置
1564
+ */
1565
+ public <span class="fstat-no" title="function not covered" >highlight(</span>config: MNode | Id): void {
1566
+ const { node } = <span class="cstat-no" title="statement not covered" >this.selectedConfigExceptionHandler(config);</span>
1567
+ const currentHighlightNode = <span class="cstat-no" title="statement not covered" >this.get('highlightNode');</span>
1568
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (currentHighlightNode === node) <span class="cstat-no" title="statement not covered" >return;</span></span>
1569
+ <span class="cstat-no" title="statement not covered" > this.set('highlightNode', node);</span>
1570
+ }
1571
+ &nbsp;
1572
+ /**
1573
+ * 向指点容器添加组件节点
1574
+ * @param addConfig 将要添加的组件节点配置
1575
+ * @param parent 要添加到的容器组件节点配置,如果不设置,默认为当前选中的组件的父节点
1576
+ * @returns 添加后的节点
1577
+ */
1578
+ public async add(addNode: AddMNode, parent?: MContainer | null): Promise&lt;MNode&gt; {
1579
+ const { type, ...config } = addNode;
1580
+ const curNode = this.get&lt;MContainer&gt;('node');
1581
+ &nbsp;
1582
+ let parentNode: MNode | undefined;
1583
+ &nbsp;
1584
+ if (type === NodeType.PAGE) {
1585
+ parentNode = this.get&lt;MApp&gt;('root');
1586
+ // 由于支持中间件扩展,在parent参数为undefined时,parent会变成next函数
1587
+ } else if (parent &amp;&amp; typeof parent !== 'function') {
1588
+ parentNode = parent;
1589
+ } else if (curNode.items) {
1590
+ parentNode = curNode;
1591
+ } else {
1592
+ parentNode = this.getParentById(curNode.id);
1593
+ }
1594
+ &nbsp;
1595
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!parentNode) <span class="cstat-no" title="statement not covered" >throw new Error('未找到父元素');</span>
1596
+ &nbsp;
1597
+ const layout = await this.getLayout(toRaw(parentNode), addNode as MNode);
1598
+ const newNode = initPosition(
1599
+ { ...toRaw(await propsService.getPropsValue(type, config)) },
1600
+ layout,
1601
+ parentNode,
1602
+ this.get&lt;StageCore&gt;('stage'),
1603
+ );
1604
+ &nbsp;
1605
+ if ((parentNode?.type === NodeType.ROOT || curNode.type === NodeType.ROOT) &amp;&amp; newNode.type !== NodeType.PAGE) {
1606
+ throw new Error('app下不能添加组件');
1607
+ }
1608
+ &nbsp;
1609
+ parentNode?.items?.push(newNode);
1610
+ &nbsp;
1611
+ const stage = this.get&lt;StageCore | null&gt;('stage');
1612
+ &nbsp;
1613
+ await stage?.add({ config: cloneDeep(newNode), root: cloneDeep(this.get('root')) });
1614
+ &nbsp;
1615
+ await this.select(newNode);
1616
+ &nbsp;
1617
+ this.addModifiedNodeId(newNode.id);
1618
+ if (type !== NodeType.PAGE) {
1619
+ this.pushHistoryState();
1620
+ }
1621
+ &nbsp;
1622
+ stage?.select(newNode.id);
1623
+ &nbsp;
1624
+ return newNode;
1625
+ }
1626
+ &nbsp;
1627
+ /**
1628
+ * 删除组件
1629
+ * @param {Object} node
1630
+ * @return {Object} 删除的组件配置
1631
+ */
1632
+ public async remove(node: MNode): Promise&lt;MNode | void&gt; {
1633
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!node?.id) <span class="cstat-no" title="statement not covered" >return;</span>
1634
+ &nbsp;
1635
+ const root = this.get&lt;MApp | null&gt;('root');
1636
+ &nbsp;
1637
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!root) <span class="cstat-no" title="statement not covered" >throw new Error('没有root');</span>
1638
+ &nbsp;
1639
+ const { parent, node: curNode } = this.getNodeInfo(node.id);
1640
+ &nbsp;
1641
+ if (!parent || !curNode) throw new Error('找不要删除的节点');
1642
+ &nbsp;
1643
+ const index = getNodeIndex(curNode, parent);
1644
+ &nbsp;
1645
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof index !== 'number' || index === -1) <span class="cstat-no" title="statement not covered" >throw new Error('找不要删除的节点');</span>
1646
+ &nbsp;
1647
+ parent.items?.splice(index, 1);
1648
+ const stage = this.get&lt;StageCore | null&gt;('stage');
1649
+ stage?.remove({ id: node.id, root: this.get('root') });
1650
+ &nbsp;
1651
+ if (node.type === NodeType.PAGE) {
1652
+ if (root.items[0]) {
1653
+ await this.select(root.items[0]);
1654
+ stage?.select(root.items[0].id);
1655
+ }
1656
+ } else {
1657
+ await this.select(parent);
1658
+ stage?.select(parent.id);
1659
+ }
1660
+ &nbsp;
1661
+ this.addModifiedNodeId(parent.id);
1662
+ this.pushHistoryState();
1663
+ &nbsp;
1664
+ return node;
1665
+ }
1666
+ &nbsp;
1667
+ /**
1668
+ * 更新节点
1669
+ * @param config 新的节点配置,配置中需要有id信息
1670
+ * @returns 更新后的节点配置
1671
+ */
1672
+ public async update(config: MNode): Promise&lt;MNode&gt; {
1673
+ if (!config?.id) throw new Error('没有配置或者配置缺少id值');
1674
+ &nbsp;
1675
+ const info = this.getNodeInfo(config.id);
1676
+ &nbsp;
1677
+ if (!info.node) throw new Error(`获取不到id为${config.id}的节点`);
1678
+ &nbsp;
1679
+ const node = cloneDeep(toRaw(info.node));
1680
+ &nbsp;
1681
+ let newConfig = await this.toggleFixedPosition(toRaw(config), node, this.get&lt;MApp&gt;('root'));
1682
+ &nbsp;
1683
+ newConfig = mergeWith(cloneDeep(node), newConfig, (objValue, srcValue) =&gt; {
1684
+ if (Array.isArray(srcValue)) {
1685
+ return srcValue;
1686
+ }
1687
+ });
1688
+ &nbsp;
1689
+ if (!newConfig.type) throw new Error('配置缺少type值');
1690
+ &nbsp;
1691
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (newConfig.type === NodeType.ROOT) {
1692
+ <span class="cstat-no" title="statement not covered" > this.set('root', newConfig);</span>
1693
+ <span class="cstat-no" title="statement not covered" > return newConfig;</span>
1694
+ }
1695
+ &nbsp;
1696
+ const { parent } = info;
1697
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!parent) <span class="cstat-no" title="statement not covered" >throw new Error('获取不到父级节点');</span>
1698
+ &nbsp;
1699
+ const parentNodeItems = parent.items;
1700
+ const index = getNodeIndex(newConfig, parent);
1701
+ &nbsp;
1702
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!parentNodeItems || typeof index === 'undefined' || index === -1) <span class="cstat-no" title="statement not covered" >throw new Error('更新的节点未找到');</span>
1703
+ &nbsp;
1704
+ const newLayout = await this.getLayout(newConfig);
1705
+ const layout = await this.getLayout(node);
1706
+ if (newLayout !== layout) {
1707
+ newConfig = setLayout(newConfig, newLayout);
1708
+ }
1709
+ &nbsp;
1710
+ parentNodeItems[index] = newConfig;
1711
+ &nbsp;
1712
+ if (`${newConfig.id}` === `${this.get('node').id}`) {
1713
+ this.set('node', newConfig);
1714
+ }
1715
+ &nbsp;
1716
+ this.get&lt;StageCore | null&gt;('stage')?.update({ config: cloneDeep(newConfig), root: this.get('root') });
1717
+ &nbsp;
1718
+ if (newConfig.type === NodeType.PAGE) {
1719
+ this.set('page', newConfig);
1720
+ }
1721
+ &nbsp;
1722
+ this.addModifiedNodeId(newConfig.id);
1723
+ this.pushHistoryState();
1724
+ &nbsp;
1725
+ return newConfig;
1726
+ }
1727
+ &nbsp;
1728
+ /**
1729
+ * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -&gt; sort(1,3) -&gt; [2,1,3,4]
1730
+ * @param id1 组件ID
1731
+ * @param id2 组件ID
1732
+ * @returns void
1733
+ */
1734
+ public async sort(id1: Id, id2: Id): Promise&lt;void&gt; {
1735
+ const node = this.get&lt;MNode&gt;('node');
1736
+ const parent = cloneDeep(toRaw(this.get&lt;MContainer&gt;('parent')));
1737
+ const index2 = parent.items.findIndex((node: MNode) =&gt; `${node.id}` === `${id2}`);
1738
+ // 在 id1 的兄弟组件中若无 id2 则直接 return
1739
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (index2 &lt; 0) <span class="cstat-no" title="statement not covered" >return;</span>
1740
+ const index1 = parent.items.findIndex((node: MNode) =&gt; `${node.id}` === `${id1}`);
1741
+ &nbsp;
1742
+ parent.items.splice(index2, 0, ...parent.items.splice(index1, 1));
1743
+ &nbsp;
1744
+ await this.update(parent);
1745
+ await this.select(node);
1746
+ &nbsp;
1747
+ this.get&lt;StageCore | null&gt;('stage')?.update({ config: cloneDeep(node), root: this.get('root') });
1748
+ &nbsp;
1749
+ this.addModifiedNodeId(parent.id);
1750
+ this.pushHistoryState();
1751
+ }
1752
+ &nbsp;
1753
+ /**
1754
+ * 将组将节点配置转化成string,然后存储到localStorage中
1755
+ * @param config 组件节点配置
1756
+ * @returns 组件节点配置
1757
+ */
1758
+ public async copy(config: MNode): Promise&lt;void&gt; {
1759
+ globalThis.localStorage.setItem(COPY_STORAGE_KEY, serialize(config));
1760
+ }
1761
+ &nbsp;
1762
+ /**
1763
+ * 从localStorage中获取节点,然后添加到当前容器中
1764
+ * @param position 如果设置,指定组件位置
1765
+ * @returns 添加后的组件节点配置
1766
+ */
1767
+ public async paste(position: { left?: number; top?: number } = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span>: Promise&lt;MNode | void&gt; {
1768
+ const configStr = globalThis.localStorage.getItem(COPY_STORAGE_KEY);
1769
+ // eslint-disable-next-line prefer-const
1770
+ let config: any = {};
1771
+ if (!configStr) {
1772
+ return;
1773
+ }
1774
+ &nbsp;
1775
+ try {
1776
+ // eslint-disable-next-line no-eval
1777
+ eval(`config = ${configStr}`);
1778
+ } catch (e) {
1779
+ <span class="cstat-no" title="statement not covered" > console.error(e);</span>
1780
+ <span class="cstat-no" title="statement not covered" > return;</span>
1781
+ }
1782
+ &nbsp;
1783
+ setNewItemId(config, this.get('root'));
1784
+ if (config.style) {
1785
+ config.style = {
1786
+ ...config.style,
1787
+ ...position,
1788
+ };
1789
+ }
1790
+ &nbsp;
1791
+ return await this.add(config);
1792
+ }
1793
+ &nbsp;
1794
+ /**
1795
+ * 将指点节点设置居中
1796
+ * @param config 组件节点配置
1797
+ * @returns 当前组件节点配置
1798
+ */
1799
+ public async alignCenter(config: MNode): Promise&lt;MNode | void&gt; {
1800
+ const parent = this.get&lt;MContainer&gt;('parent');
1801
+ const node = this.get&lt;MNode&gt;('node');
1802
+ const layout = await this.getLayout(toRaw(parent), toRaw(node));
1803
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (layout === Layout.RELATIVE) {
1804
+ <span class="cstat-no" title="statement not covered" > return;</span>
1805
+ }
1806
+ &nbsp;
1807
+ if (parent.style?.width &amp;&amp; node.style?.width) {
1808
+ node.style.left = (parent.style.width - node.style.width) / 2;
1809
+ }
1810
+ &nbsp;
1811
+ await this.update(node);
1812
+ this.get&lt;StageCore | null&gt;('stage')?.update({ config: cloneDeep(toRaw(node)), root: this.get('root') });
1813
+ this.addModifiedNodeId(config.id);
1814
+ this.pushHistoryState();
1815
+ &nbsp;
1816
+ return config;
1817
+ }
1818
+ &nbsp;
1819
+ /**
1820
+ * 移动当前选中节点位置
1821
+ * @param offset 偏移量
1822
+ */
1823
+ public async moveLayer(offset: number | LayerOffset): Promise&lt;void&gt; {
1824
+ const parent = this.get&lt;MContainer&gt;('parent');
1825
+ const node = this.get('node');
1826
+ const brothers: MNode[] = parent?.items || <span class="branch-1 cbranch-no" title="branch not covered" >[];</span>
1827
+ const index = brothers.findIndex((item) =&gt; `${item.id}` === `${node?.id}`);
1828
+ &nbsp;
1829
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (offset === LayerOffset.BOTTOM) {
1830
+ <span class="cstat-no" title="statement not covered" > brothers.splice(brothers.length - 1, 0, brothers.splice(index, 1)[0]);</span>
1831
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (offset === LayerOffset.TOP) {
1832
+ <span class="cstat-no" title="statement not covered" > brothers.splice(0, 0, brothers.splice(index, 1)[0]);</span>
1833
+ } else {
1834
+ brothers.splice(index + parseInt(`${offset}`, 10), 0, brothers.splice(index, 1)[0]);
1835
+ }
1836
+ &nbsp;
1837
+ this.get&lt;StageCore | null&gt;('stage')?.update({ config: cloneDeep(toRaw(parent)), root: this.get('root') });
1838
+ }
1839
+ &nbsp;
1840
+ /**
1841
+ * 撤销当前操作
1842
+ * @returns 上一次数据
1843
+ */
1844
+ public async undo(): Promise&lt;StepValue | null&gt; {
1845
+ const value = historyService.undo();
1846
+ await this.changeHistoryState(value);
1847
+ return value;
1848
+ }
1849
+ &nbsp;
1850
+ /**
1851
+ * 恢复到下一步
1852
+ * @returns 下一步数据
1853
+ */
1854
+ public async redo(): Promise&lt;StepValue | null&gt; {
1855
+ const value = historyService.redo();
1856
+ await this.changeHistoryState(value);
1857
+ return value;
1858
+ }
1859
+ &nbsp;
1860
+ public <span class="fstat-no" title="function not covered" >async </span>move(left: number, top: number) {
1861
+ const node = <span class="cstat-no" title="statement not covered" >toRaw(this.get('node'));</span>
1862
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!node || isPage(node)) <span class="cstat-no" title="statement not covered" >return;</span></span>
1863
+ &nbsp;
1864
+ const { style, id } = <span class="cstat-no" title="statement not covered" >node;</span>
1865
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!style || style.position !== 'absolute') <span class="cstat-no" title="statement not covered" >return;</span></span>
1866
+ &nbsp;
1867
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (top &amp;&amp; !isNumber(style.top)) <span class="cstat-no" title="statement not covered" >return;</span></span>
1868
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (left &amp;&amp; !isNumber(style.left)) <span class="cstat-no" title="statement not covered" >return;</span></span>
1869
+ &nbsp;
1870
+ <span class="cstat-no" title="statement not covered" > this.update({</span>
1871
+ id,
1872
+ style: {
1873
+ ...style,
1874
+ left: Number(style.left) + left,
1875
+ top: Number(style.top) + top,
1876
+ },
1877
+ });
1878
+ }
1879
+ &nbsp;
1880
+ public <span class="fstat-no" title="function not covered" >destroy(</span>) {
1881
+ <span class="cstat-no" title="statement not covered" > this.removeAllListeners();</span>
1882
+ <span class="cstat-no" title="statement not covered" > this.set('root', null);</span>
1883
+ <span class="cstat-no" title="statement not covered" > this.set('node', null);</span>
1884
+ <span class="cstat-no" title="statement not covered" > this.set('page', null);</span>
1885
+ <span class="cstat-no" title="statement not covered" > this.set('parent', null);</span>
1886
+ }
1887
+ &nbsp;
1888
+ public <span class="fstat-no" title="function not covered" >resetModifiedNodeId(</span>) {
1889
+ <span class="cstat-no" title="statement not covered" > this.get&lt;Map&lt;Id, Id&gt;&gt;('modifiedNodeIds').clear();</span>
1890
+ }
1891
+ &nbsp;
1892
+ private addModifiedNodeId(id: Id) {
1893
+ if (!this.isHistoryStateChange) {
1894
+ this.get&lt;Map&lt;Id, Id&gt;&gt;('modifiedNodeIds').set(id, id);
1895
+ }
1896
+ }
1897
+ &nbsp;
1898
+ private pushHistoryState() {
1899
+ const curNode = cloneDeep(toRaw(this.get('node')));
1900
+ if (!this.isHistoryStateChange) {
1901
+ historyService.push({
1902
+ data: cloneDeep(toRaw(this.get('page'))),
1903
+ modifiedNodeIds: this.get&lt;Map&lt;Id, Id&gt;&gt;('modifiedNodeIds'),
1904
+ nodeId: curNode.id,
1905
+ });
1906
+ }
1907
+ this.isHistoryStateChange = false;
1908
+ }
1909
+ &nbsp;
1910
+ private async changeHistoryState(value: StepValue | null) {
1911
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!value) <span class="cstat-no" title="statement not covered" >return;</span>
1912
+ &nbsp;
1913
+ this.isHistoryStateChange = true;
1914
+ await this.update(value.data);
1915
+ this.set('modifiedNodeIds', value.modifiedNodeIds);
1916
+ setTimeout(<span class="fstat-no" title="function not covered" >async </span>() =&gt; {
1917
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!value.nodeId) <span class="cstat-no" title="statement not covered" >return;</span></span>
1918
+ <span class="cstat-no" title="statement not covered" > await this.select(value.nodeId);</span>
1919
+ <span class="cstat-no" title="statement not covered" > this.get&lt;StageCore | null&gt;('stage')?.select(value.nodeId);</span>
1920
+ }, 0);
1921
+ }
1922
+ &nbsp;
1923
+ private async toggleFixedPosition(dist: MNode, src: MNode, root: MApp) {
1924
+ let newConfig = cloneDeep(dist);
1925
+ &nbsp;
1926
+ if (!isPop(src) &amp;&amp; newConfig.style?.position) {
1927
+ if (isFixed(newConfig) &amp;&amp; !isFixed(src)) {
1928
+ newConfig = change2Fixed(newConfig, root);
1929
+ } else if (!isFixed(newConfig) &amp;&amp; isFixed(src)) {
1930
+ newConfig = await Fixed2Other(newConfig, root, this.getLayout);
1931
+ }
1932
+ }
1933
+ &nbsp;
1934
+ return newConfig;
1935
+ }
1936
+ &nbsp;
1937
+ private selectedConfigExceptionHandler(config: MNode | Id): EditorNodeInfo {
1938
+ let id: Id;
1939
+ if (typeof config === 'string' || typeof config === 'number') {
1940
+ id = config;
1941
+ } else {
1942
+ id = config.id;
1943
+ }
1944
+ if (!id) {
1945
+ throw new Error('没有ID,无法选中');
1946
+ }
1947
+ &nbsp;
1948
+ const { node, parent, page } = this.getNodeInfo(id);
1949
+ if (!node) throw new Error('获取不到组件信息');
1950
+ &nbsp;
1951
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (node.id === this.state.root?.id) {
1952
+ <span class="cstat-no" title="statement not covered" > throw new Error('不能选根节点');</span>
1953
+ }
1954
+ return {
1955
+ node,
1956
+ parent,
1957
+ page,
1958
+ };
1959
+ }
1960
+ }
1961
+ &nbsp;
1962
+ export type EditorService = Editor;
1963
+ &nbsp;
1964
+ export default new Editor();
1965
+ &nbsp;</pre></td></tr></table></pre>
1966
+
1967
+ <div class='push'></div><!-- for sticky footer -->
1968
+ </div><!-- /wrapper -->
1969
+ <div class='footer quiet pad2 space-top1 center small'>
1970
+ Code coverage generated by
1971
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1972
+ at Fri Apr 22 2022 12:15:01 GMT+0800 (China Standard Time)
1973
+ </div>
1974
+ <script src="../../prettify.js"></script>
1975
+ <script>
1976
+ window.onload = function () {
1977
+ prettyPrint();
1978
+ };
1979
+ </script>
1980
+ <script src="../../sorter.js"></script>
1981
+ <script src="../../block-navigation.js"></script>
1982
+ </body>
1983
+ </html>
1984
+