UNPKG

@jverneaut/html-to-gutenberg

Version:

Create custom Gutenberg blocks from the HTML templates you already have.

97 lines (84 loc) 2.54 kB
import { visit } from "unist-util-visit"; import { remove } from "unist-util-remove"; import flatmap from "unist-util-flatmap"; import ProcessorBase from "#processors/ProcessorBase.js"; import PrinterEditJS from "#printers/PrinterEditJS.js"; import PrinterRenderPHP from "#printers/PrinterRenderPHP.js"; export default class AttributeDataDisplay extends ProcessorBase { processAstByFilename(printerFilename) { if (printerFilename === PrinterEditJS.filename) { const ast = this.asts[printerFilename]; // Remove nodes that are frontend-only remove(ast, (node) => { return ( node.properties && node.properties.dataDisplay && node.properties.dataDisplay === "frontend" ); }); flatmap(ast, (node) => { if ( node.properties && node.properties.dataDisplay && node.properties.dataDisplay === "selected" ) { this.blockData._hasSelected = true; return [ { type: "text", value: "$$${isSelected && ($$$", }, node, { type: "text", value: "$$$)}$$$", }, ]; } if ( node.properties && node.properties.dataDisplay && node.properties.dataDisplay === "not-selected" ) { this.blockData._hasSelected = true; return [ { type: "text", value: "$$${!isSelected && ($$$", }, node, { type: "text", value: "$$$)}$$$", }, ]; } return [node]; }); // Delete the dataDisplay attribute visit(ast, "element", (node) => { if (node.properties.dataDisplay) { delete node.properties.dataDisplay; } }); } if (printerFilename === PrinterRenderPHP.filename) { visit(this.asts[printerFilename], "element", (node) => { // Remove nodes that are frontend-only remove(this.asts[printerFilename], (node) => { return ( node.properties && node.properties.dataDisplay && ["editor", "selected", "not-selected"].includes( node.properties.dataDisplay, ) ); }); // Delete the dataDisplay attribute if (node.properties.dataDisplay) { delete node.properties.dataDisplay; } }); } } }