185 lines
4.9 KiB
JavaScript
185 lines
4.9 KiB
JavaScript
search_fields = {};
|
|
|
|
// Search Selector 2.0
|
|
// -------------------
|
|
|
|
function setlinkvalue(name) {
|
|
//selector.input.set(name);// in local - this will be set onchange
|
|
selector.input.set_input(name); // on screen
|
|
selector.hide();
|
|
}
|
|
|
|
// Link Selector
|
|
// -------------
|
|
|
|
function makeselector() {
|
|
var d = new Dialog(540,440, 'Search');
|
|
|
|
d.make_body([
|
|
['Data', 'Beginning With', 'Tip: You can use wildcard "%"'],
|
|
['Select', 'Search By'],
|
|
['Button', 'Search'],
|
|
['HTML', 'Help'],
|
|
['HTML', 'Result']
|
|
]);
|
|
|
|
// search with
|
|
var inp = d.widgets['Beginning With'];
|
|
var field_sel = d.widgets['Search By'];
|
|
var btn = d.widgets['Search'];
|
|
|
|
// result
|
|
d.sel_type = '';
|
|
d.values_len = 0;
|
|
d.set = function(input, type, label) {
|
|
d.sel_type = type; d.input = input;
|
|
if(d.style!='Link') {
|
|
d.rows['Result'].innerHTML ='';
|
|
d.values_len = 0;
|
|
}
|
|
d.style = 'Link';
|
|
d.set_query_description()
|
|
|
|
if(!d.sel_type)d.sel_type = 'Value';
|
|
d.set_title('Select a "'+ d.sel_type +'" for field "'+label+'"');
|
|
}
|
|
d.set_search = function(dt) {
|
|
if(d.style!='Search') {
|
|
d.rows['Result'].innerHTML ='';
|
|
d.values_len = 0;
|
|
}
|
|
d.style = 'Search';
|
|
if(d.input) { d.input = null; sel_type = null; }
|
|
d.sel_type = get_label_doctype(dt);
|
|
d.set_title('Quick Search for ' + dt);
|
|
}
|
|
|
|
inp.onkeydown = function(e) {
|
|
if(isIE)var kc = window.event.keyCode;
|
|
else var kc = e.keyCode;
|
|
|
|
if(kc==13) if(!btn.disabled)btn.onclick();
|
|
}
|
|
|
|
d.set_query_description = function() {
|
|
if(d.input && d.input.query_description) {
|
|
d.rows['Help'].innerHTML ='<div class="help_box">' + d.input.query_description + '</div>';
|
|
} else {
|
|
d.rows['Help'].innerHTML =''
|
|
}
|
|
}
|
|
d.onshow = function() {
|
|
if(d.set_doctype!=d.sel_type) {
|
|
d.rows['Result'].innerHTML ='';
|
|
d.values_len = 0;
|
|
}
|
|
|
|
inp.value = '';
|
|
if(d.input && d.input.txt.value) {
|
|
inp.value = d.input.txt.value;
|
|
}
|
|
try{inp.focus();} catch(e){}
|
|
|
|
if(d.input) d.input.set_get_query();
|
|
|
|
// temp function to strip labels from search fields
|
|
var get_sf_list = function(dt) {
|
|
var l = []; var lf = search_fields[dt];
|
|
for(var i=0; i<lf.length; i++) l.push(lf[i][1]);
|
|
return l;
|
|
}
|
|
|
|
// set fields
|
|
$ds(d.rows['Search By']);
|
|
|
|
if(search_fields[d.sel_type]) {
|
|
empty_select(field_sel);
|
|
add_sel_options(field_sel, get_sf_list(d.sel_type), 'ID');
|
|
} else {
|
|
// set default select by
|
|
empty_select(field_sel);
|
|
add_sel_options(field_sel, ['ID'], 'ID');
|
|
|
|
$c('webnotes.widgets.search.getsearchfields', {'doctype':d.sel_type}, function(r,rt) {
|
|
search_fields[d.sel_type] = r.searchfields;
|
|
empty_select(field_sel);
|
|
add_sel_options(field_sel, get_sf_list(d.sel_type));
|
|
field_sel.selectedIndex = 0;
|
|
} );
|
|
}
|
|
}
|
|
d.onhide = function() {
|
|
if(page_body.wntoolbar)
|
|
page_body.wntoolbar.search_sel.disabled = 0;
|
|
if(d.input && d.input.txt) // link, call onchange
|
|
d.input.txt.onchange()
|
|
}
|
|
|
|
btn.onclick = function() {
|
|
if(this.disabled) return;
|
|
|
|
this.set_working();
|
|
d.set_doctype = d.sel_type;
|
|
var q = '';
|
|
if(d.input && d.input.get_query) {
|
|
var doc = {};
|
|
if(cur_frm) doc = locals[cur_frm.doctype][cur_frm.docname];
|
|
var q = d.input.get_query(doc, d.input.doctype, d.input.docname);
|
|
if(!q) { return ''; }
|
|
}
|
|
|
|
// for field type, return field name
|
|
var get_sf_fieldname = function(v) {
|
|
var lf = search_fields[d.sel_type];
|
|
|
|
// still loading options
|
|
if(!lf)
|
|
return 'name'
|
|
|
|
for(var i=0; i<lf.length; i++) if(lf[i][1]==v) return lf[i][0];
|
|
}
|
|
|
|
$c('webnotes.widgets.search.search_widget',
|
|
args = {
|
|
'txt':strip(inp.value)
|
|
,'doctype':d.sel_type
|
|
,'query':q
|
|
,'searchfield':get_sf_fieldname(sel_val(field_sel))
|
|
},
|
|
function(r, rtxt) {
|
|
btn.done_working();
|
|
if(r.coltypes)r.coltypes[0]='Link'; // first column must always be selectable even if it is not a link
|
|
d.values_len = r.values.length;
|
|
d.set_result(r);
|
|
}, function() { btn.done_working(); });
|
|
}
|
|
|
|
d.set_result = function(r) {
|
|
d.rows['Result'].innerHTML = '';
|
|
var c = $a(d.rows['Result'],'div','comment',{paddingBottom:'4px',marginBottom:'4px',borderBottom:'1px solid #CCC', marginLeft:'4px'});
|
|
if(r.values.length==50)
|
|
c.innerHTML = 'Showing max 50 results. Use filters to narrow down your search';
|
|
else
|
|
c.innerHTML = 'Showing '+r.values.length+' resuts.';
|
|
|
|
var w = $a(d.rows['Result'],'div','',{height:'240px',overflow:'auto',margin:'4px'});
|
|
for(var i=0; i<r.values.length; i++) {
|
|
var div = $a(w,'div','',{marginBottom:'4px',paddingBottom:'4px',borderBottom:'1px dashed #CCC'});
|
|
|
|
// link
|
|
var l = $a($a(div,'div'),'span','link_type'); l.innerHTML = r.values[i][0]; l.link_name = r.values[i][0]; l.dt = r.coloptions[0];
|
|
if(d.input)
|
|
l.onclick = function() { setlinkvalue(this.link_name); }
|
|
else
|
|
l.onclick = function() { loaddoc(this.dt, this.link_name); d.hide(); }
|
|
|
|
// support
|
|
var cl = []
|
|
for(var j=1; j<r.values[i].length; j++) cl.push(r.values[i][j]);
|
|
var c = $a(div,'div','comment',{marginTop:'2px'}); c.innerHTML = cl.join(', ');
|
|
}
|
|
|
|
}
|
|
|
|
selector = d;
|
|
}
|