diff --git a/src/js/fields/advanced/RichTextEditorField.js b/src/js/fields/advanced/RichTextEditorField.js index 2ca7641b4..a77fa973c 100644 --- a/src/js/fields/advanced/RichTextEditorField.js +++ b/src/js/fields/advanced/RichTextEditorField.js @@ -16,14 +16,12 @@ // be sure to call into base method this.base(value); - const textArea = this.control[0].querySelector("textarea"); + const textArea = this._getTextArea(); if (!textArea) { return; } textArea.value = value - - // trigger re-render - textArea.dispatchEvent(new Event("input")); + this._triggerRichTextEditorRender(); }, /** @@ -31,13 +29,61 @@ */ getControlValue: function() { - const textArea = this.control[0].querySelector("textarea"); + const textArea = this._getTextArea(); if (!textArea) { return; } return textArea.value; }, + _getTextArea: function () { + if (!this.control || !this.control[0]) { + return null; + } + return this.control[0].querySelector("textarea"); + }, + + _triggerRichTextEditorRender: function () { + const textArea = this._getTextArea(); + if (!textArea) { + return; + } + + textArea.dispatchEvent(new Event("input")); + }, + + _setRichTextEditorDisabledState: function (disabled) { + const textArea = this._getTextArea(); + if (!textArea) { + return; + } + + textArea.disabled = disabled; + if (disabled) { + textArea.setAttribute("data-rich-textbox-disabled", "true"); + } else { + textArea.removeAttribute("data-rich-textbox-disabled"); + } + + this._triggerRichTextEditorRender(); + }, + + /** + * @see Alpaca.Fields.ControlField#disable + */ + disable: function () { + this.base(); + this._setRichTextEditorDisabledState(true); + }, + + /** + * @see Alpaca.Fields.ControlField#enable + */ + enable: function () { + this.base(); + this._setRichTextEditorDisabledState(false); + }, + /* builder_helpers */ /** diff --git a/src/js/fields/custom/Select2EntityPickerField.js b/src/js/fields/custom/Select2EntityPickerField.js index 2f09a6485..3aa03d069 100644 --- a/src/js/fields/custom/Select2EntityPickerField.js +++ b/src/js/fields/custom/Select2EntityPickerField.js @@ -143,6 +143,20 @@ } }, + disable: function() { + var $el = $(this.getControlEl()); + if ($el.data('select2')) { + $el.prop("disabled", true); + } + }, + + enable: function() { + var $el = $(this.getControlEl()); + if ($el.data('select2')) { + $el.prop("disabled", false); + } + }, + _validateEnum: function () { return true; }, diff --git a/src/js/fields/list/Select2Field.js b/src/js/fields/list/Select2Field.js index b03f5a251..8468d6a3e 100644 --- a/src/js/fields/list/Select2Field.js +++ b/src/js/fields/list/Select2Field.js @@ -177,6 +177,20 @@ } }, + disable: function() { + var $el = $(this.getControlEl()); + if ($el.data('select2')) { + $el.prop("disabled", true); + } + }, + + enable: function() { + var $el = $(this.getControlEl()); + if ($el.data('select2')) { + $el.prop("disabled", false); + } + }, + _validateEnum: function () { return true; },