From d2d846a88e4e2881ab7b8dd322892d67acfedfc1 Mon Sep 17 00:00:00 2001 From: Joffrey JAFFEUX Date: Wed, 13 Nov 2019 15:49:01 +0100 Subject: [PATCH] DEV: prevents input/change events to cause a full rerender (#8339) Code should decide when to do something with the event value, and maybe cause a re-rerender but it shouldn't be automatic. This is currently a gigantic waste of resources. --- .../javascripts/discourse/widgets/hooks.js.es6 | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/widgets/hooks.js.es6 b/app/assets/javascripts/discourse/widgets/hooks.js.es6 index fb14a220b0..979c45a82d 100644 --- a/app/assets/javascripts/discourse/widgets/hooks.js.es6 +++ b/app/assets/javascripts/discourse/widgets/hooks.js.es6 @@ -47,10 +47,16 @@ export const WidgetDragHook = buildHook(DRAG_ATTRIBUTE_NAME); export const WidgetInputHook = buildHook(INPUT_ATTRIBUTE_NAME); export const WidgetChangeHook = buildHook(CHANGE_ATTRIBUTE_NAME); -function nodeCallback(node, attrName, cb) { +function nodeCallback(node, attrName, cb, options = { rerender: true }) { + const { rerender } = options; const widget = findWidget(node, attrName); + if (widget) { - widget.rerenderResult(() => cb(widget)); + if (rerender) { + widget.rerenderResult(() => cb(widget)); + } else { + cb(widget); + } } } @@ -173,11 +179,15 @@ WidgetClickHook.setupDocumentCallback = function() { }); $(document).on("input.discourse-widget", e => { - nodeCallback(e.target, INPUT_ATTRIBUTE_NAME, w => w.input(e)); + nodeCallback(e.target, INPUT_ATTRIBUTE_NAME, w => w.input(e), { + rerender: false + }); }); $(document).on("change.discourse-widget", e => { - nodeCallback(e.target, CHANGE_ATTRIBUTE_NAME, w => w.change(e)); + nodeCallback(e.target, CHANGE_ATTRIBUTE_NAME, w => w.change(e), { + rerender: false + }); }); _watchingDocument = true;