mirror of https://github.com/artf/grapesjs.git
6 changed files with 124 additions and 123 deletions
@ -1,107 +0,0 @@ |
|||
/** |
|||
* You can customize the initial state of the module from the editor initialization, by passing the following [Configuration Object](https://github.com/artf/grapesjs/blob/master/src/parser/config/config.js)
|
|||
* ```js
|
|||
* const editor = grapesjs.init({ |
|||
* parser: { |
|||
* // options
|
|||
* } |
|||
* }) |
|||
* ``` |
|||
* |
|||
* Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance |
|||
* |
|||
* ```js
|
|||
* const { Parser } = editor; |
|||
* ``` |
|||
* ## Available Events |
|||
* * `parse:html` - On HTML parse, an object containing the input and the output of the parser is passed as an argument |
|||
* * `parse:css` - On CSS parse, an object containing the input and the output of the parser is passed as an argument |
|||
* |
|||
* ## Methods |
|||
* * [getConfig](#getconfig) |
|||
* * [parseHtml](#parsehtml) |
|||
* * [parseCss](#parsecss) |
|||
* |
|||
* @module Parser |
|||
*/ |
|||
import defaults from './config/config'; |
|||
import parserCss from './model/ParserCss'; |
|||
import parserHtml from './model/ParserHtml'; |
|||
|
|||
export default () => { |
|||
let conf = {}; |
|||
let pHtml, pCss; |
|||
|
|||
return { |
|||
compTypes: '', |
|||
|
|||
parserCss: null, |
|||
|
|||
parserHtml: null, |
|||
|
|||
name: 'Parser', |
|||
|
|||
init(config = {}) { |
|||
conf = { ...defaults, ...config }; |
|||
conf.Parser = this; |
|||
pHtml = new parserHtml(conf); |
|||
pCss = new parserCss(conf); |
|||
this.em = conf.em; |
|||
this.parserCss = pCss; |
|||
this.parserHtml = pHtml; |
|||
return this; |
|||
}, |
|||
|
|||
/** |
|||
* Get the configuration object |
|||
* @returns {Object} Configuration object |
|||
* @example |
|||
* console.log(Parser.getConfig()) |
|||
*/ |
|||
getConfig() { |
|||
return conf; |
|||
}, |
|||
|
|||
/** |
|||
* Parse HTML string and return the object containing the Component Definition |
|||
* @param {String} input HTML string to parse |
|||
* @param {Object} [options] Options |
|||
* @param {String} [options.htmlType] [HTML mime type](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02) to parse
|
|||
* @param {Boolean} [options.allowScripts=false] Allow `<script>` tags |
|||
* @param {Boolean} [options.allowUnsafeAttr=false] Allow unsafe HTML attributes (eg. `on*` inline event handlers) |
|||
* @returns {Object} Object containing the result `{ html: ..., css: ... }` |
|||
* @example |
|||
* const resHtml = Parser.parseHtml(`<table><div>Hi</div></table>`, { |
|||
* htmlType: 'text/html', // default
|
|||
* }); |
|||
* // By using the `text/html`, this will fix automatically all the HTML syntax issues
|
|||
* // Indeed the final representation, in this case, will be `<div>Hi</div><table></table>`
|
|||
* const resXml = Parser.parseHtml(`<table><div>Hi</div></table>`, { |
|||
* htmlType: 'application/xml', |
|||
* }); |
|||
* // This will preserve the original format as, from the XML point of view, is a valid format
|
|||
*/ |
|||
parseHtml(input, options = {}) { |
|||
const { em, compTypes } = this; |
|||
pHtml.compTypes = em ? em.get('DomComponents').getTypes() : compTypes; |
|||
return pHtml.parse(input, pCss, options); |
|||
}, |
|||
|
|||
/** |
|||
* Parse CSS string and return an array of valid definition objects for CSSRules |
|||
* @param {String} input CSS string to parse |
|||
* @returns {Array<Object>} Array containing the result |
|||
* @example |
|||
* const res = Parser.parseCss('.cls { color: red }'); |
|||
* // [{ ... }]
|
|||
*/ |
|||
parseCss(input) { |
|||
return pCss.parse(input); |
|||
}, |
|||
|
|||
destroy() { |
|||
[conf, pHtml, pCss].forEach(i => (i = {})); |
|||
['em', 'parserCss', 'parserHtml'].forEach(i => (this[i] = {})); |
|||
}, |
|||
}; |
|||
}; |
|||
@ -0,0 +1,92 @@ |
|||
/** |
|||
* You can customize the initial state of the module from the editor initialization, by passing the following [Configuration Object](https://github.com/artf/grapesjs/blob/master/src/parser/config/config.js)
|
|||
* ```js
|
|||
* const editor = grapesjs.init({ |
|||
* parser: { |
|||
* // options
|
|||
* } |
|||
* }) |
|||
* ``` |
|||
* |
|||
* Once the editor is instantiated you can use its API. Before using these methods you should get the module from the instance |
|||
* |
|||
* ```js
|
|||
* const { Parser } = editor; |
|||
* ``` |
|||
* ## Available Events |
|||
* * `parse:html` - On HTML parse, an object containing the input and the output of the parser is passed as an argument |
|||
* * `parse:css` - On CSS parse, an object containing the input and the output of the parser is passed as an argument |
|||
* |
|||
* ## Methods |
|||
* * [getConfig](#getconfig) |
|||
* * [parseHtml](#parsehtml) |
|||
* * [parseCss](#parsecss) |
|||
* |
|||
* @module Parser |
|||
*/ |
|||
import { Module } from '../abstract'; |
|||
import EditorModel from '../editor/model/Editor'; |
|||
import defaults, { ParserConfig } from './config/config'; |
|||
import parserCss from './model/ParserCss'; |
|||
import parserHtml from './model/ParserHtml'; |
|||
|
|||
export default class ParserModule extends Module<ParserConfig & { name?: string }> { |
|||
parserHtml: ReturnType<typeof parserHtml>; |
|||
parserCss: ReturnType<typeof parserCss>; |
|||
|
|||
constructor(em: EditorModel) { |
|||
super(em, 'Parser', defaults); |
|||
const { config } = this; |
|||
this.parserCss = parserCss(em, config); |
|||
this.parserHtml = parserHtml(em, config); |
|||
} |
|||
|
|||
/** |
|||
* Get the configuration object |
|||
* @returns {Object} Configuration object |
|||
* @example |
|||
* console.log(Parser.getConfig()) |
|||
*/ |
|||
getConfig() { |
|||
return this.config; |
|||
} |
|||
|
|||
/** |
|||
* Parse HTML string and return the object containing the Component Definition |
|||
* @param {String} input HTML string to parse |
|||
* @param {Object} [options] Options |
|||
* @param {String} [options.htmlType] [HTML mime type](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02) to parse
|
|||
* @param {Boolean} [options.allowScripts=false] Allow `<script>` tags |
|||
* @param {Boolean} [options.allowUnsafeAttr=false] Allow unsafe HTML attributes (eg. `on*` inline event handlers) |
|||
* @returns {Object} Object containing the result `{ html: ..., css: ... }` |
|||
* @example |
|||
* const resHtml = Parser.parseHtml(`<table><div>Hi</div></table>`, { |
|||
* htmlType: 'text/html', // default
|
|||
* }); |
|||
* // By using the `text/html`, this will fix automatically all the HTML syntax issues
|
|||
* // Indeed the final representation, in this case, will be `<div>Hi</div><table></table>`
|
|||
* const resXml = Parser.parseHtml(`<table><div>Hi</div></table>`, { |
|||
* htmlType: 'application/xml', |
|||
* }); |
|||
* // This will preserve the original format as, from the XML point of view, is a valid format
|
|||
*/ |
|||
parseHtml(input: string, options = {}) { |
|||
const { em, parserHtml } = this; |
|||
parserHtml.compTypes = (em.Components.getTypes() || {}) as any; |
|||
return parserHtml.parse(input, this.parserCss, options); |
|||
} |
|||
|
|||
/** |
|||
* Parse CSS string and return an array of valid definition objects for CSSRules |
|||
* @param {String} input CSS string to parse |
|||
* @returns {Array<Object>} Array containing the result |
|||
* @example |
|||
* const res = Parser.parseCss('.cls { color: red }'); |
|||
* // [{ ... }]
|
|||
*/ |
|||
parseCss(input: string) { |
|||
return this.parserCss.parse(input); |
|||
} |
|||
|
|||
destroy() {} |
|||
} |
|||
Loading…
Reference in new issue