ソースを参照

commonify parse_validate_and_set_in_modal, onchange in df (#3540)

version-14
Prateeksha Singh 8年前
committed by Rushabh Mehta
コミット
283f67d752
3個のファイルの変更54行の追加103行の削除
  1. +51
    -63
      frappe/public/js/frappe/form/control.js
  2. +3
    -2
      frappe/public/js/frappe/form/grid.js
  3. +0
    -38
      frappe/public/js/frappe/form/script_manager.js

+ 51
- 63
frappe/public/js/frappe/form/control.js ファイルの表示

@@ -100,7 +100,7 @@ frappe.ui.form.Control = Class.extend({
set_value: function(value) {
this.parse_validate_and_set_in_model(value);
},
parse_validate_and_set_in_model: function(value) {
parse_validate_and_set_in_model: function(value, e) {
var me = this;
if(this.inside_change_event) return;
this.inside_change_event = true;
@@ -110,6 +110,11 @@ frappe.ui.form.Control = Class.extend({
me.set_model_value(value);
me.inside_change_event = false;
me.set_mandatory && me.set_mandatory(value);

if(me.df.change || me.df.onchange) {
// onchange event specified in df
(me.df.change || me.df.onchange).apply(me, [e]);
}
}

this.validate ? this.validate(value, set) : set(value);
@@ -333,39 +338,8 @@ frappe.ui.form.ControlInput = frappe.ui.form.Control.extend({

bind_change_event: function() {
var me = this;

this.$input && this.$input.on("change", this.change || function(e) {
if(me.df.change || me.df.onchange) {
// onchange event specified in df
(me.df.change || me.df.onchange).apply(this, [e]);
return;
}
if(me.doctype && me.docname && me.get_value) {
me.parse_validate_and_set_in_model(me.get_value());
} else {
// inline
var value = me.get_value();
var parsed = me.parse ? me.parse(value) : value;
var set_input = function(before, after) {
if(before !== after) {
me.set_input(after);
}
if(me.doc) {
me.doc[me.df.fieldname] = value;
}
me.set_mandatory && me.set_mandatory(after);
if(me.after_validate) {
me.after_validate(after, me.$input);
}
}
if(me.validate) {
me.validate(parsed, function(validated) {
set_input(value, validated);
});
} else {
set_input(value, parsed);
}
}
me.parse_validate_and_set_in_model(me.get_value(), e);
});
},
bind_focusout: function() {
@@ -1430,22 +1404,8 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
return;
}
var value = me.get_value();
if(me.doctype && me.docname) {
if(value!==me.last_value) {
me.parse_validate_and_set_in_model(value);
}
} else {
var cache_list = me.$input.cache[me.get_options()];
if (cache_list && cache_list[""]) {
var docs = cache_list[""].map(item => item.label);
if(docs.includes(value)) {
me.set_mandatory(value);
} else {
me.$input.val("");
}
} else {
me.$input.val(value);
}
if(value!==me.last_value) {
me.parse_validate_and_set_in_model(value);
}
});

@@ -1487,17 +1447,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
frappe.boot.user.last_selected_values[me.df.options] = item.value;
}

if(me.frm && me.frm.doc) {
me.selected = true;
me.parse_validate_and_set_in_model(item.value);
setTimeout(function() {
me.selected = false;
}, 100);
} else {
me.$input.val(item.value);
me.$input.trigger("change");
me.set_mandatory(item.value);
}
me.parse_validate_and_set_in_model(item.value);
});

this.$input.on("awesomplete-selectcomplete", function(e) {
@@ -1585,11 +1535,49 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({
return;
}

if(this.frm) {
this.frm.script_manager.validate_link_and_fetch(this.df, this.get_options(),
this.docname, value, callback);
this.validate_link_and_fetch(this.df, this.get_options(),
this.docname, value, callback);
},
validate_link_and_fetch: function(df, doctype, docname, value, callback) {
var me = this;

if(value) {
var fetch = '';

if(this.frm && this.frm.fetch_dict[df.fieldname]) {
fetch = this.frm.fetch_dict[df.fieldname].columns.join(', ');
}

return frappe.call({
method:'frappe.desk.form.utils.validate_link',
type: "GET",
args: {
'value': value,
'options': doctype,
'fetch': fetch
},
no_spinner: true,
callback: function(r) {
if(r.message=='Ok') {
if(r.fetch_values && docname) {
me.set_fetch_values(df, docname, r.fetch_values);
}
if(callback) callback(r.valid_value);
} else {
if(callback) callback("");
}
}
});
} else if(callback) {
callback(value);
}
},
set_fetch_values: function(df, docname, fetch_values) {
var fl = this.frm.fetch_dict[df.fieldname].fields;
for(var i=0; i < fl.length; i++) {
frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype);
}
}
});

if(Awesomplete) {


+ 3
- 2
frappe/public/js/frappe/form/grid.js ファイルの表示

@@ -169,7 +169,7 @@ frappe.ui.form.Grid = Class.extend({
this.truncate_rows(data);
this.grid_rows_by_docname = {};

for(var ri=0;ri < data.length; ri++) {
for(var ri=0; ri < data.length; ri++) {
var d = data[ri];

if(d.idx===undefined) {
@@ -951,7 +951,6 @@ frappe.ui.form.GridRow = Class.extend({
parent = column.field_area,
df = column.df;


// no text editor in grid
if (df.fieldtype=='Text Editor') {
df.fieldtype = 'Text';
@@ -966,6 +965,8 @@ frappe.ui.form.GridRow = Class.extend({
doctype: this.doc.doctype,
docname: this.doc.name,
frm: this.grid.frm,
grid: this.grid,
grid_row: this,
value: this.doc[df.fieldname]
});



+ 0
- 38
frappe/public/js/frappe/form/script_manager.js ファイルの表示

@@ -150,44 +150,6 @@ frappe.ui.form.ScriptManager = Class.extend({
console.log("----- end of error message -----");
console.group && console.groupEnd();
},
validate_link_and_fetch: function(df, doctype, docname, value, callback) {
var me = this;

if(value) {
var fetch = '';

if(this.frm && this.frm.fetch_dict[df.fieldname])
fetch = this.frm.fetch_dict[df.fieldname].columns.join(', ');

return frappe.call({
method:'frappe.desk.form.utils.validate_link',
type: "GET",
args: {
'value': value,
'options': doctype,
'fetch': fetch
},
no_spinner: true,
callback: function(r) {
if(r.message=='Ok') {
if(r.fetch_values)
me.set_fetch_values(df, docname, r.fetch_values);
if(callback) callback(r.valid_value);
} else {
if(callback) callback("");
}
}
});
} else if(callback) {
callback(value);
}
},
set_fetch_values: function(df, docname, fetch_values) {
var fl = this.frm.fetch_dict[df.fieldname].fields;
for(var i=0; i < fl.length; i++) {
frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype);
}
},
copy_from_first_row: function(parentfield, current_row, fieldnames) {
var data = this.frm.doc[parentfield];
if(data.length===1 || data[0]===current_row) return;


読み込み中…
キャンセル
保存