gd-sprest-bs
Version:
SharePoint JavaScript, TypeScript and Web Components designed using the Bootstrap framework.
150 lines (149 loc) • 5.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RichTextBoxControlType = exports.RichTextBox = exports.RichTextBoxTypes = void 0;
var gd_bs_1 = require("gd-bs");
var quill_1 = require("quill");
var Toolbars = require("./toolbar");
/**
* Toolbar Types
*/
var RichTextBoxTypes;
(function (RichTextBoxTypes) {
RichTextBoxTypes[RichTextBoxTypes["None"] = 0] = "None";
RichTextBoxTypes[RichTextBoxTypes["Basic"] = 1] = "Basic";
RichTextBoxTypes[RichTextBoxTypes["Full"] = 2] = "Full";
})(RichTextBoxTypes = exports.RichTextBoxTypes || (exports.RichTextBoxTypes = {}));
/**
* Rich TextBox
*/
var RichTextBox = function (props) {
// Create the editor element
var elRichTextBox = document.createElement("div");
elRichTextBox.classList.add("rich-textbox");
// Create the toolbar element
var elToolbar = document.createElement("div");
elToolbar.classList.add("toolbar-container");
props.disabled ? null : elToolbar.classList.add("form-control");
elRichTextBox.appendChild(elToolbar);
// Create the editor element
var elEditor = document.createElement("div");
elEditor.classList.add("editor-container");
props.disabled ? elEditor.classList.add("rounded") : elEditor.classList.add("form-control");
elRichTextBox.appendChild(elEditor);
// Get the options and default the values
var options = props.options || {};
options.modules = options.modules || {};
options.placeholder ? options.placeholder = props.placeholder : null;
options.readOnly == null && typeof (props.disabled) === "boolean" ? options.readOnly = props.disabled : null;
options.theme = options.theme == null ? "snow" : options.theme;
// See if are setting the default toolbar options
var showToolbar = true;
if (options.modules.toolbar == null) {
// Set the toolbar options
switch (props.toolbarType) {
// None
case RichTextBoxTypes.None:
elToolbar.innerHTML = "";
showToolbar = false;
break;
// Basic
case RichTextBoxTypes.Basic:
elToolbar.innerHTML = Toolbars.BasicToolbar;
break;
// Default - Full
default:
elToolbar.innerHTML = Toolbars.FullToolbar;
break;
}
// Set the toolbar
options.modules.toolbar = elToolbar;
}
else {
// Set the toolbar container
options.modules.toolbar.container = elToolbar;
}
// Create the element
var el = document.createElement("div");
el.appendChild(elRichTextBox);
// See if we are rendering it to an element
if (props.el) {
// Ensure the parent element exists
if (props.el.parentElement && props.el.parentElement.classList) {
// Set the bootstrap class
props.el.parentElement.classList.contains("bs") ? null : props.el.parentElement.classList.add("bs");
}
// Append the elements
while (el.children.length > 0) {
props.el.appendChild(el.children[0]);
}
// Update the element
el = props.el;
}
else {
// Set the bootstrap class
el.classList.add("bs");
}
// Apply the plugin
var quillObj = new quill_1.default(elEditor, options);
// See if we are hiding the toolbar
if (!showToolbar) {
// Remove the snow class
elToolbar.classList.remove("ql-snow");
}
// Create the object
var obj = {
el: elRichTextBox,
elContents: quillObj.root,
quillObj: quillObj,
getHtml: function () { return obj.getText() ? quillObj.root.innerHTML : ""; },
getText: function () { return quillObj.getText().trim(); },
setHtml: function (value) {
// Convert the html to allow the library to run any conversions to display it correctly
quillObj.setContents(quillObj.clipboard.convert({ html: value || "" }));
}
};
// Set the value
props.value ? obj.setHtml(props.value) : null;
// Execute the assign to event
props.assignTo ? props.assignTo(obj) : null;
// Return the object
return obj;
};
exports.RichTextBox = RichTextBox;
// Customize the form control
exports.RichTextBoxControlType = 102;
gd_bs_1.Components.FormControlTypes["RichTextBox"] = exports.RichTextBoxControlType;
gd_bs_1.Components.CustomControls.registerType(exports.RichTextBoxControlType, function (props) {
var rtb = null;
// Set the created method
var onRendered = props.onControlRendered;
props.onControlRendered = function (ctrl) {
// Render a date/time
rtb = (0, exports.RichTextBox)({
className: props.className,
disabled: props.isDisabled || props.isReadonly,
el: ctrl.el,
options: props.options,
rows: props.rows,
toolbarType: props.toolbarType,
placeholder: props.placeholder,
value: props.value
});
// See if the label exists
var elLabel = ctrl["_elLabel"];
if (elLabel) {
// Set the id and aria properties
elLabel ? elLabel.id = (props.id || props.name) + "_label" : null;
//rtb.el.querySelector("input").setAttribute("aria-labelledby", elLabel.id);
}
// Set the control
ctrl.setControl(rtb);
// Call the custom render event
onRendered ? onRendered(ctrl) : null;
};
// Register a people picker
props.onGetValue = function (ctrl) {
// Return the value
return rtb ? rtb.getHtml() : ctrl.value;
};
});