import cheerio from 'cheerio'; import _ from 'lodash'; import { PluginContext } from './Plugin.js'; import { MbNode } from '../utils/node.js'; import { markdownIt as md } from '../lib/markdown-it/index.js'; const CSS_FILE_NAME = 'web3FormAssets/web-3-form.css'; const NAME_INPUT = '\n' + ''; const EMAIL_INPUT = '\n' + ''; const MESSAGE_INPUT = '\n' + ''; const SUBMIT_BUTTON = ''; const DEFAULT_HEADER = '
Contact Us
'; const DEFAULT_INPUTS = `${NAME_INPUT}\n${EMAIL_INPUT}\n${MESSAGE_INPUT}\n${SUBMIT_BUTTON}`; function createMinimalForm(pluginContext: PluginContext) { const $replaceNode = cheerio(''); $replaceNode.append(``); return $replaceNode; } function deleteWeb3FormAttributes(node: MbNode) { delete node.attribs.default; delete node.attribs.header; } function transformFormInputs(child: cheerio.Element) { if (child.type !== 'tag') { return; } const $node = cheerio(child); switch (child.name) { case 'name-input': $node.replaceWith(NAME_INPUT); break; case 'email-input': $node.replaceWith(EMAIL_INPUT); break; case 'message-input': $node.replaceWith(MESSAGE_INPUT); break; case 'submit-button': $node.replaceWith(SUBMIT_BUTTON); break; default: } } function generateFormContainer(node: MbNode) { if (node.type !== 'tag') { return; } node.name = 'box'; const $node = cheerio(node); $node.addClass('web-3-form'); if (!_.has(node.attribs, 'type')) { $node.attr('type', 'info'); } $node.attr('no-icon', ''); if (_.has(node.attribs, 'header')) { const header = md.render($node.prop('header')); const $headerNode = cheerio(header); $node.prepend($headerNode); } } function createCustomForm(pluginContext: PluginContext, node: MbNode) { const $node = cheerio(node); const $formNode = createMinimalForm(pluginContext); $formNode.append($node.children()); $formNode.children().each((index, child) => { transformFormInputs(child); }); $node.append($formNode); generateFormContainer(node); deleteWeb3FormAttributes(node); } function isDefaultContactForm(node: MbNode) { return _.has(node.attribs, 'default'); } function createDefaultContactForm(pluginContext: PluginContext, node: MbNode) { const $node = cheerio(node); if (!_.has(node.attribs, 'header')) { $node.attr('header', DEFAULT_HEADER); } const $formNode = createMinimalForm(pluginContext); $formNode.append(DEFAULT_INPUTS); $node.append($formNode); generateFormContainer(node); deleteWeb3FormAttributes(node); } const submitFormScript = ` `; const processNode = (pluginContext: PluginContext, node: MbNode) => { if (node.name !== 'web-3-form') { return; } if (isDefaultContactForm(node)) { createDefaultContactForm(pluginContext, node); return; } createCustomForm(pluginContext, node); }; const getLinks = () => [``]; const getScripts = () => [submitFormScript]; export { processNode, getLinks, getScripts, };