shell bypass 403
export default (editor, config = {}) => {
const domc = editor.DomComponents;
const defaultType = domc.getType('default');
const defaultModel = defaultType.model;
const defaultView = defaultType.view;
// Update image component toolbar
const typeImage = domc.getType('image').model;
domc.addType('image', {
model: {
initToolbar() {
typeImage.prototype.initToolbar.apply(this, arguments);
const tb = this.get('toolbar');
const tbExists = tb.some(item => item.command === 'open-assets');
if (!tbExists) {
tb.unshift({
command: editor => editor.runCommand('open-assets', {
target: editor.getSelected(),
}),
label: `<i class="fas fa-images"></i>`,
});
this.set('toolbar', tb);
}
}
}
});
// Update image component toolbar
const typeDefault = domc.getType('default').model;
//Define a new icon component
domc.addType('icon-component', {
isComponent: function(el) {
var result = '';
if(el.tagName == 'I'){
result = {type: 'icon-component'};
}
return result;
},
model: {
initToolbar() {
typeDefault.prototype.initToolbar.apply(this, arguments);
const tb = this.get('toolbar');
const tbExists = tb.some(item => item.attributes.name == 'open-icons-modal');
if (!tbExists) {
tb.unshift({
command: editor => editor.runCommand('open-icons-modal'),
attributes: {class: "fas fa-pen", name: 'open-icons-modal'},
});
this.set('toolbar', tb);
}
}
}
});
editor.AssetManager.addType('image', {
view: {
onRemove(e) {
e.stopPropagation();
const model = this.model;
confirm('Are you sure?') && model.collection.remove(model);
}
},
});
// Init component PayPal button
const getProducts = function(){
var products = [{"value":1,"name":"Product A"},{"value":2,"name":"Product B"},{"value":3,"name":"312312"},{"value":4,"name":"213"}];
if (window.config.url_get_products)
{
var url = window.config.url_get_products;
var res = new XMLHttpRequest();
res.open("GET", url, false);
res.send(null);
if (res.status == 200) {
products = JSON.parse(res.response);
}
}
return products;
}
// Define a new custom component
editor.Components.addType('paypal-button', {
isComponent: function(el) {
var result = '';
if(el.tagName == 'BUTTON' && el.className == 'builder-paypal-button' ){
result = {type: 'paypal-button'};
}
return result;
},
model: {
defaults: {
tagName: 'button',
attributes: { class: 'builder-paypal-button', type: 'button'},
productid: '',
traits: [
{
type: 'select',
name: 'productid',
label: 'Select a Product',
changeProp: 0,
options: getProducts(),
}
],
//'script-props': ['productid'],
}
}
});
// Define a new custom component
editor.Components.addType('stripe-button', {
isComponent: function(el) {
var result = '';
if(el.tagName == 'BUTTON' && el.className == 'builder-stripe-button' ){
result = {type: 'stripe-button'};
}
return result;
},
model: {
defaults: {
tagName: 'button',
attributes: { class: 'builder-stripe-button', type: 'button'},
productid: '',
traits: [
{
type: 'select',
name: 'productid',
label: 'Select a Product',
changeProp: 0,
options: getProducts(),
}
],
//'script-props': ['productid'],
}
}
});
}