@redneckz/wildless-cms-uni-blocks 0.8.30 → 0.9.0

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 (245) hide show
  1. package/bin/migrateContentUnit.js +2 -5
  2. package/bin/migration-scripts/0.8.31.js +86 -0
  3. package/bundle/blocks.schema.json +1 -1
  4. package/bundle/bundle.umd.js +93 -22
  5. package/bundle/bundle.umd.min.js +1 -1
  6. package/bundle/components/Filtration/Filtration.d.ts +6 -0
  7. package/bundle/components/Filtration/FiltrationContent.d.ts +78 -0
  8. package/bundle/components/Filtration/FiltrationInner.d.ts +7 -0
  9. package/bundle/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  10. package/bundle/components/Filtration/renderFormItem.d.ts +4 -0
  11. package/bundle/content-page-repository/transformImgPath.d.ts +8 -0
  12. package/bundle/hooks/useForm.d.ts +12 -0
  13. package/bundle/model/JSXBlock.d.ts +2 -0
  14. package/bundle/ui-kit/ControlProps.d.ts +4 -0
  15. package/bundle/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  16. package/bundle/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  17. package/bundle/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  18. package/dist/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
  19. package/dist/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
  20. package/dist/components/Blocks.js +2 -0
  21. package/dist/components/Blocks.js.map +1 -1
  22. package/dist/components/Filtration/Filtration.d.ts +6 -0
  23. package/dist/components/Filtration/Filtration.js +17 -0
  24. package/dist/components/Filtration/Filtration.js.map +1 -0
  25. package/dist/components/Filtration/FiltrationContent.d.ts +78 -0
  26. package/dist/components/Filtration/FiltrationContent.js +2 -0
  27. package/dist/components/Filtration/FiltrationContent.js.map +1 -0
  28. package/dist/components/Filtration/FiltrationInner.d.ts +7 -0
  29. package/dist/components/Filtration/FiltrationInner.js +23 -0
  30. package/dist/components/Filtration/FiltrationInner.js.map +1 -0
  31. package/dist/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  32. package/dist/components/Filtration/checkShouldRenderBlock.js +11 -0
  33. package/dist/components/Filtration/checkShouldRenderBlock.js.map +1 -0
  34. package/dist/components/Filtration/renderFormItem.d.ts +4 -0
  35. package/dist/components/Filtration/renderFormItem.js +21 -0
  36. package/dist/components/Filtration/renderFormItem.js.map +1 -0
  37. package/dist/content-page-repository/transformImg.js +6 -6
  38. package/dist/content-page-repository/transformImg.js.map +1 -1
  39. package/dist/content-page-repository/transformImgPath.d.ts +8 -0
  40. package/{mobile/dist/content-page-repository/transformSrc.js → dist/content-page-repository/transformImgPath.js} +7 -5
  41. package/dist/content-page-repository/transformImgPath.js.map +1 -0
  42. package/dist/content-page-repository/transformPicture.js +3 -3
  43. package/dist/content-page-repository/transformPicture.js.map +1 -1
  44. package/dist/hooks/useForm.d.ts +12 -0
  45. package/dist/hooks/useForm.js +21 -0
  46. package/dist/hooks/useForm.js.map +1 -0
  47. package/dist/model/JSXBlock.d.ts +2 -0
  48. package/dist/ui-kit/ControlProps.d.ts +4 -0
  49. package/dist/ui-kit/ControlProps.js +2 -0
  50. package/dist/ui-kit/ControlProps.js.map +1 -0
  51. package/dist/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  52. package/dist/ui-kit/Foldable/DefaultFoldButton.js +5 -7
  53. package/dist/ui-kit/Foldable/DefaultFoldButton.js.map +1 -1
  54. package/dist/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  55. package/dist/ui-kit/SlideCheckbox/SlideCheckbox.js +2 -2
  56. package/dist/ui-kit/SlideCheckbox/SlideCheckbox.js.map +1 -1
  57. package/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  58. package/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js +19 -0
  59. package/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js.map +1 -0
  60. package/lib/common.css +1 -1
  61. package/lib/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
  62. package/lib/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
  63. package/lib/components/Blocks.js +2 -0
  64. package/lib/components/Blocks.js.map +1 -1
  65. package/lib/components/Filtration/Filtration.d.ts +6 -0
  66. package/lib/components/Filtration/Filtration.fixture.d.ts +5 -0
  67. package/lib/components/Filtration/Filtration.js +15 -0
  68. package/lib/components/Filtration/Filtration.js.map +1 -0
  69. package/lib/components/Filtration/FiltrationContent.d.ts +78 -0
  70. package/lib/components/Filtration/FiltrationContent.js +2 -0
  71. package/lib/components/Filtration/FiltrationContent.js.map +1 -0
  72. package/lib/components/Filtration/FiltrationInner.d.ts +7 -0
  73. package/lib/components/Filtration/FiltrationInner.js +21 -0
  74. package/lib/components/Filtration/FiltrationInner.js.map +1 -0
  75. package/lib/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  76. package/lib/components/Filtration/checkShouldRenderBlock.js +8 -0
  77. package/lib/components/Filtration/checkShouldRenderBlock.js.map +1 -0
  78. package/lib/components/Filtration/renderFormItem.d.ts +4 -0
  79. package/lib/components/Filtration/renderFormItem.js +18 -0
  80. package/lib/components/Filtration/renderFormItem.js.map +1 -0
  81. package/lib/content-page-repository/transformImg.js +6 -6
  82. package/lib/content-page-repository/transformImg.js.map +1 -1
  83. package/lib/content-page-repository/transformImgPath.d.ts +8 -0
  84. package/lib/content-page-repository/{transformSrc.js → transformImgPath.js} +5 -3
  85. package/lib/content-page-repository/transformImgPath.js.map +1 -0
  86. package/lib/content-page-repository/transformPicture.js +3 -3
  87. package/lib/content-page-repository/transformPicture.js.map +1 -1
  88. package/lib/hooks/useForm.d.ts +12 -0
  89. package/lib/hooks/useForm.js +18 -0
  90. package/lib/hooks/useForm.js.map +1 -0
  91. package/lib/model/JSXBlock.d.ts +2 -0
  92. package/lib/ui-kit/ControlProps.d.ts +4 -0
  93. package/lib/ui-kit/ControlProps.js +2 -0
  94. package/lib/ui-kit/ControlProps.js.map +1 -0
  95. package/lib/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  96. package/lib/ui-kit/Foldable/DefaultFoldButton.js +5 -7
  97. package/lib/ui-kit/Foldable/DefaultFoldButton.js.map +1 -1
  98. package/lib/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  99. package/lib/ui-kit/SlideCheckbox/SlideCheckbox.js +2 -2
  100. package/lib/ui-kit/SlideCheckbox/SlideCheckbox.js.map +1 -1
  101. package/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  102. package/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js +17 -0
  103. package/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js.map +1 -0
  104. package/mobile/bundle/bundle.umd.js +5 -8
  105. package/mobile/bundle/bundle.umd.min.js +1 -1
  106. package/mobile/bundle/components/Filtration/Filtration.d.ts +6 -0
  107. package/mobile/bundle/components/Filtration/FiltrationContent.d.ts +78 -0
  108. package/mobile/bundle/components/Filtration/FiltrationInner.d.ts +7 -0
  109. package/mobile/bundle/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  110. package/mobile/bundle/components/Filtration/renderFormItem.d.ts +4 -0
  111. package/mobile/bundle/content-page-repository/transformImgPath.d.ts +8 -0
  112. package/mobile/bundle/hooks/useForm.d.ts +12 -0
  113. package/mobile/bundle/model/JSXBlock.d.ts +2 -0
  114. package/mobile/bundle/ui-kit/ControlProps.d.ts +4 -0
  115. package/mobile/bundle/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  116. package/mobile/bundle/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  117. package/mobile/bundle/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  118. package/mobile/dist/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
  119. package/mobile/dist/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
  120. package/mobile/dist/components/Filtration/Filtration.d.ts +6 -0
  121. package/mobile/dist/components/Filtration/Filtration.js +17 -0
  122. package/mobile/dist/components/Filtration/Filtration.js.map +1 -0
  123. package/mobile/dist/components/Filtration/FiltrationContent.d.ts +78 -0
  124. package/mobile/dist/components/Filtration/FiltrationContent.js +2 -0
  125. package/mobile/dist/components/Filtration/FiltrationContent.js.map +1 -0
  126. package/mobile/dist/components/Filtration/FiltrationInner.d.ts +7 -0
  127. package/mobile/dist/components/Filtration/FiltrationInner.js +23 -0
  128. package/mobile/dist/components/Filtration/FiltrationInner.js.map +1 -0
  129. package/mobile/dist/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  130. package/mobile/dist/components/Filtration/checkShouldRenderBlock.js +11 -0
  131. package/mobile/dist/components/Filtration/checkShouldRenderBlock.js.map +1 -0
  132. package/mobile/dist/components/Filtration/renderFormItem.d.ts +4 -0
  133. package/mobile/dist/components/Filtration/renderFormItem.js +21 -0
  134. package/mobile/dist/components/Filtration/renderFormItem.js.map +1 -0
  135. package/mobile/dist/content-page-repository/transformImg.js +6 -6
  136. package/mobile/dist/content-page-repository/transformImg.js.map +1 -1
  137. package/mobile/dist/content-page-repository/transformImgPath.d.ts +8 -0
  138. package/{dist/content-page-repository/transformSrc.js → mobile/dist/content-page-repository/transformImgPath.js} +7 -5
  139. package/mobile/dist/content-page-repository/transformImgPath.js.map +1 -0
  140. package/mobile/dist/content-page-repository/transformPicture.js +3 -3
  141. package/mobile/dist/content-page-repository/transformPicture.js.map +1 -1
  142. package/mobile/dist/hooks/useForm.d.ts +12 -0
  143. package/mobile/dist/hooks/useForm.js +21 -0
  144. package/mobile/dist/hooks/useForm.js.map +1 -0
  145. package/mobile/dist/model/JSXBlock.d.ts +2 -0
  146. package/mobile/dist/ui-kit/ControlProps.d.ts +4 -0
  147. package/mobile/dist/ui-kit/ControlProps.js +2 -0
  148. package/mobile/dist/ui-kit/ControlProps.js.map +1 -0
  149. package/mobile/dist/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  150. package/mobile/dist/ui-kit/Foldable/DefaultFoldButton.js +5 -7
  151. package/mobile/dist/ui-kit/Foldable/DefaultFoldButton.js.map +1 -1
  152. package/mobile/dist/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  153. package/mobile/dist/ui-kit/SlideCheckbox/SlideCheckbox.js +2 -2
  154. package/mobile/dist/ui-kit/SlideCheckbox/SlideCheckbox.js.map +1 -1
  155. package/mobile/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  156. package/mobile/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js +19 -0
  157. package/mobile/dist/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js.map +1 -0
  158. package/mobile/lib/components/ApplicationForm/renderSlideCheckboxes.js +1 -1
  159. package/mobile/lib/components/ApplicationForm/renderSlideCheckboxes.js.map +1 -1
  160. package/mobile/lib/components/Filtration/Filtration.d.ts +6 -0
  161. package/mobile/lib/components/Filtration/Filtration.js +15 -0
  162. package/mobile/lib/components/Filtration/Filtration.js.map +1 -0
  163. package/mobile/lib/components/Filtration/FiltrationContent.d.ts +78 -0
  164. package/mobile/lib/components/Filtration/FiltrationContent.js +2 -0
  165. package/mobile/lib/components/Filtration/FiltrationContent.js.map +1 -0
  166. package/mobile/lib/components/Filtration/FiltrationInner.d.ts +7 -0
  167. package/mobile/lib/components/Filtration/FiltrationInner.js +21 -0
  168. package/mobile/lib/components/Filtration/FiltrationInner.js.map +1 -0
  169. package/mobile/lib/components/Filtration/checkShouldRenderBlock.d.ts +1 -0
  170. package/mobile/lib/components/Filtration/checkShouldRenderBlock.js +8 -0
  171. package/mobile/lib/components/Filtration/checkShouldRenderBlock.js.map +1 -0
  172. package/mobile/lib/components/Filtration/renderFormItem.d.ts +4 -0
  173. package/mobile/lib/components/Filtration/renderFormItem.js +18 -0
  174. package/mobile/lib/components/Filtration/renderFormItem.js.map +1 -0
  175. package/mobile/lib/content-page-repository/transformImg.js +6 -6
  176. package/mobile/lib/content-page-repository/transformImg.js.map +1 -1
  177. package/mobile/lib/content-page-repository/transformImgPath.d.ts +8 -0
  178. package/mobile/lib/content-page-repository/{transformSrc.js → transformImgPath.js} +5 -3
  179. package/mobile/lib/content-page-repository/transformImgPath.js.map +1 -0
  180. package/mobile/lib/content-page-repository/transformPicture.js +3 -3
  181. package/mobile/lib/content-page-repository/transformPicture.js.map +1 -1
  182. package/mobile/lib/hooks/useForm.d.ts +12 -0
  183. package/mobile/lib/hooks/useForm.js +18 -0
  184. package/mobile/lib/hooks/useForm.js.map +1 -0
  185. package/mobile/lib/model/JSXBlock.d.ts +2 -0
  186. package/mobile/lib/ui-kit/ControlProps.d.ts +4 -0
  187. package/mobile/lib/ui-kit/ControlProps.js +2 -0
  188. package/mobile/lib/ui-kit/ControlProps.js.map +1 -0
  189. package/mobile/lib/ui-kit/Foldable/DefaultFoldButton.d.ts +1 -0
  190. package/mobile/lib/ui-kit/Foldable/DefaultFoldButton.js +5 -7
  191. package/mobile/lib/ui-kit/Foldable/DefaultFoldButton.js.map +1 -1
  192. package/mobile/lib/ui-kit/SlideCheckbox/SlideCheckbox.d.ts +3 -2
  193. package/mobile/lib/ui-kit/SlideCheckbox/SlideCheckbox.js +2 -2
  194. package/mobile/lib/ui-kit/SlideCheckbox/SlideCheckbox.js.map +1 -1
  195. package/mobile/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.d.ts +15 -0
  196. package/mobile/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js +17 -0
  197. package/mobile/lib/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.js.map +1 -0
  198. package/mobile/src/components/ApplicationForm/renderSlideCheckboxes.tsx +4 -4
  199. package/mobile/src/components/Filtration/Filtration.example.json +37 -0
  200. package/mobile/src/components/Filtration/Filtration.tsx +41 -0
  201. package/mobile/src/components/Filtration/Filtration.ui.json +1 -0
  202. package/mobile/src/components/Filtration/FiltrationContent.ts +87 -0
  203. package/mobile/src/components/Filtration/FiltrationInner.tsx +67 -0
  204. package/mobile/src/components/Filtration/checkShouldRenderBlock.ts +18 -0
  205. package/mobile/src/components/Filtration/renderFormItem.tsx +36 -0
  206. package/mobile/src/content-page-repository/transformImg.ts +6 -9
  207. package/mobile/src/content-page-repository/{transformSrc.ts → transformImgPath.ts} +12 -3
  208. package/mobile/src/content-page-repository/transformPicture.ts +3 -6
  209. package/mobile/src/hooks/useForm.ts +29 -0
  210. package/mobile/src/model/JSXBlock.ts +2 -0
  211. package/mobile/src/ui-kit/ControlProps.ts +4 -0
  212. package/mobile/src/ui-kit/Foldable/DefaultFoldButton.tsx +10 -4
  213. package/mobile/src/ui-kit/SlideCheckbox/SlideCheckbox.tsx +26 -23
  214. package/mobile/src/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.tsx +44 -0
  215. package/package.json +2 -1
  216. package/src/components/ApplicationForm/renderSlideCheckboxes.tsx +4 -4
  217. package/src/components/Blocks.ts +2 -0
  218. package/src/components/Filtration/Filtration.example.json +37 -0
  219. package/src/components/Filtration/Filtration.fixture.tsx +147 -0
  220. package/src/components/Filtration/Filtration.tsx +41 -0
  221. package/src/components/Filtration/Filtration.ui.json +1 -0
  222. package/src/components/Filtration/FiltrationContent.ts +87 -0
  223. package/src/components/Filtration/FiltrationInner.tsx +67 -0
  224. package/src/components/Filtration/checkShouldRenderBlock.ts +18 -0
  225. package/src/components/Filtration/renderFormItem.tsx +36 -0
  226. package/src/content-page-repository/transformImg.ts +6 -9
  227. package/src/content-page-repository/{transformSrc.ts → transformImgPath.ts} +12 -3
  228. package/src/content-page-repository/transformPicture.ts +3 -6
  229. package/src/hooks/useForm.ts +29 -0
  230. package/src/model/JSXBlock.ts +2 -0
  231. package/src/ui-kit/ControlProps.ts +4 -0
  232. package/src/ui-kit/Foldable/DefaultFoldButton.tsx +10 -4
  233. package/src/ui-kit/SlideCheckbox/SlideCheckbox.fixture.tsx +1 -1
  234. package/src/ui-kit/SlideCheckbox/SlideCheckbox.tsx +26 -23
  235. package/src/ui-kit/SlideCheckboxGroup/SlideCheckboxGroup.tsx +44 -0
  236. package/bundle/content-page-repository/transformSrc.d.ts +0 -3
  237. package/dist/content-page-repository/transformSrc.d.ts +0 -3
  238. package/dist/content-page-repository/transformSrc.js.map +0 -1
  239. package/lib/content-page-repository/transformSrc.d.ts +0 -3
  240. package/lib/content-page-repository/transformSrc.js.map +0 -1
  241. package/mobile/bundle/content-page-repository/transformSrc.d.ts +0 -3
  242. package/mobile/dist/content-page-repository/transformSrc.d.ts +0 -3
  243. package/mobile/dist/content-page-repository/transformSrc.js.map +0 -1
  244. package/mobile/lib/content-page-repository/transformSrc.d.ts +0 -3
  245. package/mobile/lib/content-page-repository/transformSrc.js.map +0 -1
@@ -7,12 +7,9 @@ export function migrateContentUnit(migrationScripts) {
7
7
  console.log('Start processing of:', unitPath);
8
8
  try {
9
9
  const content = JSON.parse(await readFile(unitPath, 'utf-8'));
10
+ const result = await contentProcessor(unitPath, content);
10
11
 
11
- await writeFile(
12
- unitPath,
13
- JSON.stringify(contentProcessor(unitPath, content), undefined, 2),
14
- 'utf-8',
15
- );
12
+ await writeFile(unitPath, JSON.stringify(result, undefined, 2), 'utf-8');
16
13
  } catch (ex) {
17
14
  console.warn(ex);
18
15
  } finally {
@@ -0,0 +1,86 @@
1
+ import crypto from 'crypto';
2
+ import { createReadStream, promises as fs } from 'fs';
3
+ import glob from 'glob';
4
+ import { basename } from 'path';
5
+ import { promisify } from 'util';
6
+
7
+ const findFiles = promisify(glob);
8
+
9
+ const CONTENT_DIR = './content';
10
+ const IMAGE_EXT_LIST = ['png', 'jpg', 'svg'];
11
+ const IMAGE_FIELD_KEYS = ['image', 'icon'];
12
+
13
+ export const description = 'v0.8.31';
14
+
15
+ export default async (unitPath, content) => {
16
+ replaceImgSrcRecursive(content);
17
+
18
+ return { ...content };
19
+ };
20
+
21
+ const getFileHash = async (filePath, algorithm = 'sha1') => {
22
+ return new Promise((resolve, reject) => {
23
+ const hash = crypto.createHash(algorithm);
24
+ const stream = createReadStream(filePath);
25
+ stream.on('error', (err) => reject(err));
26
+ stream.on('data', (chunk) => hash.update(chunk));
27
+ stream.on('end', () => resolve(hash.digest('hex')));
28
+ });
29
+ };
30
+
31
+ const getFilesHashMap = async (paths) => {
32
+ let fileHashMap = {};
33
+ for (const filePath of paths) {
34
+ const fileStat = await fs.lstat(filePath);
35
+ if (!fileStat.isFile()) {
36
+ continue;
37
+ }
38
+ fileHashMap[basename(filePath)] = await getFileHash(filePath);
39
+ }
40
+
41
+ return fileHashMap;
42
+ };
43
+
44
+ const getFileHashInfo = async () => {
45
+ const contentFiles = await findFiles(`${CONTENT_DIR}/**/*.@(${IMAGE_EXT_LIST.join('|')})`);
46
+ const filesHashMap = await getFilesHashMap(contentFiles);
47
+ const filesGroupByHash = Object.entries(filesHashMap).reduce(
48
+ (entryMap, [filePath, hash]) => entryMap.set(hash, [...(entryMap.get(hash) || []), filePath]),
49
+ new Map(),
50
+ );
51
+
52
+ filesGroupByHash.forEach((value) => value.sort());
53
+
54
+ return [filesHashMap, filesGroupByHash];
55
+ };
56
+
57
+ const [filesHashMap, filesGroupByHash] = await getFileHashInfo();
58
+
59
+ const isObject = (value) => {
60
+ return !!(value && typeof value === 'object' && !Array.isArray(value));
61
+ };
62
+
63
+ const replaceImgSrcRecursive = (node) => {
64
+ if (isObject(node)) {
65
+ const entries = Object.entries(node);
66
+
67
+ for (let i = 0; i < entries.length; i += 1) {
68
+ const [key, childNode] = entries[i];
69
+
70
+ if (IMAGE_FIELD_KEYS.includes(key) && childNode.src) {
71
+ const fileHash = filesHashMap[childNode.src];
72
+ const filesGroup = filesGroupByHash.get(fileHash);
73
+ const baseFileSrc = filesGroup ? filesGroup[0] : null;
74
+ if (baseFileSrc) {
75
+ childNode.src = baseFileSrc;
76
+ }
77
+ } else {
78
+ replaceImgSrcRecursive(childNode);
79
+ }
80
+ }
81
+ } else if (Array.isArray(node)) {
82
+ node.forEach((childNode) => {
83
+ replaceImgSrcRecursive(childNode);
84
+ });
85
+ }
86
+ };