mirror of https://github.com/artf/grapesjs.git
2 changed files with 211 additions and 228 deletions
@ -1,228 +0,0 @@ |
|||
/** |
|||
* - [addGenerator](#addgenerator) |
|||
* - [getGenerator](#getgenerator) |
|||
* - [getGenerators](#getgenerators) |
|||
* - [addViewer](#addviewer) |
|||
* - [getViewer](#getviewer) |
|||
* - [getViewers](#getviewers) |
|||
* - [updateViewer](#updateviewer) |
|||
* - [getCode](#getcode) |
|||
* |
|||
* |
|||
* Before using methods you should get first the module from the editor instance, in this way: |
|||
* |
|||
* ```js
|
|||
* var codeManager = editor.CodeManager; |
|||
* ``` |
|||
* |
|||
* @module CodeManager |
|||
*/ |
|||
import { isUndefined } from 'underscore'; |
|||
import defaults from './config/config'; |
|||
import gHtml from './model/HtmlGenerator'; |
|||
import gCss from './model/CssGenerator'; |
|||
import gJson from './model/JsonGenerator'; |
|||
import gJs from './model/JsGenerator'; |
|||
import eCM from './model/CodeMirrorEditor'; |
|||
import editorView from './view/EditorView'; |
|||
|
|||
export default () => { |
|||
var c = {}; |
|||
var generators = {}, |
|||
defGenerators = {}, |
|||
viewers = {}, |
|||
defViewers = {}; |
|||
|
|||
const defaultViewer = 'CodeMirror'; |
|||
|
|||
return { |
|||
getConfig() { |
|||
return c; |
|||
}, |
|||
|
|||
config: c, |
|||
|
|||
EditorView: editorView, |
|||
|
|||
/** |
|||
* Name of the module |
|||
* @type {String} |
|||
* @private |
|||
*/ |
|||
name: 'CodeManager', |
|||
|
|||
/** |
|||
* Initialize module. Automatically called with a new instance of the editor |
|||
* @param {Object} config Configurations |
|||
*/ |
|||
init(config) { |
|||
c = config || {}; |
|||
for (var name in defaults) { |
|||
if (!(name in c)) c[name] = defaults[name]; |
|||
} |
|||
|
|||
var ppfx = c.pStylePrefix; |
|||
if (ppfx) c.stylePrefix = ppfx + c.stylePrefix; |
|||
|
|||
defGenerators.html = new gHtml(); |
|||
defGenerators.css = new gCss(); |
|||
defGenerators.json = new gJson(); |
|||
defGenerators.js = new gJs(); |
|||
defViewers.CodeMirror = new eCM(); |
|||
this.loadDefaultGenerators().loadDefaultViewers(); |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
/** |
|||
* Add new code generator to the collection |
|||
* @param {string} id Code generator ID |
|||
* @param {Object} generator Code generator wrapper |
|||
* @param {Function} generator.build Function that builds the code |
|||
* @return {this} |
|||
* @example |
|||
* codeManager.addGenerator('html7',{ |
|||
* build: function(model){ |
|||
* return 'myCode'; |
|||
* } |
|||
* }); |
|||
* */ |
|||
addGenerator(id, generator) { |
|||
generators[id] = generator; |
|||
return this; |
|||
}, |
|||
|
|||
/** |
|||
* Get code generator by id |
|||
* @param {string} id Code generator ID |
|||
* @return {Object|null} |
|||
* @example |
|||
* var generator = codeManager.getGenerator('html7'); |
|||
* generator.build = function(model){ |
|||
* //extend
|
|||
* }; |
|||
* */ |
|||
getGenerator(id) { |
|||
return generators[id] || null; |
|||
}, |
|||
|
|||
/** |
|||
* Returns all code generators |
|||
* @return {Array<Object>} |
|||
* */ |
|||
getGenerators() { |
|||
return generators; |
|||
}, |
|||
|
|||
/** |
|||
* Add new code viewer |
|||
* @param {string} id Code viewer ID |
|||
* @param {Object} viewer Code viewer wrapper |
|||
* @param {Function} viewer.init Set element on which viewer will be displayed |
|||
* @param {Function} viewer.setContent Set content to the viewer |
|||
* @return {this} |
|||
* @example |
|||
* codeManager.addViewer('ace',{ |
|||
* init: function(el){ |
|||
* var ace = require('ace-editor'); |
|||
* this.editor = ace.edit(el.id); |
|||
* }, |
|||
* setContent: function(code){ |
|||
* this.editor.setValue(code); |
|||
* } |
|||
* }); |
|||
* */ |
|||
addViewer(id, viewer) { |
|||
viewers[id] = viewer; |
|||
return this; |
|||
}, |
|||
|
|||
/** |
|||
* Get code viewer by id |
|||
* @param {string} id Code viewer ID |
|||
* @return {Object|null} |
|||
* @example |
|||
* var viewer = codeManager.getViewer('ace'); |
|||
* */ |
|||
getViewer(id) { |
|||
return viewers[id] || null; |
|||
}, |
|||
|
|||
/** |
|||
* Returns all code viewers |
|||
* @return {Array<Object>} |
|||
* */ |
|||
getViewers() { |
|||
return viewers; |
|||
}, |
|||
|
|||
createViewer(opts = {}) { |
|||
const type = !isUndefined(opts.type) ? opts.type : defaultViewer; |
|||
const viewer = this.getViewer(type) && this.getViewer(type).clone(); |
|||
const cont = document.createElement('div'); |
|||
const txtarea = document.createElement('textarea'); |
|||
cont.appendChild(txtarea); |
|||
viewer.set(opts); |
|||
viewer.init(txtarea); |
|||
viewer.setElement(cont); |
|||
|
|||
return viewer; |
|||
}, |
|||
|
|||
/** |
|||
* Update code viewer content |
|||
* @param {Object} viewer Viewer instance |
|||
* @param {string} code Code string |
|||
* @example |
|||
* var AceViewer = codeManager.getViewer('ace'); |
|||
* // ...
|
|||
* var viewer = AceViewer.init(el); |
|||
* // ...
|
|||
* codeManager.updateViewer(AceViewer, 'code'); |
|||
* */ |
|||
updateViewer(viewer, code) { |
|||
viewer.setContent(code); |
|||
}, |
|||
|
|||
/** |
|||
* Get code from model |
|||
* @param {Object} model Any kind of model that will be passed to the build method of generator |
|||
* @param {string} genId Code generator id |
|||
* @param {Object} [opt] Options |
|||
* @return {string} |
|||
* @example |
|||
* var codeStr = codeManager.getCode(model, 'html'); |
|||
* */ |
|||
getCode(model, genId, opt = {}) { |
|||
opt.em = c.em; |
|||
var generator = this.getGenerator(genId); |
|||
return generator ? generator.build(model, opt) : ''; |
|||
}, |
|||
|
|||
/** |
|||
* Load default code generators |
|||
* @return {this} |
|||
* @private |
|||
* */ |
|||
loadDefaultGenerators() { |
|||
for (var id in defGenerators) this.addGenerator(id, defGenerators[id]); |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
/** |
|||
* Load default code viewers |
|||
* @return {this} |
|||
* @private |
|||
* */ |
|||
loadDefaultViewers() { |
|||
for (var id in defViewers) this.addViewer(id, defViewers[id]); |
|||
|
|||
return this; |
|||
}, |
|||
|
|||
destroy() { |
|||
[c, generators, defGenerators, viewers, defViewers].forEach(i => (i = {})); |
|||
}, |
|||
}; |
|||
}; |
|||
@ -0,0 +1,211 @@ |
|||
/** |
|||
* - [addGenerator](#addgenerator) |
|||
* - [getGenerator](#getgenerator) |
|||
* - [getGenerators](#getgenerators) |
|||
* - [addViewer](#addviewer) |
|||
* - [getViewer](#getviewer) |
|||
* - [getViewers](#getviewers) |
|||
* - [updateViewer](#updateviewer) |
|||
* - [getCode](#getcode) |
|||
* |
|||
* |
|||
* Before using methods you should get first the module from the editor instance, in this way: |
|||
* |
|||
* ```js
|
|||
* var codeManager = editor.CodeManager; |
|||
* ``` |
|||
* |
|||
* @module CodeManager |
|||
*/ |
|||
import { isUndefined } from 'underscore'; |
|||
import defaults, { CodeManagerConfig } from './config/config'; |
|||
import gHtml from './model/HtmlGenerator'; |
|||
import gCss from './model/CssGenerator'; |
|||
import gJson from './model/JsonGenerator'; |
|||
import gJs from './model/JsGenerator'; |
|||
import eCM from './model/CodeMirrorEditor'; |
|||
import editorView from './view/EditorView'; |
|||
import { Module } from '../abstract'; |
|||
import EditorModel from '../editor/model/Editor'; |
|||
|
|||
const defaultViewer = 'CodeMirror'; |
|||
|
|||
export default class CodeManagerModule extends Module<CodeManagerConfig & { pStylePrefix?: string }> { |
|||
defGenerators: Record<string, any>; |
|||
defViewers: Record<string, any>; |
|||
generators: Record<string, any>; |
|||
viewers: Record<string, any>; |
|||
|
|||
EditorView = editorView; |
|||
|
|||
constructor(em: EditorModel) { |
|||
super(em, 'CodeManager', defaults); |
|||
const { config } = this; |
|||
const ppfx = config.pStylePrefix; |
|||
if (ppfx) config.stylePrefix = ppfx + config.stylePrefix; |
|||
|
|||
this.generators = {}; |
|||
this.viewers = {}; |
|||
this.defGenerators = { |
|||
html: new gHtml(), |
|||
css: new gCss(), |
|||
json: new gJson(), |
|||
js: new gJs(), |
|||
}; |
|||
this.defViewers = { CodeMirror: new eCM() }; |
|||
this.loadDefaultGenerators().loadDefaultViewers(); |
|||
} |
|||
|
|||
/** |
|||
* Add new code generator to the collection |
|||
* @param {string} id Code generator ID |
|||
* @param {Object} generator Code generator wrapper |
|||
* @param {Function} generator.build Function that builds the code |
|||
* @return {this} |
|||
* @example |
|||
* codeManager.addGenerator('html7',{ |
|||
* build: function(model){ |
|||
* return 'myCode'; |
|||
* } |
|||
* }); |
|||
* */ |
|||
addGenerator(id: string, generator: any) { |
|||
this.generators[id] = generator; |
|||
return this; |
|||
} |
|||
|
|||
/** |
|||
* Get code generator by id |
|||
* @param {string} id Code generator ID |
|||
* @return {Object|null} |
|||
* @example |
|||
* var generator = codeManager.getGenerator('html7'); |
|||
* generator.build = function(model){ |
|||
* //extend
|
|||
* }; |
|||
* */ |
|||
getGenerator(id: string) { |
|||
return this.generators[id]; |
|||
} |
|||
|
|||
/** |
|||
* Returns all code generators |
|||
* @return {Array<Object>} |
|||
* */ |
|||
getGenerators() { |
|||
return this.generators; |
|||
} |
|||
|
|||
/** |
|||
* Add new code viewer |
|||
* @param {string} id Code viewer ID |
|||
* @param {Object} viewer Code viewer wrapper |
|||
* @param {Function} viewer.init Set element on which viewer will be displayed |
|||
* @param {Function} viewer.setContent Set content to the viewer |
|||
* @return {this} |
|||
* @example |
|||
* codeManager.addViewer('ace',{ |
|||
* init: function(el){ |
|||
* var ace = require('ace-editor'); |
|||
* this.editor = ace.edit(el.id); |
|||
* }, |
|||
* setContent: function(code){ |
|||
* this.editor.setValue(code); |
|||
* } |
|||
* }); |
|||
* */ |
|||
addViewer(id: string, viewer: any) { |
|||
this.viewers[id] = viewer; |
|||
return this; |
|||
} |
|||
|
|||
/** |
|||
* Get code viewer by id |
|||
* @param {string} id Code viewer ID |
|||
* @return {Object|null} |
|||
* @example |
|||
* var viewer = codeManager.getViewer('ace'); |
|||
* */ |
|||
getViewer(id: string) { |
|||
return this.viewers[id]; |
|||
} |
|||
|
|||
/** |
|||
* Returns all code viewers |
|||
* @return {Array<Object>} |
|||
* */ |
|||
getViewers() { |
|||
return this.viewers; |
|||
} |
|||
|
|||
createViewer(opts: any = {}) { |
|||
const type = !isUndefined(opts.type) ? opts.type : defaultViewer; |
|||
const viewer = this.getViewer(type) && this.getViewer(type).clone(); |
|||
const cont = document.createElement('div'); |
|||
const txtarea = document.createElement('textarea'); |
|||
cont.appendChild(txtarea); |
|||
viewer.set(opts); |
|||
viewer.init(txtarea); |
|||
viewer.setElement(cont); |
|||
|
|||
return viewer; |
|||
} |
|||
|
|||
/** |
|||
* Update code viewer content |
|||
* @param {Object} viewer Viewer instance |
|||
* @param {string} code Code string |
|||
* @example |
|||
* var AceViewer = codeManager.getViewer('ace'); |
|||
* // ...
|
|||
* var viewer = AceViewer.init(el); |
|||
* // ...
|
|||
* codeManager.updateViewer(AceViewer, 'code'); |
|||
* */ |
|||
updateViewer(viewer: any, code: string) { |
|||
viewer.setContent(code); |
|||
} |
|||
|
|||
/** |
|||
* Get code from model |
|||
* @param {Object} model Any kind of model that will be passed to the build method of generator |
|||
* @param {string} genId Code generator id |
|||
* @param {Object} [opt] Options |
|||
* @return {string} |
|||
* @example |
|||
* var codeStr = codeManager.getCode(model, 'html'); |
|||
* */ |
|||
getCode(model: any, genId: string, opt: any = {}) { |
|||
opt.em = this.em; |
|||
const generator = this.getGenerator(genId); |
|||
return generator ? generator.build(model, opt) : ''; |
|||
} |
|||
|
|||
/** |
|||
* Load default code generators |
|||
* @return {this} |
|||
* @private |
|||
* */ |
|||
loadDefaultGenerators() { |
|||
for (const id in this.defGenerators) { |
|||
this.addGenerator(id, this.defGenerators[id]); |
|||
} |
|||
|
|||
return this; |
|||
} |
|||
|
|||
/** |
|||
* Load default code viewers |
|||
* @return {this} |
|||
* @private |
|||
* */ |
|||
loadDefaultViewers() { |
|||
for (const id in this.defViewers) { |
|||
this.addViewer(id, this.defViewers[id]); |
|||
} |
|||
|
|||
return this; |
|||
} |
|||
|
|||
destroy() {} |
|||
} |
|||
Loading…
Reference in new issue