Skip to content

Instantly share code, notes, and snippets.

@shak18
Created August 1, 2019 13:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save shak18/412a35abcac07b75159793eeb7b26d52 to your computer and use it in GitHub Desktop.
Save shak18/412a35abcac07b75159793eeb7b26d52 to your computer and use it in GitHub Desktop.
Addon for VVVEB if you rely on bulma for your web site
//Develop for ES6 usage if youree going to use it on ES5 just remove the imports and change the usages of Inputs.TextInput to TextInput and so on with the rest
import {Vvveb} from './builder'
import * as Inputs from './inputs'
var bgcolorClasses = ["is-primary", "is-success", "is-danger", "is-warning", "is-info", "is-light", "is-dark", "is-facebook", "is-twitter", "is-white", "is-black"]
var bgcolorSelectOptions =
[{
value: "Default",
text: ""
},
{
value: "is-primary",
text: "Primary"
}, {
value: "is-success",
text: "Success"
}, {
value: "is-danger",
text: "Danger"
}, {
value: "is-warning",
text: "Warning"
}, {
value: "is-info",
text: "Info"
}, {
value: "is-facebook",
text: "Facebook"
}, {
value: "is-twitter",
text: "Twitter"
}, {
value: "is-light",
text: "Light"
}, {
value: "is-dark",
text: "Dark"
}, {
value: "is-white",
text: "White"
}, {
value: "is-black",
text: "Black"
}];
function changeNodeName(node, newNodeName)
{
var newNode;
newNode = document.createElement(newNodeName);
var attributes = node.get(0).attributes;
for (i = 0, len = attributes.length; i < len; i++) {
newNode.setAttribute(attributes[i].nodeName, attributes[i].nodeValue);
}
$(newNode).append($(node).contents());
$(node).replaceWith(newNode);
return newNode;
}
Vvveb.ComponentsGroup['Bulma'] =
["html/container", "html/box", "html/gridrow", "html/gridcolumn", "html/heading", "html/image", "html/jumbotron", "html/section", "html/alert", "html/card", "html/cardtext", "html/button", "html/buttongroup", "html/listgroup", "html/hr", "html/taglabel", "html/badge", "html/progress", "html/navbar", "html/navbaritem", "html/navbardivider", "html/navbarmenu", "html/breadcrumbs", "html/pagination", "html/form", "html/textinput", "html/textareainput", "html/selectinput", "html/fileinput", "html/checkbox", "html/radiobutton", "html/table", "html/paragraph", "html/link", "html/video"];
var base_sort = 100;//start sorting for base component from 100 to allow extended properties to be first
var style_section = 'style';
Vvveb.Components.add("_base", {
name: "Elemento",
properties: [{
key: "element_header",
inputtype: Inputs.SectionInput,
name:false,
sort:base_sort++,
data: {header:"General"},
}, {
name: "Id",
key: "id",
htmlAttr: "id",
sort: base_sort++,
inline:true,
col:6,
inputtype: Inputs.TextInput
}, {
name: "Clase",
key: "class",
htmlAttr: "class",
sort: base_sort++,
inline:true,
col:6,
inputtype: Inputs.TextInput
}
]
});
//display
Vvveb.Components.extend("_base", "_base", {
properties: [
{
key: "display_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Display"},
}, {
name: "Display",
key: "display",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
validValues: ["block", "inline", "inline-block", "none"],
data: {
options: [{
value: "block",
text: "Block"
}, {
value: "inline",
text: "Inline"
}, {
value: "inline-block",
text: "Inline Block"
}, {
value: "none",
text: "none"
}]
}
}, {
name: "Posicion",
key: "position",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
validValues: ["static", "fixed", "relative", "absolute"],
data: {
options: [{
value: "static",
text: "Static"
}, {
value: "fixed",
text: "Fixed"
}, {
value: "relative",
text: "Relative"
}, {
value: "absolute",
text: "Absolute"
}]
}
}, {
name: "Arriba",
key: "top",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
parent:"",
inputtype: Inputs.CssUnitInput
}, {
name: "Izquierda",
key: "left",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
parent:"",
inputtype: Inputs.CssUnitInput
}, {
name: "Abajo",
key: "bottom",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
parent:"",
inputtype: Inputs.CssUnitInput
}, {
name: "Derecha",
key: "right",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
parent:"",
inputtype: Inputs.CssUnitInput
},{
name: "Flotante",
key: "float",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:12,
inline:true,
inputtype: Inputs.RadioButtonInput,
data: {
extraclass:"btn-group-sm btn-group-fullwidth",
options: [{
value: "none",
icon:"la la-close",
//text: "None",
title: "Ninguno",
checked:true,
}, {
value: "left",
//text: "Left",
title: "Izquierda",
icon:"la la-align-left",
checked:false,
}, {
value: "right",
//text: "Right",
title: "Derecha",
icon:"la la-align-right",
checked:false,
}],
}
}, {
name: "Opacidad",
key: "opacity",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:12,
inline:true,
parent:"",
inputtype: Inputs.RangeInput,
data:{
max: 1, //max zoom level
min:0,
step:0.1
},
}, {
name: "Color de Background",
key: "background-color",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
htmlAttr: "style",
inputtype: Inputs.ColorInput,
}, {
name: "Color de Texto",
key: "color",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
htmlAttr: "style",
inputtype: Inputs.ColorInput,
}]
});
//Typography
Vvveb.Components.extend("_base", "_base", {
properties: [
{
key: "typography_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Tipografía"},
}, {
name: "Fuente de texto",
key: "font-family",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "Panton",
text: "Panton"
}, {
value: 'Lucida Sans Unicode", "Lucida Grande", sans-serif',
text: 'Lucida Grande'
}, {
value: "Arial, Helvetica, sans-serif",
text: "Arial"
}, {
value: '"Times New Roman", Times, serif',
text: 'Times New Roman'
}, {
value: "Georgia, serif",
text: "Georgia, serif"
}, {
value: "Tahoma, Geneva, sans-serif",
text: "Tahoma"
}, {
value: 'Verdana, Geneva, sans-serif',
text: 'Verdana'
}, {
value: 'Arial Black, Gadget, sans-serif',
text: 'Arial Black'
}, {
value: 'Trebuchet MS, Helvetica, sans-serif',
text: 'Trebuchet'
}]
}
}, {
name: "Grosor del Texto",
key: "font-weight",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "300",
text: "Delgado"
}, {
value: "400",
text: "Normal"
}, {
value: "500",
text: "Medio"
}, {
value: "600",
text: "Semi-Bold"
}, {
value: "700",
text: "Bold"
}, {
value: "800",
text: "Extra-Bold"
}, {
value: "900",
text: "Ultra-Bold"
}],
}
}, {
name: "Alineado del texto",
key: "text-align",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:12,
inline:true,
inputtype: Inputs.RadioButtonInput,
data: {
extraclass:"is-fullwidth",
options: [{
value: "none",
icon:"la la-close",
//text: "None",
title: "Ninguno",
checked:true,
}, {
value: "left",
//text: "Left",
title: "Izquierda",
icon:"la la-align-left",
checked:false,
}, {
value: "center",
//text: "Center",
title: "Centrado",
icon:"la la-align-center",
checked:false,
}, {
value: "right",
//text: "Right",
title: "Derecha",
icon:"la la-align-right",
checked:false,
}, {
value: "justify",
//text: "justify",
title: "Justficado",
icon:"la la-align-justify",
checked:false,
}],
},
}, {
name: "Interlineado",
key: "line-height",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Espacio en letras",
key: "letter-spacing",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Decoración de texto",
key: "text-decoration-line",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:12,
inline:true,
inputtype: Inputs.RadioButtonInput,
data: {
extraclass:"is-fullwidth",
options: [{
value: "none",
icon:"la la-close",
//text: "None",
title: "Niguna",
checked:true,
}, {
value: "underline",
//text: "Left",
title: "Subrayado",
icon:"la la-long-arrow-down",
checked:false,
}, {
value: "overline",
//text: "Right",
title: "Sobrerayado",
icon:"la la-long-arrow-up",
checked:false,
}, {
value: "line-through",
//text: "Right",
title: "Tachado",
icon:"la la-strikethrough",
checked:false,
}, {
value: "underline overline",
//text: "justify",
title: "Entre lineas",
icon:"la la-arrows-v",
checked:false,
}],
},
}, {
name: "Color de Decoración",
key: "text-decoration-color",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
htmlAttr: "style",
inputtype: Inputs.ColorInput,
}, {
name: "Estilo de decoración",
key: "text-decoration-style",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "solid",
text: "Solido"
}, {
value: "wavy",
text: "Ondeado"
}, {
value: "dotted",
text: "Punteado"
}, {
value: "dashed",
text: "Punteado de linea"
}, {
value: "double",
text: "Doble"
}],
}
}]
})
//Size
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "size_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Tamaño", expanded:false},
}, {
name: "Ancho",
key: "width",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Alto",
key: "height",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Ancho minimo",
key: "min-width",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Alto minimo",
key: "min-height",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Ancho maximo",
key: "max-width",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Alto maximo",
key: "max-height",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}]
});
//Margin
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "margins_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Margenes", expanded:false},
}, {
name: "Arriba",
key: "margin-top",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Derecha",
key: "margin-right",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Abajo",
key: "margin-bottom",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Izquierda",
key: "margin-left",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}]
});
//Padding
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "paddings_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Relleno (padding)", expanded:false},
}, {
name: "Arriba",
key: "padding-top",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Derecha",
key: "padding-right",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Abajo",
key: "padding-bottom",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Izuierda",
key: "padding-left",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}]
});
//Border
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "border_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Bordes", expanded:false},
}, {
name: "Estilo",
key: "border-style",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:12,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "solid",
text: "Solido"
}, {
value: "dotted",
text: "Punteado"
}, {
value: "dashed",
text: "Punteado de linea"
}],
}
}, {
name: "Ancho",
key: "border-width",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Color",
key: "border-color",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
htmlAttr: "style",
inputtype: Inputs.ColorInput,
}]
});
//Border radius
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "border_radius_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Curva del borde", expanded:false},
}, {
name: "Arriba-Izquierda",
key: "border-top-left-radius",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Arriba-Derecha",
key: "border-top-right-radius",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Abajo-Izquierda",
key: "border-bottom-left-radius",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}, {
name: "Abajo-Derecha",
key: "border-bottom-right-radius",
htmlAttr: "style",
sort: base_sort++,
section: style_section,
col:6,
inline:true,
inputtype: Inputs.CssUnitInput
}]
});
//Background image
Vvveb.Components.extend("_base", "_base", {
properties: [{
key: "background_image_header",
inputtype: Inputs.SectionInput,
name:false,
sort: base_sort++,
section: style_section,
data: {header:"Imagen de Background", expanded:false},
},{
name: "Imagen",
key: "Image",
sort: base_sort++,
section: style_section,
//htmlAttr: "style",
inputtype: Inputs.ImageInput,
init: function(node) {
var image = $(node).css("background-image").replace(/^url\(['"]?(.+)['"]?\)/, '$1');
return image;
},
onChange: function(node, value) {
$(node).css('background-image', 'url(' + value + ')');
return node;
}
}, {
name: "Repetir",
key: "background-repeat",
sort: base_sort++,
section: style_section,
htmlAttr: "style",
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "repeat-x",
text: "repeat-x"
}, {
value: "repeat-y",
text: "repeat-y"
}, {
value: "no-repeat",
text: "no-repeat"
}],
}
}, {
name: "Tamaño",
key: "background-size",
sort: base_sort++,
section: style_section,
htmlAttr: "style",
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "contain",
text: "contain"
}, {
value: "cover",
text: "cover"
}],
}
}, {
name: "Posicion x",
key: "background-position-x",
sort: base_sort++,
section: style_section,
htmlAttr: "style",
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "center",
text: "centro"
}, {
value: "right",
text: "derecha"
}, {
value: "left",
text: "izquierda"
}],
}
}, {
name: "Posicion y",
key: "background-position-y",
sort: base_sort++,
section: style_section,
htmlAttr: "style",
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "center",
text: "centro"
}, {
value: "top",
text: "arriba"
}, {
value: "bottom",
text: "abajo"
}],
}
}]
});
Vvveb.Components.extend("_base", "html/container", {
classes: ["container"],
image: process.env.ASSET_PATH + "img/icons/container.svg",
html: `<div class="container" style="min-height:150px; font-family: 'Panton'">
<div class="m-5">Container</div>
</div>`,
name: "Contenedor",
properties: [
{
name: "Type",
key: "type",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["is-fluid", "is-fullhd", "is-widescreen"],
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-fluid",
text: "Fluido"
}, {
value: "is-fullhd",
text: "Fluido Full-HD"
}, {
value: "is-widescreen",
text: "Fluido WideScreen"
}]
}
},
{
name: "Background",
key: "background",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
},
{
name: "Color de Background",
key: "background-color",
htmlAttr: "style",
inputtype: Inputs.ColorInput,
},
{
name: "Color de texto",
key: "color",
htmlAttr: "style",
inputtype: Inputs.ColorInput,
}],
});
Vvveb.Components.extend("_base", "html/heading", {
image: process.env.ASSET_PATH + "img/icons/heading.svg",
name: "Cabecera",
nodes: ["h1", "h2","h3", "h4","h5","h6"],
html: "<h1>Cabecera</h1>",
properties: [
{
name: "Elemento",
key: "size",
inputtype: Inputs.SelectInput,
onChange: function(node, value) {
$(node).removeClass('is-1 is-2 is-3 is-4 is-5 is-6').addClass('is-' + value);
return changeNodeName(node, "h" + value);
},
init: function(node) {
var regex;
regex = /H(\d)/.exec(node.nodeName);
if (regex && regex[1]) {
return regex[1]
}
return 1
},
data:{
options: [{
value: "1",
text: "1"
}, {
value: "2",
text: "2"
}, {
value: "3",
text: "3"
}, {
value: "4",
text: "4"
}, {
value: "5",
text: "5"
}, {
value: "6",
text: "6"
}]
},
},{
name: "Tipo",
key: "type",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["title", "subtitle"],
data: {
options: [{
value: "title",
text: "Titulo"
}, {
value: "subtitle",
text: "Subtitulo"
}]
}
},{
name: "Alinear texto",
key: "text-align",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["", "has-text-left", "has-text-centered", "has-text-right", "has-text-justified"],
inputtype: Inputs.RadioButtonInput,
data: {
extraclass:"",
options: [{
value: "",
icon:"la la-close",
title: "None",
checked:true,
}, {
value: "Izquierda",
title: "has-text-left",
icon:"la la-align-left",
checked:false,
}, {
value: "has-text-centered",
title: "Centro",
icon:"la la-align-center",
checked:false,
}, {
value: "has-text-right",
title: "Derecha",
icon:"la la-align-right",
checked:false,
}, {
value: "has-text-justified",
title: "Justificado",
icon:"la la-align-justify",
checked:false,
}],
},
}]
});
Vvveb.Components.extend("_base", "html/link", {
nodes: ["a"],
name: "Link",
html: '<a href="#" class="d-inline-block"><span>Link</span></a>',
image: process.env.ASSET_PATH + "img/icons/link.svg",
properties: [{
name: "Url",
key: "href",
htmlAttr: "href",
inputtype: Inputs.LinkInput
}, {
name: "Abrir en",
key: "target",
htmlAttr: "target",
inputtype: Inputs.SelectInput,
validValues: ["_self", "_blank"],
data: {
options: [{
value: "_self",
text: "La misma pagina"
}, {
value: "_blank",
text: "Nueva página"
}]
}
}]
});
Vvveb.Components.extend("_base", "html/image", {
nodes: ["img"],
name: "Imagen",
html: '<figure class="image"><img src="' + process.env.ASSET_PATH + 'img/icons/image.svg" height="128" width="128"></figure>',
init(node) {
var actions = [
{
title: 'Seleccionar imagen',
icon: 'check_circle',
onClick: (item) => {
console.log(node)
if(!! item.ruta && !! node) {
node.src = item.ruta;
}
window.vueApp.bus.$emit('image-selector-close', actions);
}
}
];
window.vueApp.bus.$emit('image-selector-open', actions);
},
image: process.env.ASSET_PATH + "img/icons/image.svg",
properties: [{
name: "Imagen",
key: "src",
htmlAttr: "src",
inputtype: Inputs.ImageInput
}, {
name: "Ancho",
key: "width",
htmlAttr: "width",
inputtype: Inputs.TextInput
}, {
name: "Alto",
key: "height",
htmlAttr: "height",
inputtype: Inputs.TextInput
}, {
name: "Descripcion",
key: "alt",
htmlAttr: "alt",
inputtype: Inputs.TextInput
}]
});
Vvveb.Components.add("html/hr", {
image: process.env.ASSET_PATH + "img/icons/hr.svg",
nodes: ["hr"],
name: "Linea Horizontal",
html: "<hr>"
});
Vvveb.Components.extend("_base", "html/label", {
name: "Label",
nodes: ["label"],
html: '<label for="">Label</label>',
properties: [{
name: "Para el Id",
htmlAttr: "for",
key: "for",
inputtype: Inputs.TextInput
}]
});
Vvveb.Components.extend("_base", "html/button", {
classes: ["button"],
name: "Botón",
image: process.env.ASSET_PATH + "img/icons/button.svg",
html: '<button type="button" class="button">Default</button>',
properties: [{
name: "Url",
key: "href",
htmlAttr: "href",
inputtype: Inputs.LinkInput
}, {
name: "Abrir en...",
key: "target",
htmlAttr: "target",
inputtype: Inputs.SelectInput,
validValues: ["_self", "_blank"],
data: {
options: [{
value: "_self",
text: "La misma pagina"
}, {
value: "_blank",
text: "Nueva página"
}]
}
}, {
name: "Coloración",
key: "type",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: bgcolorClasses,
data: {
options: bgcolorSelectOptions
}
}, {
name: "Tamaño",
key: "size",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ['is-small', 'is-normal', 'is-medium', 'is-large'],
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-small",
text: "small"
}, {
value: "is-normal",
text: "normal"
}, {
value: "is-medium",
text: "medium"
}, {
value: "is-large",
text: "Large"
}]
}
}, {
name: "Alargado",
key: "fullwidth",
htmlAttr: "class",
inputtype: Inputs.ToggleInput,
validValues: ["is-fullwidth"],
data: {
on: "is-fullwidth",
off: ""
}
}, {
name: "Contorneado",
key: "outlined",
htmlAttr: "class",
inputtype: Inputs.ToggleInput,
validValues: ["is-outlined"],
data: {
on: "is-outlined",
off: ""
}
}, {
name: "Invertido",
key: "inverted",
htmlAttr: "class",
inputtype: Inputs.ToggleInput,
validValues: ["is-inverted"],
data: {
on: "is-inverted",
off: ""
}
}, {
name: "Redondeado",
key: "rounded",
htmlAttr: "class",
inputtype: Inputs.ToggleInput,
validValues: ["is-rounded"],
data: {
on: "is-rounded",
off: ""
}
}, {
name: "Deshabilitar",
key: "disabled",
htmlAttr: "class",
inputtype: Inputs.ToggleInput,
validValues: ["disabled"],
data: {
on: "disabled",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/buttongroup", {
classes: ["buttons","has-addons"],
name: "Grupo de botones",
image: process.env.ASSET_PATH + "img/icons/button_group.svg",
html: ` <div class="buttons has-addons">
<a class="button">
<span>Izquierda</span>
</a>
<a class="button">
<span>Centro</span>
</a>
<a class="button">
<span>Derecha</span>
</a>
</div>`,
properties: [{
name: "Posición del grupo",
key: "size",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["is-center", "is-right"],
data: {
options: [{
value: "",
text: "Default (Izquierda)"
}, {
value: "is-centered",
text: "Centrado"
}, {
value: "is-right",
text: "Derecha"
}]
}
}]
});
Vvveb.Components.extend("_base","html/alert", {
classes: ["notification"],
name: "Notificación",
image: process.env.ASSET_PATH + "img/icons/alert.svg",
html: ` <div class="notification">
<button class="delete" onclick="this.parent().remove()"></button>
Lorem ipsum dolor sit amet, consectetur
adipiscing elit lorem ipsum dolor. <strong>Pellentesque risus mi</strong>, tempus quis placerat ut, porta nec nulla. Vestibulum rhoncus ac ex sit amet fringilla. Nullam gravida purus diam, et dictum <a>felis venenatis</a> efficitur. Sit amet,
consectetur adipiscing elit
</div>`,
properties: [{
name: "Tipo/Coloración",
key: "type",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}]
});
Vvveb.Components.extend("_base", "html/badge", {
classes: ["tag"],
image: process.env.ASSET_PATH + "img/icons/badge.svg",
name: "Tag",
html: '<span class="tag is-primary">Tag primario</span>',
properties: [{
name: "Coloración",
key: "color",
htmlAttr: "class",
validValues:bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}]
});
Vvveb.Components.extend("_base", "html/card", {
classes: ["card"],
image: process.env.ASSET_PATH + "img/icons/panel.svg",
name: "Card (Con imagen)",
html: ` <div class="card">
<div class="card-image">
<figure class="image is-4by3">
<img src="${process.env.ASSET_PATH}img/icons/image.svg" alt="Placeholder image">
</figure>
</div>
<div class="card-content">
<div class="media">
<div class="media-left">
<figure class="image is-48x48">
<img src="https://bulma.io/images/placeholders/96x96.png" alt="Placeholder image">
</figure>
</div>
<div class="media-content">
<p class="title is-4">John Smith</p>
<p class="subtitle is-6">@johnsmith</p>
</div>
</div>
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus nec iaculis mauris. <a>@bulmaio</a>.
<a href="#">#css</a> <a href="#">#responsive</a>
<br>
<time datetime="2016-1-1">11:09 PM - 1 Jan 2016</time>
</div>
</div>
</div>`
});
Vvveb.Components.extend("_base", "html/cardtext", {
classes: ["card"],
image: process.env.ASSET_PATH + "img/icons/panel.svg",
name: "Card (Header & Footer)",
html: ` <div class="card">
<div class="card-header">
<p class="card-header-title">
Header
</p>
</div>
<div class="card-content">
<div class="content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus nec iaculis mauris. <a>@bulmaio</a>.
<a href="#">#css</a> <a href="#">#responsive</a>
</div>
</div>
<footer class="card-footer">
<time datetime="2016-1-1">11:09 PM - 1 Jan 2016</time>
</footer>
</div>`
});
Vvveb.Components.extend("_base", "html/listgroup", {
name: "Lista",
image: process.env.ASSET_PATH + "img/icons/list_group.svg",
classes: ["list"],
html: ` <div class="list is-hoverable">
<span class="list-item">
Inactivo
</span>
<span class="list-item">
Inactivo
</span>
<span class="list-item is-active">
Activo
</span>
</div>`
});
Vvveb.Components.extend("_base", "html/listitem", {
name: "Item de lista",
classes: ["list-item"],
html: '<span class="list-item"><Inactivo</span>',
properties: [{
name: "Activo",
key: "is-active",
htmlAttr: "class",
validValues: ["", "is-active"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-active",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/breadcrumbs", {
classes: ["breadcrumb"],
name: "Breadcrumbs",
image: process.env.ASSET_PATH + "img/icons/breadcrumbs.svg",
html: ` <nav class="breadcrumb" aria-label="breadcrumbs">
<ul>
<li class="breadcrumb-item"><a href="#">Bulma</a></li>
<li class="breadcrumb-item"><a href="#">Documentation</a></li>
<li class="breadcrumb-item"><a href="#">Components</a></li>
<li class="breadcrumb-item is-active"><a href="#" aria-current="page">Breadcrumb</a></li>
</ul>
</nav>`
});
Vvveb.Components.extend("_base", "html/breadcrumbitem", {
classes: ["breadcrumb-item"],
name: "Item de Breadcrumbs",
html: '<li class="breadcrumb-item"><a href="#">Library</a></li>',
properties: [{
name: "Activo",
key: "is-active",
htmlAttr: "class",
validValues: ["", "is-active"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-active",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/pagination", {
classes: ["pagination"],
name: "Paginación",
image: process.env.ASSET_PATH + "img/icons/pagination.svg",
html: `<nav class="pagination" role="navigation" aria-label="pagination">
<ul class="pagination-list">
<li>
<a class="pagination-link" aria-label="Ir a pagina 1">1</a>
</li>
<li>
<a class="pagination-link" aria-label="Ir a pagina 2">2</a>
</li>
<li>
<a class="pagination-link is-current" aria-label="Pagina 3" aria-current="page">3</a>
</li>
<li>
<a class="pagination-link" aria-label="Ir a pagina 4">4</a>
</li>
<li>
<a class="pagination-link" aria-label="Ir a pagina 5">5</a>
</li>
</ul>
</nav>`,
properties: [{
name: "Tamaño",
key: "size",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["is-small", "is-medium", "is-large"],
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-small",
text: "Pequeño"
}, {
value: "is-medium",
text: "Mediano"
}, {
value: "is-large",
text: "Grande"
}]
}
},{
name: "Alignment",
key: "alignment",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["is-centered", "is-right"],
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-centered",
text: "Centrado"
}, {
value: "is-right",
text: "Derecha"
}]
}
}, {
name: "Redondeado",
key: "is-rounded",
htmlAttr: "class",
validValues: ["", "is-rounded"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-rounded",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/pageitem", {
classes: ["li-pagination-link"],
html: '<li class="li-pagination-link"><a class="pagination-link" href="#">1</a></li>',
name: "Pagination Item",
properties: [{
name: "Link To",
key: "href",
htmlAttr: "href",
child:".pagination-link",
inputtype: Inputs.TextInput
}, {
name: "Disabled",
key: "disabled",
htmlAttr: "class",
validValues: ["disabled"],
inputtype: Inputs.ToggleInput,
data: {
on: "disabled",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/progress", {
classes: ["progress"],
name: "Progress Bar",
image: process.env.ASSET_PATH + "img/icons/progressbar.svg",
html: '<progress class="progress" value="25" max="100">25%</progress>',
properties: [
{
name: "Valor",
key: "val",
inputtype: Inputs.NumberInput,
onChange: function(node, value) {
let $node = $(node);
$node.val(value);
$node.html(!! value || value === 0 ? (value.toString() + '%') : 'Indeterminado')
},
},
{
name: "Coloración",
key: "background",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}]
});
Vvveb.Components.extend("_base", "html/jumbotron", {
classes: ["hero"],
image: process.env.ASSET_PATH + "img/icons/jumbotron.svg",
name: "Seccion/Hero",
html: ` <section class="hero">
<div class="hero-body">
<div class="container">
<h1 class="title">
Titulo
</h1>
<h2 class="subtitle">
Subtitulo
</h2>
</div>
</div>
</section>`,
properties: [{
name: "Background",
key: "background",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}, {
name: "BG Difuminado",
key: "is-bold",
htmlAttr: "class",
validValues: ["is-bold"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-bold",
off: ""
}
},
{
name: "Tamaño",
key: "background",
htmlAttr: "class",
validValues: ["is-medium", "is-large", "is-fullheight"],
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-medium",
text: "Mediano"
}, {
value: "is-large",
text: "Grande"
}, {
value: "is-fullheight",
text: "Alto de página"
}]
}
}]
});
Vvveb.Components.extend("_base", "html/section", {
classes: ["section"],
image: process.env.ASSET_PATH + "img/icons/jumbotron.svg",
name: "Seccion/Regular",
html: ` <section class="section">
<div class="container">
<h1 class="title">Seccion</h1>
<h2 class="subtitle">
A simple container to divide your page into <strong>sections</strong>, like the one you're currently reading
</h2>
</div>
</section>`,
});
Vvveb.Components.extend("_base", "html/navbar", {
classes: ["navbar"],
image: process.env.ASSET_PATH + "img/icons/navbar.svg",
name: "Barra de navegación",
html: ` <nav class="navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="#">
<strong>Titulo</strong>
</a>
<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-start">
<a class="navbar-item">Inicio</a>
<a class="navbar-item">Elemento</a>
<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Mas</a>
<div class="navbar-dropdown">
<a class="navbar-item">Mas</a>
<a class="navbar-item">Items</a>
<hr class="navbar-divider">
<a class="navbar-item">Anidados</a>
</div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<div class="buttons">
<a class="button is-primary">
<strong>Boton</strong>
</a>
<a class="button is-light">Boton</a>
</div>
</div>
</div>
</div>
</nav>`,
properties: [{
name: "Coloración",
key: "color",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}, {
name: "Posición",
key: "placement",
htmlAttr: "class",
validValues: ["is-fixed-top", "is-fixed-bottom"],
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-fixed-top",
text: "Fixed Top"
}, {
value: "is-fixed-bottom",
text: "Fixed Bottom"
}]
}
}]
});
Vvveb.Components.extend("html/link", "html/navbaritem", {
classes: ["navbar-item"],
image: process.env.ASSET_PATH + "img/icons/link.svg",
name: "Item de navegacion",
html: `<a href="#" class="navbar-item">Item</a>`,
});
Vvveb.Components.extend("html/link", "html/navbardivider", {
classes: ["navbar-divider"],
image: process.env.ASSET_PATH + "img/icons/hr.svg",
name: "Divisor de menu",
html: `<hr class="navbar-divider">`,
});
Vvveb.Components.extend("html/link", "html/navbarmenu", {
classes: ["navbar-item", "has-dropdown"],
image: process.env.ASSET_PATH + "img/icons/list_group.svg",
name: "Menu de navegacion",
html: ` <div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">Menu</a>
<div class="navbar-dropdown">
<a class="navbar-item">Elemento 1</a>
<a class="navbar-item">Elemento 2</a>
<hr class="navbar-divider">
<div class="navbar-item">Elemento 3</div>
</div>
</div>`,
});
Vvveb.Components.extend("_base", "html/form", {
nodes: ["form"],
image: process.env.ASSET_PATH + "img/icons/form.svg",
name: "Formulario",
html: ` <form>
<div class="field">
<label class="label">Nombre</label>
<div class="control">
<input class="input" type="text" placeholder="Nombre">
</div>
</div>
<div class="field">
<label class="label">Sexo</label>
<div class="control">
<div class="select">
<select>
<option>M</option>
<option>F</option>
</select>
</div>
</div>
</div>
<div class="field">
<label class="label">Mensaje</label>
<div class="control">
<textarea class="textarea" placeholder="Mensaje"></textarea>
</div>
</div>
</form>`,
properties: [
// {
// name: "Estilo horizontal",
// key: "style",
// htmlAttr: "class",
// child: ".field",
// validValues: ["is-horizontal"],
// inputtype: Inputs.ToggleInput,
// data: {
// on: "is-horizontal",
// off: ""
// }
// },
{
name: "Acción",
key: "action",
htmlAttr: "action",
inputtype: Inputs.TextInput
}, {
name: "Metodo",
key: "method",
htmlAttr: "method",
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "get",
text: "GET"
}, {
value: "post",
text: "POST"
}]
}
}]
});
Vvveb.Components.extend("_base", "html/textinput", {
name: "Input de texto",
attributes: {"type":"text"},
image: process.env.ASSET_PATH + "img/icons/text_input.svg",
html: ` <div class="field">
<label class="label">Texto</label>
<div class="control">
<input class="input" type="text" placeholder="Input de texto">
</div>
</div>`,
properties: [{
name: "Value",
key: "value",
htmlAttr: "value",
inputtype: Inputs.TextInput
}, {
name: "Placeholder",
key: "placeholder",
htmlAttr: "placeholder",
inputtype: Inputs.TextInput
}, {
name: "Coloración",
key: "color",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}]
});
Vvveb.Components.extend("_base", "html/selectinput", {
nodes: ["select"],
name: "Input de selección",
image: process.env.ASSET_PATH + "img/icons/select_input.svg",
html: ` <div class="field">
<label class="label">Selector</label>
<div class="control">
<div class="select">
<select>
<option>Item 1</option>
<option>Item 2</option>
</select>
</div>
</div>
</div>`,
beforeInit: function (node)
{
var properties = [];
var i = 0;
$(node).find('option').each(function() {
data = {"value": this.value, "text": this.text};
i++;
properties.push({
name: "Opcion " + i,
key: "option" + i,
//index: i - 1,
optionNode: this,
inputtype: Inputs.TextValueInput,
data: data,
onChange: function(node, value, input) {
var option = $(this.optionNode);
//if remove button is clicked remove option and render row properties
if (input.nodeName == 'BUTTON')
{
option.remove();
Vvveb.Components.render("html/selectinput");
return node;
}
if (input.name == "value") option.attr("value", value);
else if (input.name == "text") option.text(value);
return node;
},
});
});
//remove all option properties
this.properties = this.properties.filter(function(item) {
return item.key.indexOf("option") === -1;
});
//add remaining properties to generated column properties
properties.push(this.properties[0]);
this.properties = properties;
return node;
},
properties: [{
name: "Opcion",
key: "option1",
inputtype: Inputs.TextValueInput
}, {
name: "Opcion",
key: "option2",
inputtype: Inputs.TextValueInput
}, {
name: "",
key: "addChild",
inputtype: Inputs.ButtonInput,
data: {text:"Agregar Opcion", icon:"la-plus"},
onChange: function(node)
{
$(node).append('<option value="value">Opcion</option>');
//render component properties again to include the new column inputs
Vvveb.Components.render("html/selectinput");
return node;
}
}, {
name: "Coloración",
key: "color",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}]
});
Vvveb.Components.extend("_base", "html/textareainput", {
name: "Area de texto",
nodes: ["textarea"],
image: process.env.ASSET_PATH + "img/icons/text_area.svg",
html: ` <div class="field">
<div class="control">
<textarea class="textarea" placeholder="Area de texto"></textarea>
</div>
</div>`,
properties: [{
name: "Coloración",
key: "color",
htmlAttr: "class",
validValues: bgcolorClasses,
inputtype: Inputs.SelectInput,
data: {
options: bgcolorSelectOptions
}
}, {
name: "Tamaño",
key: "size",
htmlAttr: "class",
validValues: ['is-small', 'is-medium', 'is-large'],
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "Default"
}, {
value: "is-small",
text: "Pequeño"
}, {
value: "is-medium",
text: "Mediano"
}, {
value: "is-large",
text: "Grande"
}]
}
}]
});
Vvveb.Components.extend("_base", "html/radiobutton", {
name: "Input de radio",
attributes: {"type":"radio"},
image: process.env.ASSET_PATH + "img/icons/radio.svg",
html: ` <div class="control">
<label class="radio">
<input type="radio" name="answer">
Item
</label>
</div>`,
properties: [{
name: "Nombre",
key: "name",
htmlAttr: "name",
inputtype: Inputs.TextInput
}]
});
Vvveb.Components.extend("_base", "html/checkbox", {
name: "Input de Checkbox",
attributes: {"type":"checkbox"},
image: process.env.ASSET_PATH + "img/icons/checkbox.svg",
html: '<label class="checkbox"><input type="checkbox"> Checkbox</label>',
properties: [{
name: "Nombre",
key: "name",
htmlAttr: "name",
inputtype: Inputs.TextInput
}]
});
Vvveb.Components.extend("_base", "html/fileinput", {
name: "Selector de archivos",
attributes: {"type":"file"},
image: process.env.ASSET_PATH + "img/icons/text_input.svg",
html: `
<div class="file">
<label class="file-label">
<input class="file-input" type="file" name="resume">
<span class="file-cta">
<span class="file-icon">
<i class=mdi mdi-upload"></i>
</span>
<span class="file-label">
Elije un archivo...
</span>
</span>
</label>
</div>`
});
Vvveb.Components.extend("_base", "html/box", {
name: "Box",
classes: ['box'],
image: process.env.ASSET_PATH + "img/icons/container.svg",
html: `
<div class="box">
<p>
<strong>John Smith</strong> <small>@johnsmith</small> <small>31m</small>
<br>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean efficitur sit amet massa fringilla egestas. Nullam condimentum luctus turpis.
</p>
</div>`
});
Vvveb.Components.extend("_base", "html/table", {
nodes: ["table"],
classes: ["table"],
image: process.env.ASSET_PATH + "img/icons/table.svg",
name: "Tabla",
html: '<table class="table">\
<thead>\
<tr>\
<th>#</th>\
<th>Nombre</th>\
<th>Apellido</th>\
<th>Twitter</th>\
</tr>\
</thead>\
<tbody>\
<tr>\
<th>1</th>\
<td>Mark</td>\
<td>Otto</td>\
<td>@mdo</td>\
</tr>\
<tr>\
<th>2</th>\
<td>Jacob</td>\
<td>Thornton</td>\
<td>@fat</td>\
</tr>\
<tr>\
<th>3</th>\
<td>Larry</td>\
<td>the Bird</td>\
<td>@twitter</td>\
</tr>\
</tbody>\
</table>',
properties: [
{
name: "Responsiva",
key: "responsive",
htmlAttr: "class",
validValues: ["is-responsive"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-responsive",
off: ""
}
},
{
name: "Bordes",
key: "is-bordered",
htmlAttr: "class",
validValues: ["is-bordered"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-bordered",
off: ""
}
},
{
name: "Lineas",
key: "is-striped",
htmlAttr: "class",
validValues: ["is-striped"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-striped",
off: ""
}
},
{
name: "Compacta",
key: "is-narrow",
htmlAttr: "class",
validValues: ["is-narrow"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-narrow",
off: ""
}
},
{
name: "Marcable",
key: "is-hoverable",
htmlAttr: "class",
validValues: ["is-hoverable"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-hoverable",
off: ""
}
},
{
name: "Ancho completo",
key: "is-fullwidth",
htmlAttr: "class",
validValues: ["is-fullwidth"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-fullwidth",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/tablerow", {
nodes: ["tr"],
name: "Fila de tabla",
html: "<tr><td>Cell 1</td><td>Cell 2</td><td>Cell 3</td></tr>",
properties: [{
name: "Marcada",
key: "is-selected",
htmlAttr: "class",
validValues: ["is-selected"],
inputtype: Inputs.ToggleInput,
data: {
on: "is-selected",
off: ""
}
}]
});
Vvveb.Components.extend("_base", "html/tablecell", {
nodes: ["td"],
name: "Celda de tabla",
html: "<td>Cell</td>"
});
Vvveb.Components.extend("_base", "html/tableheadercell", {
nodes: ["th"],
name: "Celda de cabecera",
html: "<th>Head</th>"
});
Vvveb.Components.extend("_base", "html/tablehead", {
nodes: ["thead"],
name: "Cabecera de tabla",
html: "<thead><tr><th>Head 1</th><th>Head 2</th><th>Head 3</th></tr></thead>"
});
Vvveb.Components.extend("_base", "html/tablebody", {
nodes: ["tbody"],
name: "Cuerpo de tabla",
html: "<tbody><tr><td>Cell 1</td><td>Cell 2</td><td>Cell 3</td></tr></tbody>"
});
Vvveb.Components.add("html/gridcolumn", {
name: "Columna (Grid)",
image: process.env.ASSET_PATH + "img/icons/grid_row.svg",
classes: ["column"],
html: '<div class="column"><h3>Columna</h3></div>',
properties: [{
name: "Column",
key: "column",
inputtype: Inputs.GridInput,
data: {hide_remove:true},
// beforeInit: function(node) {
// var _class = $(node).attr("class");
// var reg = /col-([^-\$ ]*)?-?(\d+)/g;
// var match;
// while ((match = reg.exec(_class)) != null) {
// this.data["col" + ((match[1] != undefined)?"_" + match[1]:"")] = match[2];
// }
// },
onChange: function(node, value, input) {
var _class = node.attr("class");
//remove previous breakpoint column size
_class = _class.replace(new RegExp(input.name + '-\\d+?'), '');
//add new column size
if (value) _class += ' ' + input.name + '-' + value;
node.attr("class", _class);
return node;
},
}]
});
Vvveb.Components.add("html/gridrow", {
name: "3 Columnas (Grid)",
image: process.env.ASSET_PATH + "img/icons/grid_row.svg",
classes: ["row"],
html: `<div class="columns">
<div class="column">
<h3 class="subtitle is-3">Columna 1</h3>
</div>
<div class="column">
<h3 class="subtitle is-3">Columna 2</h3>
</div>
<div class="column">
<h3 class="subtitle is-3">Columna 3</h3>
</div>
</div>`,
children :[{
name: "html/gridcolumn",
classes: ["column"],
}],
beforeInit: function (node)
{
var properties = [];
var i = 0;
var j = 0;
$(node).find('[class*="column"]').each(function() {
var _class = $(this).attr("class");
var reg = /col-([^-\$ ]*)?-?(\d+)/g;
var match;
var data = {};
while ((match = reg.exec(_class)) != null) {
data["col" + ((match[1] != undefined)?"_" + match[1]:"")] = match[2];
}
i++;
properties.push({
name: "Column " + i,
key: "column" + i,
//index: i - 1,
columnNode: this,
col:12,
inline:true,
inputtype: Inputs.GridInput,
data: data,
onChange: function(node, value, input) {
//column = $('[class*="col-"]:eq(' + this.index + ')', node);
var column = $(this.columnNode);
//if remove button is clicked remove column and render row properties
if (input.nodeName == 'BUTTON')
{
column.remove();
Vvveb.Components.render("html/gridrow");
return node;
}
//if select input then change column class
_class = column.attr("class");
//remove previous breakpoint column size
_class = _class.replace(new RegExp(input.name + '-\\d+?'), '');
//add new column size
if (value) _class += ' ' + input.name + '-' + value;
column.attr("class", _class);
//console.log(this, node, value, input, input.name);
return node;
},
});
});
//remove all column properties
this.properties = this.properties.filter(function(item) {
return item.key.indexOf("column") === -1;
});
//add remaining properties to generated column properties
properties.push(this.properties[0]);
this.properties = properties;
return node;
},
properties: [{
name: "Column",
key: "column1",
inputtype: Inputs.GridInput
}, {
name: "Column",
key: "column1",
inline:true,
col:12,
inputtype: Inputs.GridInput
}, {
name: "",
key: "addChild",
inputtype: Inputs.ButtonInput,
data: {text:"Add column", icon:"la la-plus"},
onChange: function(node)
{
$(node).append('<div class="col-3">Col-3</div>');
//render component properties again to include the new column inputs
Vvveb.Components.render("html/gridrow");
return node;
}
}]
});
Vvveb.Components.extend("_base", "html/paragraph", {
nodes: ["p"],
name: "Parrafo",
image: process.env.ASSET_PATH + "img/icons/paragraph.svg",
html: '<p>Lorem ipsum</p>',
properties: [{
name: "Alinear texto",
key: "text-align",
htmlAttr: "class",
inputtype: Inputs.SelectInput,
validValues: ["", "has-text-left", "has-text-centered", "has-text-right", "has-text-justified"],
inputtype: Inputs.RadioButtonInput,
data: {
extraclass:"",
options: [{
value: "",
icon:"la la-close",
//text: "None",
title: "None",
checked:true,
}, {
value: "Izquierda",
//text: "Left",
title: "has-text-left",
icon:"la la-align-left",
checked:false,
}, {
value: "has-text-centered",
//text: "Center",
title: "Centro",
icon:"la la-align-center",
checked:false,
}, {
value: "has-text-right",
//text: "Right",
title: "Derecha",
icon:"la la-align-right",
checked:false,
}, {
value: "has-text-justified",
//text: "Right",
title: "Justificado",
icon:"la la-align-justify",
checked:false,
}],
},
}]
});
Vvveb.Components.extend("_base", "html/video", {
nodes: ["video"],
name: "Video",
html: '<video width="320" height="240" playsinline loop autoplay><source src="https://storage.googleapis.com/coverr-main/mp4/Mt_Baker.mp4"><video>',
dragHtml: '<img width="320" height="240" src="' + Vvveb.baseUrl + 'icons/video.svg">',
image: process.env.ASSET_PATH + "img/icons/video.svg",
properties: [{
name: "Liga",
child: "source",
key: "src",
htmlAttr: "src",
inputtype: Inputs.LinkInput
},{
name: "Ancho",
key: "width",
htmlAttr: "width",
inputtype: Inputs.TextInput
}, {
name: "Alto",
key: "height",
htmlAttr: "height",
inputtype: Inputs.TextInput
},{
name: "Mute",
key: "muted",
htmlAttr: "muted",
inputtype: Inputs.CheckboxInput
},{
name: "Repetir",
key: "loop",
htmlAttr: "loop",
inputtype: Inputs.CheckboxInput
},{
name: "Autoplay",
key: "autoplay",
htmlAttr: "autoplay",
inputtype: Inputs.CheckboxInput
},{
name: "Play inline",
key: "playsinline",
htmlAttr: "playsinline",
inputtype: Inputs.CheckboxInput
},{
name: "Controles",
key: "controls",
htmlAttr: "controls",
inputtype: Inputs.CheckboxInput
}]
});
Vvveb.Components.extend("_base", "_base", {
properties: [
{
name: "Tipografia",
key: "font-family",
htmlAttr: "style",
sort: base_sort++,
col:6,
inline:true,
inputtype: Inputs.SelectInput,
data: {
options: [{
value: "",
text: "extended"
}, {
value: "Ggoogle ",
text: "google"
}]
}
}]
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment