Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

115 rader
3.2 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  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. if(r.values.length) {
  77. $.each(r.values, function(i, v) {
  78. var row = $(repl('<p><a href="#" data-value="%(name)s">%(name)s</a> \
  79. <span class="text-muted">%(values)s</span></p>', {
  80. name: v[0],
  81. values: v.splice(1).join(", ")
  82. })).appendTo(parent);
  83. row.find("a").click(function() {
  84. var value = $(this).attr("data-value");
  85. if(me.target.doctype)
  86. me.target.parse_validate_and_set_in_model(value);
  87. else {
  88. me.target.set_input(value);
  89. me.target.$input.trigger("change");
  90. }
  91. me.dialog.hide();
  92. return false;
  93. })
  94. })
  95. } else {
  96. $('<div class="alert alert-info">' + wn._("No Results")
  97. + (wn.model.can_read(me.doctype) ?
  98. ('. <a class="new-doc">'
  99. + wn._("Make a new") + " " + wn._(me.doctype) + "</a>") : '')
  100. + '</div>').appendTo(parent).find(".new-doc").click(function() {
  101. cur_frm.new_doc(me.doctype, me.target);
  102. });
  103. }
  104. },
  105. btn: btn
  106. });
  107. }
  108. })