slate
Version:
A completely customizable framework for building rich text editors.
229 lines (172 loc) • 13.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _isPlainObject = require('is-plain-object');
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
var _immutable = require('immutable');
var _modelTypes = require('../constants/model-types');
var _modelTypes2 = _interopRequireDefault(_modelTypes);
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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
/**
* Default properties.
*
* @type {Object}
*/
var DEFAULTS = {
marks: new _immutable.Set(),
text: ''
};
/**
* Character.
*
* @type {Character}
*/
var Character = function (_Record) {
_inherits(Character, _Record);
function Character() {
_classCallCheck(this, Character);
return _possibleConstructorReturn(this, (Character.__proto__ || Object.getPrototypeOf(Character)).apply(this, arguments));
}
_createClass(Character, [{
key: 'toJSON',
/**
* Return a JSON representation of the character.
*
* @return {Object}
*/
value: function toJSON() {
var object = {
kind: this.kind,
text: this.text,
marks: this.marks.toArray().map(function (m) {
return m.toJSON();
})
};
return object;
}
/**
* Alias `toJS`.
*/
}, {
key: 'toJS',
value: function toJS() {
return this.toJSON();
}
}, {
key: 'kind',
/**
* Get the kind.
*
* @return {String}
*/
get: function get() {
return 'character';
}
}], [{
key: 'create',
/**
* Create a `Character` with `attrs`.
*
* @param {Object|String|Character} attrs
* @return {Character}
*/
value: function create() {
var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
if (Character.isCharacter(attrs)) {
return attrs;
}
if (typeof attrs == 'string') {
attrs = { text: attrs };
}
if ((0, _isPlainObject2.default)(attrs)) {
return Character.fromJSON(attrs);
}
throw new Error('`Character.create` only accepts objects, strings or characters, but you passed it: ' + attrs);
}
/**
* Create a list of `Characters` from `elements`.
*
* @param {String|Array<Object|Character|String>|List<Object|Character|String>} elements
* @return {List<Character>}
*/
}, {
key: 'createList',
value: function createList() {
var elements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
if (typeof elements == 'string') {
elements = elements.split('');
}
if (_immutable.List.isList(elements) || Array.isArray(elements)) {
var list = new _immutable.List(elements.map(Character.create));
return list;
}
throw new Error('`Block.createList` only accepts strings, arrays or lists, but you passed it: ' + elements);
}
/**
* Create a `Character` from a JSON `object`.
*
* @param {Object} object
* @return {Character}
*/
}, {
key: 'fromJSON',
value: function fromJSON(object) {
var text = object.text,
_object$marks = object.marks,
marks = _object$marks === undefined ? [] : _object$marks;
if (typeof text != 'string') {
throw new Error('`Character.fromJSON` requires a block `text` string.');
}
var character = new Character({
text: text,
marks: new _immutable.Set(marks)
});
return character;
}
/**
* Alias `fromJS`.
*/
}, {
key: 'isCharacter',
/**
* Check if `any` is a `Character`.
*
* @param {Any} any
* @return {Boolean}
*/
value: function isCharacter(any) {
return !!(any && any[_modelTypes2.default.CHARACTER]);
}
/**
* Check if `any` is a character list.
*
* @param {Any} any
* @return {Boolean}
*/
}, {
key: 'isCharacterList',
value: function isCharacterList(any) {
return _immutable.List.isList(any) && any.every(function (item) {
return Character.isCharacter(item);
});
}
}]);
return Character;
}((0, _immutable.Record)(DEFAULTS));
/**
* Attach a pseudo-symbol for type checking.
*/
Character.fromJS = Character.fromJSON;
Character.prototype[_modelTypes2.default.CHARACTER] = true;
/**
* Export.
*
* @type {Character}
*/
exports.default = Character;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbHMvY2hhcmFjdGVyLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRTIiwibWFya3MiLCJ0ZXh0IiwiQ2hhcmFjdGVyIiwib2JqZWN0Iiwia2luZCIsInRvQXJyYXkiLCJtYXAiLCJtIiwidG9KU09OIiwiYXR0cnMiLCJpc0NoYXJhY3RlciIsImZyb21KU09OIiwiRXJyb3IiLCJlbGVtZW50cyIsInNwbGl0IiwiaXNMaXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGlzdCIsImNyZWF0ZSIsImNoYXJhY3RlciIsImFueSIsIkNIQVJBQ1RFUiIsImV2ZXJ5IiwiaXRlbSIsImZyb21KUyIsInByb3RvdHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFDQTs7OztBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7QUFFQTs7Ozs7O0FBTUEsSUFBTUEsV0FBVztBQUNmQyxTQUFPLG9CQURRO0FBRWZDLFFBQU07QUFGUyxDQUFqQjs7QUFLQTs7Ozs7O0lBTU1DLFM7Ozs7Ozs7Ozs7Ozs7QUE0R0o7Ozs7Ozs2QkFNUztBQUNQLFVBQU1DLFNBQVM7QUFDYkMsY0FBTSxLQUFLQSxJQURFO0FBRWJILGNBQU0sS0FBS0EsSUFGRTtBQUdiRCxlQUFPLEtBQUtBLEtBQUwsQ0FBV0ssT0FBWCxHQUFxQkMsR0FBckIsQ0FBeUI7QUFBQSxpQkFBS0MsRUFBRUMsTUFBRixFQUFMO0FBQUEsU0FBekI7QUFITSxPQUFmOztBQU1BLGFBQU9MLE1BQVA7QUFDRDs7QUFFRDs7Ozs7OzJCQUlPO0FBQ0wsYUFBTyxLQUFLSyxNQUFMLEVBQVA7QUFDRDs7Ozs7QUFoQ0Q7Ozs7Ozt3QkFNVztBQUNULGFBQU8sV0FBUDtBQUNEOzs7OztBQXhHRDs7Ozs7Ozs2QkFPMEI7QUFBQSxVQUFaQyxLQUFZLHVFQUFKLEVBQUk7O0FBQ3hCLFVBQUlQLFVBQVVRLFdBQVYsQ0FBc0JELEtBQXRCLENBQUosRUFBa0M7QUFDaEMsZUFBT0EsS0FBUDtBQUNEOztBQUVELFVBQUksT0FBT0EsS0FBUCxJQUFnQixRQUFwQixFQUE4QjtBQUM1QkEsZ0JBQVEsRUFBRVIsTUFBTVEsS0FBUixFQUFSO0FBQ0Q7O0FBRUQsVUFBSSw2QkFBY0EsS0FBZCxDQUFKLEVBQTBCO0FBQ3hCLGVBQU9QLFVBQVVTLFFBQVYsQ0FBbUJGLEtBQW5CLENBQVA7QUFDRDs7QUFFRCxZQUFNLElBQUlHLEtBQUoseUZBQWtHSCxLQUFsRyxDQUFOO0FBQ0Q7O0FBRUQ7Ozs7Ozs7OztpQ0FPaUM7QUFBQSxVQUFmSSxRQUFlLHVFQUFKLEVBQUk7O0FBQy9CLFVBQUksT0FBT0EsUUFBUCxJQUFtQixRQUF2QixFQUFpQztBQUMvQkEsbUJBQVdBLFNBQVNDLEtBQVQsQ0FBZSxFQUFmLENBQVg7QUFDRDs7QUFFRCxVQUFJLGdCQUFLQyxNQUFMLENBQVlGLFFBQVosS0FBeUJHLE1BQU1DLE9BQU4sQ0FBY0osUUFBZCxDQUE3QixFQUFzRDtBQUNwRCxZQUFNSyxPQUFPLG9CQUFTTCxTQUFTUCxHQUFULENBQWFKLFVBQVVpQixNQUF2QixDQUFULENBQWI7QUFDQSxlQUFPRCxJQUFQO0FBQ0Q7O0FBRUQsWUFBTSxJQUFJTixLQUFKLG1GQUE0RkMsUUFBNUYsQ0FBTjtBQUNEOztBQUVEOzs7Ozs7Ozs7NkJBT2dCVixNLEVBQVE7QUFBQSxVQUVwQkYsSUFGb0IsR0FJbEJFLE1BSmtCLENBRXBCRixJQUZvQjtBQUFBLDBCQUlsQkUsTUFKa0IsQ0FHcEJILEtBSG9CO0FBQUEsVUFHcEJBLEtBSG9CLGlDQUdaLEVBSFk7OztBQU10QixVQUFJLE9BQU9DLElBQVAsSUFBZSxRQUFuQixFQUE2QjtBQUMzQixjQUFNLElBQUlXLEtBQUosQ0FBVSxzREFBVixDQUFOO0FBQ0Q7O0FBRUQsVUFBTVEsWUFBWSxJQUFJbEIsU0FBSixDQUFjO0FBQzlCRCxrQkFEOEI7QUFFOUJELGVBQU8sbUJBQVFBLEtBQVI7QUFGdUIsT0FBZCxDQUFsQjs7QUFLQSxhQUFPb0IsU0FBUDtBQUNEOztBQUVEOzs7Ozs7OztBQU1BOzs7Ozs7O2dDQU9tQkMsRyxFQUFLO0FBQ3RCLGFBQU8sQ0FBQyxFQUFFQSxPQUFPQSxJQUFJLHFCQUFZQyxTQUFoQixDQUFULENBQVI7QUFDRDs7QUFFRDs7Ozs7Ozs7O29DQU91QkQsRyxFQUFLO0FBQzFCLGFBQU8sZ0JBQUtOLE1BQUwsQ0FBWU0sR0FBWixLQUFvQkEsSUFBSUUsS0FBSixDQUFVO0FBQUEsZUFBUXJCLFVBQVVRLFdBQVYsQ0FBc0JjLElBQXRCLENBQVI7QUFBQSxPQUFWLENBQTNCO0FBQ0Q7Ozs7RUFoR3FCLHVCQUFPekIsUUFBUCxDOztBQXNJeEI7Ozs7QUF0SU1HLFMsQ0EwRUd1QixNLEdBQVN2QixVQUFVUyxRO0FBZ0U1QlQsVUFBVXdCLFNBQVYsQ0FBb0IscUJBQVlKLFNBQWhDLElBQTZDLElBQTdDOztBQUVBOzs7Ozs7a0JBTWVwQixTIiwiZmlsZSI6ImNoYXJhY3Rlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnaXMtcGxhaW4tb2JqZWN0J1xuaW1wb3J0IHsgTGlzdCwgUmVjb3JkLCBTZXQgfSBmcm9tICdpbW11dGFibGUnXG5cbmltcG9ydCBNT0RFTF9UWVBFUyBmcm9tICcuLi9jb25zdGFudHMvbW9kZWwtdHlwZXMnXG5cbi8qKlxuICogRGVmYXVsdCBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxuY29uc3QgREVGQVVMVFMgPSB7XG4gIG1hcmtzOiBuZXcgU2V0KCksXG4gIHRleHQ6ICcnLFxufVxuXG4vKipcbiAqIENoYXJhY3Rlci5cbiAqXG4gKiBAdHlwZSB7Q2hhcmFjdGVyfVxuICovXG5cbmNsYXNzIENoYXJhY3RlciBleHRlbmRzIFJlY29yZChERUZBVUxUUykge1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBgQ2hhcmFjdGVyYCB3aXRoIGBhdHRyc2AuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ3xDaGFyYWN0ZXJ9IGF0dHJzXG4gICAqIEByZXR1cm4ge0NoYXJhY3Rlcn1cbiAgICovXG5cbiAgc3RhdGljIGNyZWF0ZShhdHRycyA9IHt9KSB7XG4gICAgaWYgKENoYXJhY3Rlci5pc0NoYXJhY3RlcihhdHRycykpIHtcbiAgICAgIHJldHVybiBhdHRyc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXR0cnMgPT0gJ3N0cmluZycpIHtcbiAgICAgIGF0dHJzID0geyB0ZXh0OiBhdHRycyB9XG4gICAgfVxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoYXR0cnMpKSB7XG4gICAgICByZXR1cm4gQ2hhcmFjdGVyLmZyb21KU09OKGF0dHJzKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgXFxgQ2hhcmFjdGVyLmNyZWF0ZVxcYCBvbmx5IGFjY2VwdHMgb2JqZWN0cywgc3RyaW5ncyBvciBjaGFyYWN0ZXJzLCBidXQgeW91IHBhc3NlZCBpdDogJHthdHRyc31gKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGxpc3Qgb2YgYENoYXJhY3RlcnNgIGZyb20gYGVsZW1lbnRzYC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXk8T2JqZWN0fENoYXJhY3RlcnxTdHJpbmc+fExpc3Q8T2JqZWN0fENoYXJhY3RlcnxTdHJpbmc+fSBlbGVtZW50c1xuICAgKiBAcmV0dXJuIHtMaXN0PENoYXJhY3Rlcj59XG4gICAqL1xuXG4gIHN0YXRpYyBjcmVhdGVMaXN0KGVsZW1lbnRzID0gW10pIHtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnRzID09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLnNwbGl0KCcnKVxuICAgIH1cblxuICAgIGlmIChMaXN0LmlzTGlzdChlbGVtZW50cykgfHwgQXJyYXkuaXNBcnJheShlbGVtZW50cykpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBuZXcgTGlzdChlbGVtZW50cy5tYXAoQ2hhcmFjdGVyLmNyZWF0ZSkpXG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgXFxgQmxvY2suY3JlYXRlTGlzdFxcYCBvbmx5IGFjY2VwdHMgc3RyaW5ncywgYXJyYXlzIG9yIGxpc3RzLCBidXQgeW91IHBhc3NlZCBpdDogJHtlbGVtZW50c31gKVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGBDaGFyYWN0ZXJgIGZyb20gYSBKU09OIGBvYmplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge0NoYXJhY3Rlcn1cbiAgICovXG5cbiAgc3RhdGljIGZyb21KU09OKG9iamVjdCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRleHQsXG4gICAgICBtYXJrcyA9IFtdLFxuICAgIH0gPSBvYmplY3RcblxuICAgIGlmICh0eXBlb2YgdGV4dCAhPSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgQ2hhcmFjdGVyLmZyb21KU09OYCByZXF1aXJlcyBhIGJsb2NrIGB0ZXh0YCBzdHJpbmcuJylcbiAgICB9XG5cbiAgICBjb25zdCBjaGFyYWN0ZXIgPSBuZXcgQ2hhcmFjdGVyKHtcbiAgICAgIHRleHQsXG4gICAgICBtYXJrczogbmV3IFNldChtYXJrcyksXG4gICAgfSlcblxuICAgIHJldHVybiBjaGFyYWN0ZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGlhcyBgZnJvbUpTYC5cbiAgICovXG5cbiAgc3RhdGljIGZyb21KUyA9IENoYXJhY3Rlci5mcm9tSlNPTlxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBgYW55YCBpcyBhIGBDaGFyYWN0ZXJgLlxuICAgKlxuICAgKiBAcGFyYW0ge0FueX0gYW55XG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuXG4gIHN0YXRpYyBpc0NoYXJhY3RlcihhbnkpIHtcbiAgICByZXR1cm4gISEoYW55ICYmIGFueVtNT0RFTF9UWVBFUy5DSEFSQUNURVJdKVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGBhbnlgIGlzIGEgY2hhcmFjdGVyIGxpc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7QW55fSBhbnlcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG5cbiAgc3RhdGljIGlzQ2hhcmFjdGVyTGlzdChhbnkpIHtcbiAgICByZXR1cm4gTGlzdC5pc0xpc3QoYW55KSAmJiBhbnkuZXZlcnkoaXRlbSA9PiBDaGFyYWN0ZXIuaXNDaGFyYWN0ZXIoaXRlbSkpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBraW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHtTdHJpbmd9XG4gICAqL1xuXG4gIGdldCBraW5kKCkge1xuICAgIHJldHVybiAnY2hhcmFjdGVyJ1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYXJhY3Rlci5cbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3Qgb2JqZWN0ID0ge1xuICAgICAga2luZDogdGhpcy5raW5kLFxuICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgbWFya3M6IHRoaXMubWFya3MudG9BcnJheSgpLm1hcChtID0+IG0udG9KU09OKCkpLFxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3RcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGlhcyBgdG9KU2AuXG4gICAqL1xuXG4gIHRvSlMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9KU09OKClcbiAgfVxuXG59XG5cbi8qKlxuICogQXR0YWNoIGEgcHNldWRvLXN5bWJvbCBmb3IgdHlwZSBjaGVja2luZy5cbiAqL1xuXG5DaGFyYWN0ZXIucHJvdG90eXBlW01PREVMX1RZUEVTLkNIQVJBQ1RFUl0gPSB0cnVlXG5cbi8qKlxuICogRXhwb3J0LlxuICpcbiAqIEB0eXBlIHtDaGFyYWN0ZXJ9XG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgQ2hhcmFjdGVyXG4iXX0=
;