/* Copyright 2017 Ziadin Givan Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. https://github.com/givanz/Vvvebjs */ bgcolorClasses = ["bg-primary", "bg-secondary", "bg-success", "bg-danger", "bg-warning", "bg-info", "bg-light", "bg-dark", "bg-white"] bgcolorSelectOptions = [{ value: "Default", text: "" }, { value: "bg-primary", text: "Primary" }, { value: "bg-secondary", text: "Secondary" }, { value: "bg-success", text: "Success" }, { value: "bg-danger", text: "Danger" }, { value: "bg-warning", text: "Warning" }, { value: "bg-info", text: "Info" }, { value: "bg-light", text: "Light" }, { value: "bg-dark", text: "Dark" }, { value: "bg-white", text: "White" }]; function changeNodeName(node, newNodeName) { var newNode; newNode = document.createElement(newNodeName); 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['Bootstrap 4'] = ["html/container", "html/gridrow", "html/button", "html/buttongroup", "html/buttontoolbar", "html/heading", "html/image", "html/jumbotron", "html/alert", "html/card", "html/listgroup", "html/hr", "html/taglabel", "html/badge", "html/progress", "html/navbar", "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", "html/button"]; 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: "Element", properties: [{ key: "element_header", inputtype: SectionInput, name:false, sort:base_sort++, data: {header:"General"}, }, { name: "Id", key: "id", htmlAttr: "id", sort: base_sort++, inline:true, col:6, inputtype: TextInput }, { name: "Class", key: "class", htmlAttr: "class", sort: base_sort++, inline:true, col:6, inputtype: TextInput } ] }); //display Vvveb.Components.extend("_base", "_base", { properties: [ { key: "display_header", inputtype: 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: 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: "Position", key: "position", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: 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: "Top", key: "top", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, parent:"", inputtype: CssUnitInput }, { name: "Left", key: "left", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, parent:"", inputtype: CssUnitInput }, { name: "Bottom", key: "bottom", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, parent:"", inputtype: CssUnitInput }, { name: "Right", key: "right", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, parent:"", inputtype: CssUnitInput },{ name: "Float", key: "float", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, inputtype: RadioButtonInput, data: { extraclass:"btn-group-sm btn-group-fullwidth", options: [{ value: "none", icon:"la la-times", //text: "None", title: "None", checked:true, }, { value: "left", //text: "Left", title: "Left", icon:"la la-align-left", checked:false, }, { value: "right", //text: "Right", title: "Right", icon:"la la-align-right", checked:false, }], } }, { name: "Opacity", key: "opacity", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, parent:"", inputtype: RangeInput, data:{ max: 1, //max zoom level min:0, step:0.1 }, }, { name: "Background Color", key: "background-color", sort: base_sort++, section: style_section, col:6, inline:true, htmlAttr: "style", inputtype: ColorInput, }, { name: "Text Color", key: "color", sort: base_sort++, section: style_section, col:6, inline:true, htmlAttr: "style", inputtype: ColorInput, }] }); //Typography Vvveb.Components.extend("_base", "_base", { properties: [ { key: "typography_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Typography"}, }, { name: "Font size", key: "font-size", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Font weight", key: "font-weight", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "100", text: "Thin" }, { value: "200", text: "Extra-Light" }, { value: "300", text: "Light" }, { value: "400", text: "Normal" }, { value: "500", text: "Medium" }, { value: "600", text: "Semi-Bold" }, { value: "700", text: "Bold" }, { value: "800", text: "Extra-Bold" }, { value: "900", text: "Ultra-Bold" }], } }, { name: "Font family", key: "font-family", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "Arial, Helvetica, sans-serif", text: "Arial" }, { value: '\'Lucida Sans Unicode\', \'Lucida Grande\', sans-serif', text: 'Lucida Grande' }, { value: '\'Palatino Linotype\', \'Book Antiqua\', Palatino, serif', text: 'Palatino Linotype' }, { value: '\'Times New Roman\', Times, serif', text: 'Times New Roman' }, { value: "Georgia, serif", text: "Georgia, serif" }, { value: "Tahoma, Geneva, sans-serif", text: "Tahoma" }, { value: '\'Comic Sans MS\', cursive, sans-serif', text: 'Comic Sans' }, { value: 'Verdana, Geneva, sans-serif', text: 'Verdana' }, { value: 'Impact, Charcoal, sans-serif', text: 'Impact' }, { value: '\'Arial Black\', Gadget, sans-serif', text: 'Arial Black' }, { value: '\'Trebuchet MS\', Helvetica, sans-serif', text: 'Trebuchet' }, { value: '\'Courier New\', Courier, monospace', text: 'Courier New' }, { value: '\'Brush Script MT\', sans-serif', text: 'Brush Script' }] } }, { name: "Text align", key: "text-align", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, inputtype: RadioButtonInput, data: { extraclass:"btn-group-sm btn-group-fullwidth", options: [{ value: "", icon:"la la-times", //text: "None", title: "None", checked:true, }, { value: "left", //text: "Left", title: "Left", icon:"la la-align-left", checked:false, }, { value: "center", //text: "Center", title: "Center", icon:"la la-align-center", checked:false, }, { value: "right", //text: "Right", title: "Right", icon:"la la-align-right", checked:false, }, { value: "justify", //text: "justify", title: "Justify", icon:"la la-align-justify", checked:false, }], }, }, { name: "Line height", key: "line-height", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Letter spacing", key: "letter-spacing", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Text decoration", key: "text-decoration-line", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, inputtype: RadioButtonInput, data: { extraclass:"btn-group-sm btn-group-fullwidth", options: [{ value: "none", icon:"la la-times", //text: "None", title: "None", checked:true, }, { value: "underline", //text: "Left", title: "underline", icon:"la la-long-arrow-alt-down", checked:false, }, { value: "overline", //text: "Right", title: "overline", icon:"la la-long-arrow-alt-up", checked:false, }, { value: "line-through", //text: "Right", title: "Line Through", icon:"la la-strikethrough", checked:false, }, { value: "underline overline", //text: "justify", title: "Underline Overline", icon:"la la-arrows-alt-v", checked:false, }], }, }, { name: "Decoration Color", key: "text-decoration-color", sort: base_sort++, section: style_section, col:6, inline:true, htmlAttr: "style", inputtype: ColorInput, }, { name: "Decoration style", key: "text-decoration-style", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "solid", text: "Solid" }, { value: "wavy", text: "Wavy" }, { value: "dotted", text: "Dotted" }, { value: "dashed", text: "Dashed" }, { value: "double", text: "Double" }], } }] }) //Size Vvveb.Components.extend("_base", "_base", { properties: [{ key: "size_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Size", expanded:false}, }, { name: "Width", key: "width", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Height", key: "height", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Min Width", key: "min-width", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Min Height", key: "min-height", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Max Width", key: "max-width", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Max Height", key: "max-height", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }] }); //Margin Vvveb.Components.extend("_base", "_base", { properties: [{ key: "margins_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Margin", expanded:false}, }, { name: "Top", key: "margin-top", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Right", key: "margin-right", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Bottom", key: "margin-bottom", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Left", key: "margin-left", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }] }); //Padding Vvveb.Components.extend("_base", "_base", { properties: [{ key: "paddings_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Padding", expanded:false}, }, { name: "Top", key: "padding-top", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Right", key: "padding-right", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Bottom", key: "padding-bottom", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Left", key: "padding-left", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }] }); //Border Vvveb.Components.extend("_base", "_base", { properties: [{ key: "border_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Border", expanded:false}, }, { name: "Style", key: "border-style", htmlAttr: "style", sort: base_sort++, section: style_section, col:12, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "solid", text: "Solid" }, { value: "dotted", text: "Dotted" }, { value: "dashed", text: "Dashed" }], } }, { name: "Width", key: "border-width", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Color", key: "border-color", sort: base_sort++, section: style_section, col:6, inline:true, htmlAttr: "style", inputtype: ColorInput, }] }); //Border radius Vvveb.Components.extend("_base", "_base", { properties: [{ key: "border_radius_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Border radius", expanded:false}, }, { name: "Top Left", key: "border-top-left-radius", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Top Right", key: "border-top-right-radius", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Bottom Left", key: "border-bottom-left-radius", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }, { name: "Bottom Right", key: "border-bottom-right-radius", htmlAttr: "style", sort: base_sort++, section: style_section, col:6, inline:true, inputtype: CssUnitInput }] }); //Background image Vvveb.Components.extend("_base", "_base", { properties: [{ key: "background_image_header", inputtype: SectionInput, name:false, sort: base_sort++, section: style_section, data: {header:"Background Image", expanded:false}, },{ name: "Image", key: "Image", sort: base_sort++, section: style_section, //htmlAttr: "style", inputtype: 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: "Repeat", key: "background-repeat", sort: base_sort++, section: style_section, htmlAttr: "style", inputtype: 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: "Size", key: "background-size", sort: base_sort++, section: style_section, htmlAttr: "style", inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "contain", text: "contain" }, { value: "cover", text: "cover" }], } }, { name: "Position x", key: "background-position-x", sort: base_sort++, section: style_section, htmlAttr: "style", col:6, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "center", text: "center" }, { value: "right", text: "right" }, { value: "left", text: "left" }], } }, { name: "Position y", key: "background-position-y", sort: base_sort++, section: style_section, htmlAttr: "style", col:6, inline:true, inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "center", text: "center" }, { value: "top", text: "top" }, { value: "bottom", text: "bottom" }], } }] }); Vvveb.Components.extend("_base", "html/container", { classes: ["container", "container-fluid"], image: "icons/container.svg", html: '
Container
', name: "Container", properties: [ { name: "Type", key: "type", htmlAttr: "class", inputtype: SelectInput, validValues: ["container", "container-fluid"], data: { options: [{ value: "container", text: "Default" }, { value: "container-fluid", text: "Fluid" }] } }, { name: "Background", key: "background", htmlAttr: "class", validValues: bgcolorClasses, inputtype: SelectInput, data: { options: bgcolorSelectOptions } }, { name: "Background Color", key: "background-color", htmlAttr: "style", inputtype: ColorInput, }, { name: "Text Color", key: "color", htmlAttr: "style", inputtype: ColorInput, }], }); Vvveb.Components.extend("_base", "html/heading", { image: "icons/heading.svg", name: "Heading", nodes: ["h1", "h2","h3", "h4","h5","h6"], html: "

Heading

", properties: [ { name: "Size", key: "size", inputtype: SelectInput, onChange: function(node, 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" }] }, }] }); Vvveb.Components.extend("_base", "html/link", { nodes: ["a"], name: "Link", html: 'Link', image: "icons/link.svg", properties: [{ name: "Url", key: "href", htmlAttr: "href", inputtype: LinkInput }, { name: "Target", key: "target", htmlAttr: "target", inputtype: TextInput }] }); Vvveb.Components.extend("_base", "html/image", { nodes: ["img"], name: "Image", html: '', /* afterDrop: function (node) { node.attr("src", ''); return node; },*/ image: "icons/image.svg", properties: [{ name: "Image", key: "src", htmlAttr: "src", inputtype: ImageInput }, { name: "Width", key: "width", htmlAttr: "width", inputtype: TextInput }, { name: "Height", key: "height", htmlAttr: "height", inputtype: TextInput }, { name: "Alt", key: "alt", htmlAttr: "alt", inputtype: TextInput }] }); Vvveb.Components.add("html/hr", { image: "icons/hr.svg", nodes: ["hr"], name: "Horizontal Rule", html: "
" }); Vvveb.Components.extend("_base", "html/label", { name: "Label", nodes: ["label"], html: '', properties: [{ name: "For id", htmlAttr: "for", key: "for", inputtype: TextInput }] }); Vvveb.Components.extend("_base", "html/button", { classes: ["btn", "btn-link"], name: "Button", image: "icons/button.svg", html: '', properties: [{ name: "Link To", key: "href", htmlAttr: "href", inputtype: LinkInput }, { name: "Type", key: "type", htmlAttr: "class", inputtype: SelectInput, validValues: ["btn-default", "btn-primary", "btn-info", "btn-success", "btn-warning", "btn-info", "btn-light", "btn-dark", "btn-outline-primary", "btn-outline-info", "btn-outline-success", "btn-outline-warning", "btn-outline-info", "btn-outline-light", "btn-outline-dark", "btn-link"], data: { options: [{ value: "btn-default", text: "Default" }, { value: "btn-primary", text: "Primary" }, { value: "btn btn-info", text: "Info" }, { value: "btn-success", text: "Success" }, { value: "btn-warning", text: "Warning" }, { value: "btn-info", text: "Info" }, { value: "btn-light", text: "Light" }, { value: "btn-dark", text: "Dark" }, { value: "btn-outline-primary", text: "Primary outline" }, { value: "btn btn-outline-info", text: "Info outline" }, { value: "btn-outline-success", text: "Success outline" }, { value: "btn-outline-warning", text: "Warning outline" }, { value: "btn-outline-info", text: "Info outline" }, { value: "btn-outline-light", text: "Light outline" }, { value: "btn-outline-dark", text: "Dark outline" }, { value: "btn-link", text: "Link" }] } }, { name: "Size", key: "size", htmlAttr: "class", inputtype: SelectInput, validValues: ["btn-lg", "btn-sm"], data: { options: [{ value: "", text: "Default" }, { value: "btn-lg", text: "Large" }, { value: "btn-sm", text: "Small" }] } }, { name: "Target", key: "target", htmlAttr: "target", inputtype: TextInput }, { name: "Disabled", key: "disabled", htmlAttr: "class", inputtype: ToggleInput, validValues: ["disabled"], data: { on: "disabled", off: null } }] }); Vvveb.Components.extend("_base", "html/buttongroup", { classes: ["btn-group"], name: "Button Group", image: "icons/button_group.svg", html: '
', properties: [{ name: "Size", key: "size", htmlAttr: "class", inputtype: SelectInput, validValues: ["btn-group-lg", "btn-group-sm"], data: { options: [{ value: "", text: "Default" }, { value: "btn-group-lg", text: "Large" }, { value: "btn-group-sm", text: "Small" }] } }, { name: "Alignment", key: "alignment", htmlAttr: "class", inputtype: SelectInput, validValues: ["btn-group", "btn-group-vertical"], data: { options: [{ value: "", text: "Default" }, { value: "btn-group", text: "Horizontal" }, { value: "btn-group-vertical", text: "Vertical" }] } }] }); Vvveb.Components.extend("_base", "html/buttontoolbar", { classes: ["btn-toolbar"], name: "Button Toolbar", image: "icons/button_toolbar.svg", html: '' }); Vvveb.Components.extend("_base","html/alert", { classes: ["alert"], name: "Alert", image: "icons/alert.svg", html: '', properties: [{ name: "Type", key: "type", htmlAttr: "class", validValues: ["alert-primary", "alert-secondary", "alert-success", "alert-danger", "alert-warning", "alert-info", "alert-light", "alert-dark"], inputtype: SelectInput, data: { options: [{ value: "alert-primary", text: "Default" }, { value: "alert-secondary", text: "Secondary" }, { value: "alert-success", text: "Success" }, { value: "alert-danger", text: "Danger" }, { value: "alert-warning", text: "Warning" }, { value: "alert-info", text: "Info" }, { value: "alert-light", text: "Light" }, { value: "alert-dark", text: "Dark" }] } }] }); Vvveb.Components.extend("_base", "html/badge", { classes: ["badge"], image: "icons/badge.svg", name: "Badge", html: 'Primary badge', properties: [{ name: "Color", key: "color", htmlAttr: "class", validValues:["badge-primary", "badge-secondary", "badge-success", "badge-danger", "badge-warning", "badge-info", "badge-light", "badge-dark"], inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "badge-primary", text: "Primary" }, { value: "badge-secondary", text: "Secondary" }, { value: "badge-success", text: "Success" }, { value: "badge-warning", text: "Warning" }, { value: "badge-danger", text: "Danger" }, { value: "badge-info", text: "Info" }, { value: "badge-light", text: "Light" }, { value: "badge-dark", text: "Dark" }] } }] }); Vvveb.Components.extend("_base", "html/card", { classes: ["card"], image: "icons/panel.svg", name: "Card", html: '
\ Card image cap\
\

Card title

\

Some quick example text to build on the card title and make up the bulk of the card\'s content.

\ Go somewhere\
\
' }); Vvveb.Components.extend("_base", "html/listgroup", { name: "List Group", image: "icons/list_group.svg", classes: ["list-group"], html: '' }); Vvveb.Components.extend("_base", "html/listitem", { name: "List Item", classes: ["list-group-item"], html: '
  • 14 Cras justo odio
  • ' }); Vvveb.Components.extend("_base", "html/breadcrumbs", { classes: ["breadcrumb"], name: "Breadcrumbs", image: "icons/breadcrumbs.svg", html: '' }); Vvveb.Components.extend("_base", "html/breadcrumbitem", { classes: ["breadcrumb-item"], name: "Breadcrumb Item", html: '', properties: [{ name: "Active", key: "active", htmlAttr: "class", validValues: ["", "active"], inputtype: ToggleInput, data: { on: "active", off: "" } }] }); Vvveb.Components.extend("_base", "html/pagination", { classes: ["pagination"], name: "Pagination", image: "icons/pagination.svg", html: '', properties: [{ name: "Size", key: "size", htmlAttr: "class", inputtype: SelectInput, validValues: ["btn-lg", "btn-sm"], data: { options: [{ value: "", text: "Default" }, { value: "btn-lg", text: "Large" }, { value: "btn-sm", text: "Small" }] } },{ name: "Alignment", key: "alignment", htmlAttr: "class", inputtype: SelectInput, validValues: ["justify-content-center", "justify-content-end"], data: { options: [{ value: "", text: "Default" }, { value: "justify-content-center", text: "Center" }, { value: "justify-content-end", text: "Right" }] } }] }); Vvveb.Components.extend("_base", "html/pageitem", { classes: ["page-item"], html: '
  • 1
  • ', name: "Pagination Item", properties: [{ name: "Link To", key: "href", htmlAttr: "href", child:".page-link", inputtype: TextInput }, { name: "Disabled", key: "disabled", htmlAttr: "class", validValues: ["disabled"], inputtype: ToggleInput, data: { on: "disabled", off: "" } }] }); Vvveb.Components.extend("_base", "html/progress", { classes: ["progress"], name: "Progress Bar", image: "icons/progressbar.svg", html: '
    ', properties: [{ name: "Background", key: "background", htmlAttr: "class", validValues: bgcolorClasses, inputtype: SelectInput, data: { options: bgcolorSelectOptions } }, { name: "Progress", key: "background", child:".progress-bar", htmlAttr: "class", validValues: ["", "w-25", "w-50", "w-75", "w-100"], inputtype: SelectInput, data: { options: [{ value: "", text: "None" }, { value: "w-25", text: "25%" }, { value: "w-50", text: "50%" }, { value: "w-75", text: "75%" }, { value: "w-100", text: "100%" }] } }, { name: "Progress background", key: "background", child:".progress-bar", htmlAttr: "class", validValues: bgcolorClasses, inputtype: SelectInput, data: { options: bgcolorSelectOptions } }, { name: "Striped", key: "striped", child:".progress-bar", htmlAttr: "class", validValues: ["", "progress-bar-striped"], inputtype: ToggleInput, data: { on: "progress-bar-striped", off: "", } }, { name: "Animated", key: "animated", child:".progress-bar", htmlAttr: "class", validValues: ["", "progress-bar-animated"], inputtype: ToggleInput, data: { on: "progress-bar-animated", off: "", } }] }); Vvveb.Components.extend("_base", "html/jumbotron", { classes: ["jumbotron"], image: "icons/jumbotron.svg", name: "Jumbotron", html: '
    \

    Hello, world!

    \

    This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

    \
    \

    It uses utility classes for typography and spacing to space content out within the larger container.

    \

    \ Learn more\

    \
    ' }); Vvveb.Components.extend("_base", "html/navbar", { classes: ["navbar"], image: "icons/navbar.svg", name: "Nav Bar", html: '', properties: [{ name: "Color theme", key: "color", htmlAttr: "class", validValues: ["navbar-light", "navbar-dark"], inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "navbar-light", text: "Light" }, { value: "navbar-dark", text: "Dark" }] } },{ name: "Background color", key: "background", htmlAttr: "class", validValues: bgcolorClasses, inputtype: SelectInput, data: { options: bgcolorSelectOptions } }, { name: "Placement", key: "placement", htmlAttr: "class", validValues: ["fixed-top", "fixed-bottom", "sticky-top"], inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "fixed-top", text: "Fixed Top" }, { value: "fixed-bottom", text: "Fixed Bottom" }, { value: "sticky-top", text: "Sticky top" }] } }] }); Vvveb.Components.extend("_base", "html/form", { nodes: ["form"], image: "icons/form.svg", name: "Form", html: '
    ', properties: [{ name: "Style", key: "style", htmlAttr: "class", validValues: ["", "form-search", "form-inline", "form-horizontal"], inputtype: SelectInput, data: { options: [{ value: "", text: "Default" }, { value: "form-search", text: "Search" }, { value: "form-inline", text: "Inline" }, { value: "form-horizontal", text: "Horizontal" }] } }, { name: "Action", key: "action", htmlAttr: "action", inputtype: TextInput }, { name: "Method", key: "method", htmlAttr: "method", inputtype: TextInput }] }); Vvveb.Components.extend("_base", "html/textinput", { name: "Input", nodes: ["input"], //attributes: {"type":"text"}, image: "icons/text_input.svg", html: '
    ', properties: [{ name: "Value", key: "value", htmlAttr: "value", inputtype: TextInput }, { name: "Type", key: "type", htmlAttr: "type", inputtype: SelectInput, data: { options: [{ value: "text", text: "text" }, { value: "button", text: "button" }, { value: "checkbox", text: "checkbox" }, { value: "color", text: "color" }, { value: "date", text: "date" }, { value: "datetime-local", text: "datetime-local" }, { value: "email", text: "email" }, { value: "file", text: "file" }, { value: "hidden", text: "hidden" }, { value: "image", text: "image" }, { value: "month", text: "month" }, { value: "number", text: "number" }, { value: "password", text: "password" }, { value: "radio", text: "radio" }, { value: "range", text: "range" }, { value: "reset", text: "reset" }, { value: "search", text: "search" }, { value: "submit", text: "submit" }, { value: "tel", text: "tel" }, { value: "text", text: "text" }, { value: "time", text: "time" }, { value: "url", text: "url" }, { value: "week", text: "week" }] } }, { name: "Placeholder", key: "placeholder", htmlAttr: "placeholder", inputtype: TextInput }, { name: "Disabled", key: "disabled", htmlAttr: "disabled", col:6, inputtype: CheckboxInput, },{ name: "Required", key: "required", htmlAttr: "required", col:6, inputtype: CheckboxInput, }] }); Vvveb.Components.extend("_base", "html/selectinput", { nodes: ["select"], name: "Select Input", image: "icons/select_input.svg", html: '
    ', beforeInit: function (node) { properties = []; var i = 0; $(node).find('option').each(function() { data = {"value": this.value, "text": this.text}; i++; properties.push({ name: "Option " + i, key: "option" + i, //index: i - 1, optionNode: this, inputtype: TextValueInput, data: data, onChange: function(node, value, input) { 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: "Option", key: "option1", inputtype: TextValueInput }, { name: "Option", key: "option2", inputtype: TextValueInput }, { name: "", key: "addChild", inputtype: ButtonInput, data: {text:"Add option", icon:"la-plus"}, onChange: function(node) { $(node).append(''); //render component properties again to include the new column inputs Vvveb.Components.render("html/selectinput"); return node; } }] }); Vvveb.Components.extend("_base", "html/textareainput", { name: "Text Area", image: "icons/text_area.svg", html: '
    ' }); Vvveb.Components.extend("_base", "html/radiobutton", { name: "Radio Button", attributes: {"type":"radio"}, image: "icons/radio.svg", html: '', properties: [{ name: "Name", key: "name", htmlAttr: "name", inputtype: TextInput }] }); Vvveb.Components.extend("_base", "html/checkbox", { name: "Checkbox", attributes: {"type":"checkbox"}, image: "icons/checkbox.svg", html: '', properties: [{ name: "Name", key: "name", htmlAttr: "name", inputtype: TextInput }] }); Vvveb.Components.extend("_base", "html/fileinput", { name: "Input group", attributes: {"type":"file"}, image: "icons/text_input.svg", html: '
    \ \
    ' }); Vvveb.Components.extend("_base", "html/table", { nodes: ["table"], classes: ["table"], image: "icons/table.svg", name: "Table", html: '\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    ', properties: [ { name: "Type", key: "type", htmlAttr: "class", validValues: ["table-primary", "table-secondary", "table-success", "table-danger", "table-warning", "table-info", "table-light", "table-dark", "table-white"], inputtype: SelectInput, data: { options: [{ value: "Default", text: "" }, { value: "table-primary", text: "Primary" }, { value: "table-secondary", text: "Secondary" }, { value: "table-success", text: "Success" }, { value: "table-danger", text: "Danger" }, { value: "table-warning", text: "Warning" }, { value: "table-info", text: "Info" }, { value: "table-light", text: "Light" }, { value: "table-dark", text: "Dark" }, { value: "table-white", text: "White" }] } }, { name: "Responsive", key: "responsive", htmlAttr: "class", validValues: ["table-responsive"], inputtype: ToggleInput, data: { on: "table-responsive", off: "" } }, { name: "Small", key: "small", htmlAttr: "class", validValues: ["table-sm"], inputtype: ToggleInput, data: { on: "table-sm", off: "" } }, { name: "Hover", key: "hover", htmlAttr: "class", validValues: ["table-hover"], inputtype: ToggleInput, data: { on: "table-hover", off: "" } }, { name: "Bordered", key: "bordered", htmlAttr: "class", validValues: ["table-bordered"], inputtype: ToggleInput, data: { on: "table-bordered", off: "" } }, { name: "Striped", key: "striped", htmlAttr: "class", validValues: ["table-striped"], inputtype: ToggleInput, data: { on: "table-striped", off: "" } }, { name: "Inverse", key: "inverse", htmlAttr: "class", validValues: ["table-inverse"], inputtype: ToggleInput, data: { on: "table-inverse", off: "" } }, { name: "Head options", key: "head", htmlAttr: "class", child:"thead", inputtype: SelectInput, validValues: ["", "thead-inverse", "thead-default"], data: { options: [{ value: "", text: "None" }, { value: "thead-default", text: "Default" }, { value: "thead-inverse", text: "Inverse" }] } }] }); Vvveb.Components.extend("_base", "html/tablerow", { nodes: ["tr"], name: "Table Row", html: "Cell 1Cell 2Cell 3", properties: [{ name: "Type", key: "type", htmlAttr: "class", inputtype: SelectInput, validValues: ["", "success", "danger", "warning", "active"], data: { options: [{ value: "", text: "Default" }, { value: "success", text: "Success" }, { value: "error", text: "Error" }, { value: "warning", text: "Warning" }, { value: "active", text: "Active" }] } }] }); Vvveb.Components.extend("_base", "html/tablecell", { nodes: ["td"], name: "Table Cell", html: "Cell" }); Vvveb.Components.extend("_base", "html/tableheadercell", { nodes: ["th"], name: "Table Header Cell", html: "Head" }); Vvveb.Components.extend("_base", "html/tablehead", { nodes: ["thead"], name: "Table Head", html: "Head 1Head 2Head 3", properties: [{ name: "Type", key: "type", htmlAttr: "class", inputtype: SelectInput, validValues: ["", "success", "danger", "warning", "info"], data: { options: [{ value: "", text: "Default" }, { value: "success", text: "Success" }, { value: "anger", text: "Error" }, { value: "warning", text: "Warning" }, { value: "info", text: "Info" }] } }] }); Vvveb.Components.extend("_base", "html/tablebody", { nodes: ["tbody"], name: "Table Body", html: "Cell 1Cell 2Cell 3" }); Vvveb.Components.add("html/gridcolumn", { name: "Grid Column", image: "icons/grid_row.svg", classesRegex: ["col-"], html: '

    col-sm-4

    ', properties: [{ name: "Column", key: "column", inputtype: GridInput, data: {hide_remove:true}, beforeInit: function(node) { _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: "Grid Row", image: "icons/grid_row.svg", classes: ["row"], html: '

    col-sm-4

    col-sm-4

    col-sm-4

    ', children :[{ name: "html/gridcolumn", classesRegex: ["col-"], }], beforeInit: function (node) { properties = []; var i = 0; var j = 0; $(node).find('[class*="col-"]').each(function() { _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: 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: GridInput }, { name: "Column", key: "column1", inline:true, col:12, inputtype: GridInput }, { name: "", key: "addChild", inputtype: ButtonInput, data: {text:"Add column", icon:"la la-plus"}, onChange: function(node) { $(node).append('
    Col-3
    '); //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: "Paragraph", image: "icons/paragraph.svg", html: '

    Lorem ipsum

    ', properties: [{ name: "Text align", key: "text-align", htmlAttr: "class", inputtype: SelectInput, validValues: ["", "text-left", "text-center", "text-right"], inputtype: RadioButtonInput, data: { extraclass:"btn-group-sm btn-group-fullwidth", options: [{ value: "", icon:"la la-times", //text: "None", title: "None", checked:true, }, { value: "text-left", //text: "Left", title: "text-left", icon:"la la-align-left", checked:false, }, { value: "text-center", //text: "Center", title: "Center", icon:"la la-align-center", checked:false, }, { value: "text-right", //text: "Right", title: "Right", icon:"la la-align-right", checked:false, }], }, }] }); Vvveb.Components.extend("_base", "html/video", { nodes: ["video"], name: "Video", html: '