ui-tinymce icon indicating copy to clipboard operation
ui-tinymce copied to clipboard

Form gets $dirty by default with debounce = false

Open iJungleboy opened this issue 8 years ago • 3 comments

This is a follow up of issue #238 which should have fixed incorrect $dirty reports.

Basically what happens is that a form just loaded will report the field as being dirty, even if it hasn't been touched yet - IF debounce is set to false. When debounce is set to true, the warnings works kind-of correctly, but only after a certain delay - meaning the user must pause before hitting save.

iJungleboy avatar Jan 05 '17 10:01 iJungleboy

Please post a plunker reproducing the issue so people can look into fixing it.

A PR fixing the issue would be nice if you have found a reproducible bug.

deeg avatar Jan 16 '17 22:01 deeg

sorry for seeming daft, but I've never made a plunkr. Do you have a good sample using angular-ui-tinymce unto which I could then build upon?

iJungleboy avatar Jan 17 '17 06:01 iJungleboy

@deeg If debounce is set to 'false', no dirty-check is made before updating the view. Therefore, the editor is considered dirty by default if any of the events ('ExecCommand change NodeChange ObjectResized') are triggered. Take a look at 'debouncedUpdate', which performs a dirty-check. https://github.com/angular-ui/ui-tinymce/blob/master/src/tinymce.js#L95-L102

A tested patch:

// Update model when:
// - a button has been clicked [ExecCommand]
// - the editor content has been modified [change]
// - the node has changed [NodeChange]
// - an object has been resized (table, image) [ObjectResized]
ed.on('ExecCommand change NodeChange ObjectResized', function () {
    if (options.debounce) debouncedUpdate(ed);
    else if (ed.isDirty()) {
        ed.save();
        updateView(ed);
    }
});

christophbuehler avatar Apr 04 '17 13:04 christophbuehler