From 1e3f40bc91a895480cf312655aeebc151a7e5ea8 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 1 Feb 2016 17:32:49 +0530 Subject: [PATCH] [enhancement] [minor] frappe.ui.form.off will clear standard events --- .../public/js/frappe/form/script_manager.js | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/frappe/public/js/frappe/form/script_manager.js b/frappe/public/js/frappe/form/script_manager.js index 56cec521af..98bac6d9fa 100644 --- a/frappe/public/js/frappe/form/script_manager.js +++ b/frappe/public/js/frappe/form/script_manager.js @@ -3,20 +3,26 @@ frappe.provide("frappe.ui.form.handlers"); +frappe.ui.form.get_event_handler_list = function(doctype, fieldname) { + if(!frappe.ui.form.handlers[doctype]) { + frappe.ui.form.handlers[doctype] = {}; + } + if(!frappe.ui.form.handlers[doctype][fieldname]) { + frappe.ui.form.handlers[doctype][fieldname] = []; + } + return frappe.ui.form.handlers[doctype][fieldname]; +} + frappe.ui.form.on = frappe.ui.form.on_change = function(doctype, fieldname, handler) { var add_handler = function(fieldname, handler) { - if(!frappe.ui.form.handlers[doctype]) { - frappe.ui.form.handlers[doctype] = {}; - } - if(!frappe.ui.form.handlers[doctype][fieldname]) { - frappe.ui.form.handlers[doctype][fieldname] = []; - } - frappe.ui.form.handlers[doctype][fieldname].push(handler); + var handler_list = frappe.ui.form.get_event_handler_list(doctype, fieldname); + handler_list.push(handler); // add last handler to events so it can be called as // frm.events.handler(frm) - if(cur_frm && cur_frm.doctype===doctype) + if(cur_frm && cur_frm.doctype===doctype) { cur_frm.events[fieldname] = handler; + } } if (!handler && $.isPlainObject(fieldname)) { @@ -32,6 +38,23 @@ frappe.ui.form.on = frappe.ui.form.on_change = function(doctype, fieldname, hand } } +// remove standard event handlers +frappe.ui.form.off = function(doctype, fieldname, handler) { + var handler_list = frappe.ui.form.get_event_handler_list(doctype, fieldname); + if(handler_list.length) { + frappe.ui.form.handlers[doctype][fieldname] = []; + } + + if(cur_frm && cur_frm.doctype===doctype && cur_frm.events[fieldname]) { + delete cur_frm.events[fieldname]; + } + + if(cur_frm && cur_frm.cscript && cur_frm.cscript[fieldname]) { + delete cur_frm.cscript[fieldname]; + } +} + + frappe.ui.form.trigger = function(doctype, fieldname, callback) { cur_frm.script_manager.trigger(fieldname, doctype, null, callback); }