Add/remove items with new column
</> Source
<!DOCTYPE html>
<html>
<head>
<title>Add/remove items with new column</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<link rel="stylesheet" type="text/css" href="../../../codebase/fonts/font_roboto/roboto.css"/>
<link rel="stylesheet" type="text/css" href="../../../codebase/dhtmlx.css"/>
<script src="../../../codebase/dhtmlx.js"></script>
<script>
var myForm, formData;
function doOnLoad() {
formData = [
{type: "settings", position: "label-left", labelWidth: "auto", inputWidth: "auto"},
{type: "label", label: "Query Options", list: [
{type: "settings", position: "label-right"},
{type: "checkbox", name: "ch_where", value: 1, label: "WHERE"},
{type: "checkbox", name: "ch_order", value: 1, label: "ORDER BY"}
]},
{type: "label", label: "Query Builder", name: "query", offsetTop: 20, list: [
{type: "settings", offsetLeft: 5},
{type: "select", label: "SELECT", inputWidth: 100, userdata: {output: true, order: 10, before: "SELECT ", after: " "}, options:[
{value: "*", text: "*", selected: true},
{value: "userId", text: "userId"},
{value: "userName", text: "userName"}
]},
{type: "newcolumn"},
{type: "select", label: "FROM", inputWidth: 70, userdata: {output: true, order: 20, before: "FROM ", after: "\n"}, options: [
{value: "users", text: "users", selected: true}
]}
]},
{type: "label", label: "Query String", offsetTop: 20, list: [
{type: "input", name: "query_string", label: "", inputWidth: 300, rows: 4}
]}
];
myForm = new dhtmlXForm("myForm", formData);
myForm.attachEvent("onChange", function(name, value, state){
if (name == "ch_where" || name == "ch_order") {
var itemOffset = (myForm.isItemChecked("ch_where") && name == "ch_order" ? 3:0); // include "where" position for "order_by"
var lastItemIndex = 1+itemOffset; // index of last item in query ([0] for "select", [1] for "from")
for (var q=0; q<itemData[name].length; q++) {
if (state) {
myForm.addItem("query", itemData[name][q], lastItemIndex+q, true);
myForm.addItem("query", {type: "newcolumn"}, lastItemIndex+1+q);
} else {
myForm.removeColumn("query", lastItemIndex+1, true);
}
}
}
updateQueryString();
});
updateQueryString();
}
function updateQueryString() {
var out = [];
var t = myForm.getFormData();
for (var a in t) {
if (myForm.getUserData(a,"output")) {
out.push([myForm.getUserData(a,"order"), myForm.getUserData(a,"before")+t[a].replace(/\\/,"\\\\").replace(/\'/gi,"\\'")+myForm.getUserData(a,"after")]);
}
}
out.sort(function(a,b){return (a[0]>=b[0]?1:-1);});
for (var q=0; q<out.length; q++) out[q] = out[q][1];
myForm.setItemValue("query_string", out.join(""));
}
// formData for additional items
var itemData = {
"ch_where": [
{type: "select", label: "WHERE", inputWidth: 100, userdata: {output: true, order: 30, before: "WHERE ", after: " "}, options: [
{value: "userId", text: "userId"},
{value: "userName", text: "userName"}
]},
{type: "select", label: " ", inputWidth: 60, userdata: {output: true, order: 31, after: " "}, options: [
{value: "LIKE", text: "LIKE"},
{value: "=", text: "=", selected: true},
{value: ">", text: ">"},
{value: ">=", text: ">="},
{value: "<", text: "<"},
{value: "<=", text: "<="}
]},
{type: "input", label: " ", value: "1", userdata: {output: true, order: 32, before: "'", after: "'\n"}, inputWidth: 50}
],
"ch_order": [
{type: "select", label: "ORDER BY", inputWidth: 100, userdata: {output: true, order: 40, before: "ORDER BY ", after: " "}, options: [
{value: "userId", text: "userId"},
{value: "userName", text: "userName", selected: true}
]},
{type: "select", label: " ", inputWidth: 65, userdata: {output: true, order: 41}, options: [
{value: "ASC", text: "ASC", selected: true},
{value: "DESC", text: "DESC"}
]}
]
};
</script>
</head>
<body onload="doOnLoad();">
<div id="myForm"></div>
</body>
</html>
Documentation
Check documentation to learn how to use the components and easily implement them in your applications.