230 lines
6.9 KiB
JavaScript
230 lines
6.9 KiB
JavaScript
var textCompareList = {
|
|
"eq":"equals",
|
|
"like":"contains",
|
|
"ne":"is not",
|
|
"notlike":"not like",
|
|
"starts":"starts with",
|
|
"ends":"ends with"
|
|
};
|
|
|
|
var numericCompareList = {
|
|
"eq":"=",
|
|
"ne":"is not",
|
|
"gt":">",
|
|
"lt":"<",
|
|
"gte":">=",
|
|
"lte":"<="
|
|
};
|
|
var booleanCompareList = {
|
|
"eq":"is",
|
|
"ne":"is not"
|
|
};
|
|
function addField() {
|
|
var tb = document.getElementById('filterbody');
|
|
filterCount++;
|
|
|
|
var newtr = document.createElement('tr');
|
|
newtr.setAttribute("id","cfilter_id"+filterCount);
|
|
//Create right table data
|
|
var newtd1 = document.createElement('td');
|
|
newtd1.className="searchDisplay";
|
|
//Add fields to choose from
|
|
var newDD = newtd1.appendChild(addFilterSelect());
|
|
|
|
//Create left table data
|
|
var newtd2 = document.createElement('td');
|
|
newtd2.className="searchDisplay";
|
|
newtd2.setAttribute("id","cfilter_td_"+filterCount);
|
|
//Add default compare select list
|
|
var compareSelect = addSelectList('cfilter_c'+filterCount,textCompareList);
|
|
compareSelect.className="compare-select";
|
|
newtd2.appendChild(compareSelect);
|
|
//Add default filter field
|
|
var filterText = addTextField('cfilter_t'+filterCount);
|
|
filterText.className="filter-text";
|
|
newtd2.appendChild(filterText);
|
|
//Add remove button
|
|
var filterButton = addButton('cbutton_'+filterCount,'-');
|
|
filterButton.className="button";
|
|
filterButton.onclick = removeField;
|
|
newtd2.appendChild(filterButton);
|
|
//Add tds to trs
|
|
newtr.appendChild(newtd1);
|
|
newtr.appendChild(newtd2);
|
|
//Add trs to tbody
|
|
tb.appendChild(newtr);
|
|
return newDD;
|
|
}
|
|
|
|
|
|
function getTarget(e) {
|
|
var targ;
|
|
if (!e) var e = window.event;
|
|
if (e.target) targ = e.target;
|
|
else if (e.srcElement) targ = e.srcElement;
|
|
if (targ.nodeType == 3) // defeat Safari bug
|
|
targ = targ.parentNode;
|
|
return targ
|
|
}
|
|
|
|
function getFilterId(button) {
|
|
if(button == null) return;
|
|
var name = button.name;
|
|
var strs = name.split("_");
|
|
var end = strs[1];
|
|
if(isNaN(end)) {
|
|
end = end.substring(1,end.length);
|
|
}
|
|
return end;
|
|
}
|
|
|
|
function removeField (event) {
|
|
var button = getTarget(event);
|
|
var filterId = getFilterId(button);
|
|
var idName = "cfilter_id"+filterId;
|
|
removeElement('filterbody',idName);
|
|
}
|
|
|
|
function changeField (event) {
|
|
var button = getTarget(event);
|
|
var filterId = getFilterId(button);
|
|
var idName = 'cfilter_s'+filterId+'_id';
|
|
var sel = document.getElementById(idName);
|
|
|
|
var field = sel.options[sel.selectedIndex].value;
|
|
changeToType(field,filterId);
|
|
}
|
|
|
|
function changeToType(field,filterId) {
|
|
var fieldType = filterList[field]["type"];
|
|
var fieldCompare = filterList[field]["compare"];
|
|
var tr = document.getElementById("cfilter_id"+filterId);
|
|
var td = document.getElementById("cfilter_td_"+filterId);
|
|
//Remove old td
|
|
tr.removeChild(td);
|
|
//Create new td
|
|
var newtd = document.createElement('td');
|
|
newtd.className="searchDisplay";
|
|
newtd.setAttribute("id","cfilter_td_"+filterId);
|
|
|
|
//Add default compare select list
|
|
var arr;
|
|
if(fieldCompare == "text") {
|
|
arr = textCompareList;
|
|
} else if(fieldCompare == "numeric") {
|
|
arr = numericCompareList;
|
|
} else if(fieldCompare == "boolean") {
|
|
arr = booleanCompareList;
|
|
}
|
|
var compareSelect = addSelectList('cfilter_c'+filterId,arr);
|
|
compareSelect.className="compare-select";
|
|
newtd.appendChild(compareSelect);
|
|
|
|
var filterFieldName = 'cfilter_t'+filterId;
|
|
|
|
if(fieldType == "text") {
|
|
var filterField = addTextField(filterFieldName);
|
|
filterField.className="filter-text";
|
|
newtd.appendChild(filterField);
|
|
} else if(fieldType == "select") {
|
|
var filterField = addSelectList(filterFieldName,filterList[field]["list"]);
|
|
filterField.className="filter-text";
|
|
newtd.appendChild(filterField);
|
|
} else if(fieldType == "date") {
|
|
var filterField = addTextField(filterFieldName);
|
|
//filterField.setAttribute("id",dateFieldId);
|
|
filterField.className="filter-text";
|
|
newtd.appendChild(filterField);
|
|
} else if(fieldType == "dateTime") {
|
|
var filterField = addTextField(filterFieldName);
|
|
//filterField.setAttribute("id",dateFieldId);
|
|
filterField.className="filter-text";
|
|
newtd.appendChild(filterField);
|
|
}
|
|
|
|
//Add remove button
|
|
var filterButton = addButton('cbutton_'+filterId,'-');
|
|
filterButton.className="button";
|
|
filterButton.onclick = removeField;
|
|
newtd.appendChild(filterButton);
|
|
|
|
//Add new td to tr
|
|
tr.appendChild(newtd);
|
|
if(fieldType == "date") {
|
|
var dateFieldId = filterFieldName+"_id";
|
|
Calendar.setup({
|
|
"inputField":dateFieldId,
|
|
"ifFormat": "%Y-%m-%d",
|
|
"showsTime": false,
|
|
"timeFormat": "12",
|
|
"mondayFirst": false
|
|
});
|
|
}
|
|
if(fieldType == "dateTime") {
|
|
var dateFieldId = filterFieldName+"_id";
|
|
Calendar.setup({
|
|
"inputField":dateFieldId,
|
|
"ifFormat": "%Y-%m-%d %H:%M:%S",
|
|
"showsTime": true,
|
|
"step": 1,
|
|
"timeFormat": "12",
|
|
"mondayFirst": false
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function addFilterSelect() {
|
|
var sel = document.createElement("select");
|
|
sel.setAttribute('name','cfilter_s'+filterCount);
|
|
sel.setAttribute('id','cfilter_s'+filterCount+'_id');
|
|
sel.className="filter-select";
|
|
sel.onchange=changeField;
|
|
//one way to write a function... you have to write it yourself!
|
|
//myOnChange = new Function("e", "location.href=myselect.options[myselect.selectedIndex].value");
|
|
//first option
|
|
for (var word in filterList) {
|
|
//listString += items[word] + ", ";
|
|
var opt = document.createElement("option");
|
|
opt.setAttribute("value",word);
|
|
opt.appendChild(document.createTextNode(filterList[word]["name"]));
|
|
sel.appendChild(opt);
|
|
}
|
|
return sel;
|
|
}
|
|
|
|
function addSelectList(fieldName,array) {
|
|
var sel = document.createElement("select");
|
|
sel.setAttribute('name',fieldName);
|
|
sel.setAttribute("id",fieldName+"_id");
|
|
for (var word in array) {
|
|
var opt = document.createElement("option");
|
|
opt.setAttribute("value",word);
|
|
opt.appendChild(document.createTextNode(array[word]));
|
|
sel.appendChild(opt);
|
|
}
|
|
return sel;
|
|
}
|
|
|
|
function addTextField(fieldName) {
|
|
var text = document.createElement("input");
|
|
text.setAttribute('type','text');
|
|
text.setAttribute('name',fieldName);
|
|
text.setAttribute("id",fieldName+"_id");
|
|
return text;
|
|
}
|
|
|
|
function addButton(name,value) {
|
|
var button = document.createElement('input');
|
|
button.setAttribute('type','button');
|
|
button.setAttribute('value',value);
|
|
button.setAttribute('name',name);
|
|
return button;
|
|
}
|
|
|
|
function removeElement(parent,child) {
|
|
var p = document.getElementById(parent);
|
|
var c = document.getElementById(child);
|
|
p.removeChild(c);
|
|
}
|