devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
219 lines (210 loc) • 7.92 kB
JavaScript
/**
* DevExtreme (ui/text_box/texteditor_button_collection/index.js)
* Version: 19.2.6
* Build date: Thu Jan 30 2020
*
* Copyright (c) 2012 - 2020 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _renderer = require("../../../core/renderer");
var _renderer2 = _interopRequireDefault(_renderer);
var _custom = require("./custom");
var _custom2 = _interopRequireDefault(_custom);
var _extend = require("../../../core/utils/extend");
var _array = require("../../../core/utils/array");
var _ui = require("../../widget/ui.errors");
var _ui2 = _interopRequireDefault(_ui);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
"default": obj
}
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function")
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) {
descriptor.writable = true
}
Object.defineProperty(target, descriptor.key, descriptor)
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) {
_defineProperties(Constructor.prototype, protoProps)
}
if (staticProps) {
_defineProperties(Constructor, staticProps)
}
return Constructor
}
function _typeof(obj) {
if ("function" === typeof Symbol && "symbol" === typeof Symbol.iterator) {
_typeof = function(obj) {
return typeof obj
}
} else {
_typeof = function(obj) {
return obj && "function" === typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj
}
}
return _typeof(obj)
}
var TEXTEDITOR_BUTTONS_CONTAINER_CLASS = "dx-texteditor-buttons-container";
function checkButtonInfo(buttonInfo) {
var checkButtonType = function() {
if (!buttonInfo || "object" !== _typeof(buttonInfo) || Array.isArray(buttonInfo)) {
throw _ui2.default.Error("E1053")
}
};
var checkLocation = function() {
var location = buttonInfo.location;
if ("location" in buttonInfo && "after" !== location && "before" !== location) {
buttonInfo.location = "after"
}
};
var checkNameIsDefined = function() {
if (!("name" in buttonInfo)) {
throw _ui2.default.Error("E1054")
}
};
var checkNameIsString = function() {
var name = buttonInfo.name;
if ("string" !== typeof name) {
throw _ui2.default.Error("E1055")
}
};
checkButtonType();
checkNameIsDefined();
checkNameIsString();
checkLocation()
}
function checkNamesUniqueness(existingNames, newName) {
if (existingNames.indexOf(newName) !== -1) {
throw _ui2.default.Error("E1055", newName)
}
existingNames.push(newName)
}
function isPredefinedButtonName(name, predefinedButtonsInfo) {
return !!(0, _array.find)(predefinedButtonsInfo, function(info) {
return info.name === name
})
}
var TextEditorButtonCollection = function() {
function TextEditorButtonCollection(editor, defaultButtonsInfo) {
_classCallCheck(this, TextEditorButtonCollection);
this.buttons = [];
this.defaultButtonsInfo = defaultButtonsInfo;
this.editor = editor
}
_createClass(TextEditorButtonCollection, [{
key: "_compileButtonInfo",
value: function(buttons) {
var _this = this;
var names = [];
return buttons.map(function(button) {
var isStringButton = "string" === typeof button;
if (!isStringButton) {
checkButtonInfo(button)
}
var isDefaultButton = isStringButton || isPredefinedButtonName(button.name, _this.defaultButtonsInfo);
if (isDefaultButton) {
var defaultButtonInfo = (0, _array.find)(_this.defaultButtonsInfo, function(_ref) {
var name = _ref.name;
return name === button || name === button.name
});
if (!defaultButtonInfo) {
throw _ui2.default.Error("E1056", _this.editor.NAME, button)
}
checkNamesUniqueness(names, button);
return defaultButtonInfo
} else {
var name = button.name;
checkNamesUniqueness(names, name);
return (0, _extend.extend)(button, {
Ctor: _custom2.default
})
}
})
}
}, {
key: "_createButton",
value: function(buttonsInfo) {
var Ctor = buttonsInfo.Ctor,
options = buttonsInfo.options,
name = buttonsInfo.name;
var button = new Ctor(name, this.editor, options);
this.buttons.push(button);
return button
}
}, {
key: "_renderButtons",
value: function(buttons, $container, targetLocation) {
var _this2 = this;
var $buttonsContainer = null;
var buttonsInfo = buttons ? this._compileButtonInfo(buttons) : this.defaultButtonsInfo;
var getButtonsContainer = function() {
$buttonsContainer = $buttonsContainer || (0, _renderer2.default)("<div>").addClass(TEXTEDITOR_BUTTONS_CONTAINER_CLASS);
"before" === targetLocation ? $container.prepend($buttonsContainer) : $container.append($buttonsContainer);
return $buttonsContainer
};
buttonsInfo.forEach(function(buttonsInfo) {
var _buttonsInfo$location = buttonsInfo.location,
location = void 0 === _buttonsInfo$location ? "after" : _buttonsInfo$location;
if (location === targetLocation) {
_this2._createButton(buttonsInfo).render(getButtonsContainer())
}
});
return $buttonsContainer
}
}, {
key: "clean",
value: function() {
this.buttons.forEach(function(button) {
return button.dispose()
});
this.buttons = []
}
}, {
key: "getButton",
value: function(buttonName) {
var button = (0, _array.find)(this.buttons, function(_ref2) {
var name = _ref2.name;
return name === buttonName
});
return button && button.instance
}
}, {
key: "renderAfterButtons",
value: function(buttons, $container) {
return this._renderButtons(buttons, $container, "after")
}
}, {
key: "renderBeforeButtons",
value: function(buttons, $container) {
return this._renderButtons(buttons, $container, "before")
}
}, {
key: "updateButtons",
value: function(names) {
this.buttons.forEach(function(button) {
if (!names || names.indexOf(button.name) !== -1) {
button.update()
}
})
}
}]);
return TextEditorButtonCollection
}();
exports.default = TextEditorButtonCollection;