|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>GrapesJS Example</title> |
|
|
|
<link rel="stylesheet" href="https://unpkg.com/grapesjs/dist/css/grapes.min.css"> |
|
</head> |
|
<body> |
|
<div id="gjs"></div> |
|
|
|
|
|
<script src="https://unpkg.com/grapesjs"></script> |
|
|
|
<script> |
|
const editor = grapesjs.init({ |
|
container: '#gjs', |
|
fromElement: true, |
|
height: '100vh', |
|
storageManager: { type: 0 }, |
|
plugins: [], |
|
pluginsOpts: {}, |
|
selectorManager: { |
|
componentFirst: true, |
|
}, |
|
styleManager: { |
|
sectors: [ |
|
{ |
|
name: 'Layout', |
|
properties: [ |
|
{ |
|
type: 'integer', |
|
name: 'width', |
|
units: ['px', '%'], |
|
defaults: 'auto', |
|
min: 0, |
|
}, |
|
{ |
|
type: 'integer', |
|
name: 'height', |
|
units: ['px', '%'], |
|
defaults: 'auto', |
|
min: 0, |
|
}, |
|
{ |
|
type: 'integer', |
|
name: 'margin', |
|
units: ['px', '%'], |
|
defaults: '0', |
|
}, |
|
{ |
|
type: 'integer', |
|
name: 'padding', |
|
units: ['px', '%'], |
|
defaults: '10px', |
|
}, |
|
], |
|
}, |
|
{ |
|
name: 'Decorations', |
|
properties: [ |
|
{ |
|
type: 'color', |
|
name: 'background-color', |
|
defaults: '#f0f0f0', |
|
}, |
|
{ |
|
type: 'integer', |
|
name: 'border-width', |
|
units: ['px'], |
|
defaults: '1px', |
|
}, |
|
{ |
|
type: 'color', |
|
name: 'border-color', |
|
defaults: '#ccc', |
|
}, |
|
], |
|
}, |
|
{ |
|
name: 'Flex', |
|
properties: [ |
|
{ |
|
type: 'select', |
|
name: 'flex-direction', |
|
defaults: 'row', |
|
options: [ |
|
{ value: 'row', name: 'Row' }, |
|
{ value: 'column', name: 'Column' }, |
|
], |
|
}, |
|
{ |
|
type: 'select', |
|
name: 'justify-content', |
|
defaults: 'space-between', |
|
options: [ |
|
{ value: 'flex-start', name: 'Flex Start' }, |
|
{ value: 'flex-end', name: 'Flex End' }, |
|
{ value: 'center', name: 'Center' }, |
|
{ value: 'space-between', name: 'Space Between' }, |
|
{ value: 'space-around', name: 'Space Around' }, |
|
], |
|
}, |
|
], |
|
}, |
|
], |
|
}, |
|
}); |
|
|
|
const domc = editor.DomComponents; |
|
const bm = editor.BlockManager; |
|
|
|
|
|
bm.add('horizontal-triple-block', { |
|
label: 'Horizontal Triple Block', |
|
content: ` |
|
<div style="display: flex; justify-content: space-between;"> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"> |
|
<div data-gjs-type="block-container"></div> |
|
</div> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"> |
|
<div data-gjs-type="block-container"></div> |
|
</div> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"> |
|
<div data-gjs-type="block-container"></div> |
|
</div> |
|
</div> |
|
`, |
|
}); |
|
|
|
|
|
domc.addType('block-container', { |
|
model: { |
|
defaults: { |
|
droppable: true, |
|
components: [], |
|
}, |
|
}, |
|
}); |
|
|
|
|
|
domc.addType('add-block-button', { |
|
model: { |
|
defaults: { |
|
components: ` |
|
<button onclick="addNewBlock()">Add New Block</button> |
|
`, |
|
attributes: { |
|
'data-gjs-type': 'add-block-button', |
|
}, |
|
}, |
|
}, |
|
}); |
|
|
|
|
|
window.addNewBlock = function() { |
|
const newBlock = ` |
|
<div style="display: flex; justify-content: space-between;"> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"></div> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"></div> |
|
<div style="flex: 1; margin: 5px; background-color: #f0f0f0; padding: 10px; border: 1px solid #ccc;"></div> |
|
</div> |
|
`; |
|
editor.addComponents(newBlock); |
|
}; |
|
|
|
|
|
bm.add('add-block-button', { |
|
label: 'Add Block Button', |
|
content: { |
|
type: 'add-block-button', |
|
}, |
|
}); |
|
</script> |
|
</body> |
|
</html> |