// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. // MIT License. See license.txt wn.ui.form.LinkSelector = Class.extend({ _help: "Dialog box to select a Link Value", init: function(opts) { /* help: Options: doctype, get_query, target */ $.extend(this, opts); var me = this; if(this.doctype!="[Select]") { wn.model.with_doctype(this.doctype, function(r) { me.make(); }); } else { this.make(); } }, make: function() { this.dialog = new wn.ui.Dialog({ "title": "Select " + (this.doctype=='[Select]' ? "Value" : this.doctype), "fields": [ { fieldtype: "Data", fieldname: "txt", label: "Beginning with", description: "You can use wildcard %", }, { fieldtype: "Select", fieldname: "search_field", label: "Search With" }, { fieldtype: "Button", fieldname: "search", label: "Search", }, { fieldtype: "HTML", fieldname: "results" } ] }); var search_fields = wn.model.get_value("DocType", this.doctype, "search_fields"), me = this; // add search fields if(this.doctype!="[Select]" && search_fields) { var search_fields = search_fields.split(","); this.dialog.fields_dict.search_field.$input.add_options( [{value:"name", label:"ID"}].concat( $.map(search_fields, function(fieldname) { fieldname = strip(fieldname); var df = wn.meta.docfield_map[me.doctype][fieldname]; return { value: fieldname, label: df ? df.label : fieldname } }))); } else { this.dialog.fields_dict.search_field.$wrapper.toggle(false); } if(this.txt) this.dialog.fields_dict.txt.set_input(this.txt); this.dialog.fields_dict.search.$input.on("click", function() { me.search(this); }); this.dialog.show(); }, search: function(btn) { var args = { txt: this.dialog.fields_dict.txt.get_value(), doctype: this.doctype, searchfield: this.dialog.fields_dict.search_field.get_value() || "name" }, me = this; this.target.set_custom_query(args); return wn.call({ method: "webnotes.widgets.search.search_widget", type: "GET", args: args, callback: function(r) { var parent = me.dialog.fields_dict.results.$wrapper; parent.empty(); $.each(r.values, function(i, v) { var row = $(repl('
%(name)s \ %(values)s
', { name: v[0], values: v.splice(1).join(", ") })).appendTo(parent); row.find("a").click(function() { var value = $(this).attr("data-value"); if(me.target.doctype) me.target.parse_validate_and_set_in_model(value); else { me.target.set_input(value); me.target.$input.trigger("change"); } me.dialog.hide(); return false; }) }) }, btn: btn }); } })