@digipair/skill-html 0.113.1 → 0.114.2

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.
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # skill-test
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build skill-html` to build the library.
@@ -0,0 +1,105 @@
1
+ 'use strict';
2
+
3
+ var engine = require('@digipair/engine');
4
+ var jsdom = require('jsdom');
5
+
6
+ let HtmlService = class HtmlService {
7
+ async html2pins(params, _pinsSettingsList, _context) {
8
+ const { html, library = 'web' } = params;
9
+ const dom = new jsdom.JSDOM(html);
10
+ const pins = this.generatePinsFromElements(Array.from(dom.window.document.querySelectorAll('body > *')), library);
11
+ return pins;
12
+ }
13
+ generatePinsFromElements(elements, library) {
14
+ const pinsList = elements.map((element)=>this.generatePinsFromElement(element, library));
15
+ return pinsList;
16
+ }
17
+ generatePinsFromElement(element, library) {
18
+ const attributes = element.getAttributeNames().reduce((obj, name)=>({
19
+ ...obj,
20
+ [name]: element.getAttribute(name)
21
+ }), {});
22
+ if (element.children.length === 0 && element.textContent) {
23
+ attributes.textContent = element.textContent;
24
+ }
25
+ const pins = {
26
+ library,
27
+ element: element.tagName.toLowerCase(),
28
+ properties: attributes,
29
+ pins: this.generatePinsFromElements(Array.from(element.children), library)
30
+ };
31
+ return pins;
32
+ }
33
+ async pins2html(params, _pinsSettingsList, _context) {
34
+ const { pins } = params;
35
+ const dom = new jsdom.JSDOM();
36
+ const element = dom.window.document.createElement('section');
37
+ await this.generateElementsFromPins(pins, element, dom);
38
+ return element.innerHTML;
39
+ }
40
+ async generateElementsFromPins(pinsList, parent, dom) {
41
+ for(let i = 0; i < pinsList.length; i++){
42
+ const item = pinsList[i];
43
+ await this.generateElementFromPins(item, parent, dom);
44
+ }
45
+ }
46
+ async generateElementFromPins(pinsSettings, parent, dom) {
47
+ const element = dom.window.document.createElement(pinsSettings.element);
48
+ // const settings = await preparePinsSettings(pinsSettings, context);
49
+ const settings = pinsSettings;
50
+ Object.entries(settings.properties || {}).forEach(([key, value])=>{
51
+ if (key === 'textContent') {
52
+ element.textContent = value;
53
+ } else if (key === 'innerHTML') {
54
+ element.innerHTML = value;
55
+ } else if (typeof value === 'string') {
56
+ element.setAttribute(key, value);
57
+ } else {
58
+ element[key] = value;
59
+ }
60
+ });
61
+ const pinsList = settings.pins || [];
62
+ await this.generateElementsFromPins(pinsList, element, dom);
63
+ parent.appendChild(element);
64
+ }
65
+ async parseHtml(params, _pinsSettingsList, context) {
66
+ const { html, execute = [] } = params;
67
+ const dom = new jsdom.JSDOM(html);
68
+ const result = await engine.executePinsList(execute, {
69
+ ...context,
70
+ document: {
71
+ querySelector: (selector)=>this.querySelector(selector, dom.window.document),
72
+ querySelectorAll: (selector)=>this.querySelectorAll(selector, dom.window.document)
73
+ }
74
+ }, `${context.__PATH__}.execute`);
75
+ return result;
76
+ }
77
+ querySelector(selector, parent) {
78
+ const element = parent?.querySelector(selector);
79
+ return element ? {
80
+ textContent: element.textContent,
81
+ querySelector: (selector)=>this.querySelector(selector, element),
82
+ querySelectorAll: (selector)=>this.querySelectorAll(selector, element),
83
+ getAttribute: (name)=>this.getAttribute(name, element)
84
+ } : undefined;
85
+ }
86
+ querySelectorAll(selector, parent) {
87
+ const elements = Array.from(parent?.querySelectorAll(selector) || []);
88
+ return elements.map((element)=>({
89
+ textContent: element.textContent,
90
+ querySelector: (selector)=>this.querySelector(selector, element),
91
+ querySelectorAll: (selector)=>this.querySelectorAll(selector, element),
92
+ getAttribute: (name)=>this.getAttribute(name, element)
93
+ }));
94
+ }
95
+ getAttribute(name, element) {
96
+ return element?.getAttribute(name);
97
+ }
98
+ };
99
+ const html2pins = (params, pinsSettingsList, context)=>new HtmlService().html2pins(params, pinsSettingsList, context);
100
+ const pins2html = (params, pinsSettingsList, context)=>new HtmlService().pins2html(params, pinsSettingsList, context);
101
+ const parseHtml = (params, pinsSettingsList, context)=>new HtmlService().parseHtml(params, pinsSettingsList, context);
102
+
103
+ exports.html2pins = html2pins;
104
+ exports.parseHtml = parseHtml;
105
+ exports.pins2html = pins2html;