You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

105 lines
2.8 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
  2. // MIT License. See license.txt
  3. wn.ui.form.LinkSelector = Class.extend({
  4. _help: "Dialog box to select a Link Value",
  5. init: function(opts) {
  6. /* help: Options: doctype, get_query, target */
  7. $.extend(this, opts);
  8. var me = this;
  9. if(this.doctype!="[Select]") {
  10. wn.model.with_doctype(this.doctype, function(r) {
  11. me.make();
  12. });
  13. } else {
  14. this.make();
  15. }
  16. },
  17. make: function() {
  18. this.dialog = new wn.ui.Dialog({
  19. "title": "Select " + (this.doctype=='[Select]' ? "Value" : this.doctype),
  20. "fields": [
  21. {
  22. fieldtype: "Data", fieldname: "txt", label: "Beginning with",
  23. description: "You can use wildcard %",
  24. },
  25. {
  26. fieldtype: "Select", fieldname: "search_field", label: "Search With"
  27. },
  28. {
  29. fieldtype: "Button", fieldname: "search", label: "Search",
  30. },
  31. {
  32. fieldtype: "HTML", fieldname: "results"
  33. }
  34. ]
  35. });
  36. var search_fields = wn.model.get_value("DocType", this.doctype, "search_fields"),
  37. me = this;
  38. // add search fields
  39. if(this.doctype!="[Select]" && search_fields) {
  40. var search_fields = search_fields.split(",");
  41. this.dialog.fields_dict.search_field.$input.add_options(
  42. [{value:"name", label:"ID"}].concat(
  43. $.map(search_fields, function(fieldname) {
  44. fieldname = strip(fieldname);
  45. var df = wn.meta.docfield_map[me.doctype][fieldname];
  46. return {
  47. value: fieldname,
  48. label: df ? df.label : fieldname
  49. }
  50. })));
  51. } else {
  52. this.dialog.fields_dict.search_field.$wrapper.toggle(false);
  53. }
  54. if(this.txt)
  55. this.dialog.fields_dict.txt.set_input(this.txt);
  56. this.dialog.fields_dict.search.$input.on("click", function() {
  57. me.search(this);
  58. });
  59. this.dialog.show();
  60. },
  61. search: function(btn) {
  62. var args = {
  63. txt: this.dialog.fields_dict.txt.get_value(),
  64. doctype: this.doctype,
  65. searchfield: this.dialog.fields_dict.search_field.get_value() || "name"
  66. },
  67. me = this;
  68. this.target.set_custom_query(args);
  69. return wn.call({
  70. method: "webnotes.widgets.search.search_widget",
  71. type: "GET",
  72. args: args,
  73. callback: function(r) {
  74. var parent = me.dialog.fields_dict.results.$wrapper;
  75. parent.empty();
  76. $.each(r.values, function(i, v) {
  77. var row = $(repl('<p><a href="#" data-value="%(name)s">%(name)s</a> \
  78. <span class="text-muted">%(values)s</span></p>', {
  79. name: v[0],
  80. values: v.splice(1).join(", ")
  81. })).appendTo(parent);
  82. row.find("a").click(function() {
  83. var value = $(this).attr("data-value");
  84. if(me.target.doctype)
  85. me.target.parse_validate_and_set_in_model(value);
  86. else {
  87. me.target.set_input(value);
  88. me.target.$input.trigger("change");
  89. }
  90. me.dialog.hide();
  91. return false;
  92. })
  93. })
  94. },
  95. btn: btn
  96. });
  97. }
  98. })