braft-editor
Version:
Rich Text Editor Based On Draft.js
1,794 lines (1,474 loc) • 233 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("react"), require("braft-utils"), require("draft-js"), require("immutable"), require("braft-convert"), require("react-dom"), require("braft-finder"), require("draftjs-utils"));
else if(typeof define === 'function' && define.amd)
define(["react", "braft-utils", "draft-js", "immutable", "braft-convert", "react-dom", "braft-finder", "draftjs-utils"], factory);
else {
var a = typeof exports === 'object' ? factory(require("react"), require("braft-utils"), require("draft-js"), require("immutable"), require("braft-convert"), require("react-dom"), require("braft-finder"), require("draftjs-utils")) : factory(root["react"], root["braft-utils"], root["draft-js"], root["immutable"], root["braft-convert"], root["react-dom"], root["braft-finder"], root["draftjs-utils"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__13__, __WEBPACK_EXTERNAL_MODULE__14__, __WEBPACK_EXTERNAL_MODULE__16__, __WEBPACK_EXTERNAL_MODULE__17__, __WEBPACK_EXTERNAL_MODULE__23__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = 39);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__0__;
/***/ }),
/* 1 */
/***/ (function(module, exports) {
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
module.exports = _assertThisInitialized;
/***/ }),
/* 2 */
/***/ (function(module, exports) {
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
module.exports = _defineProperty;
/***/ }),
/* 3 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__3__;
/***/ }),
/* 4 */
/***/ (function(module, exports) {
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
module.exports = _classCallCheck;
/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {
var defineProperty = __webpack_require__(2);
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === 'function') {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
defineProperty(target, key, source[key]);
});
}
return target;
}
module.exports = _objectSpread;
/***/ }),
/* 6 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__6__;
/***/ }),
/* 7 */
/***/ (function(module, exports) {
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;
}
module.exports = _createClass;
/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {
var _typeof = __webpack_require__(15);
var assertThisInitialized = __webpack_require__(1);
function _possibleConstructorReturn(self, call) {
if (call && (_typeof(call) === "object" || typeof call === "function")) {
return call;
}
return assertThisInitialized(self);
}
module.exports = _possibleConstructorReturn;
/***/ }),
/* 9 */
/***/ (function(module, exports) {
function _getPrototypeOf(o) {
module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
module.exports = _getPrototypeOf;
/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {
var setPrototypeOf = __webpack_require__(26);
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) setPrototypeOf(subClass, superClass);
}
module.exports = _inherits;
/***/ }),
/* 11 */
/***/ (function(module, exports) {
function _extends() {
module.exports = _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
module.exports = _extends;
/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {
var arrayWithoutHoles = __webpack_require__(27);
var iterableToArray = __webpack_require__(28);
var nonIterableSpread = __webpack_require__(29);
function _toConsumableArray(arr) {
return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
}
module.exports = _toConsumableArray;
/***/ }),
/* 13 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__13__;
/***/ }),
/* 14 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__14__;
/***/ }),
/* 15 */
/***/ (function(module, exports) {
function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); }
function _typeof(obj) {
if (typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol") {
module.exports = _typeof = function _typeof(obj) {
return _typeof2(obj);
};
} else {
module.exports = _typeof = function _typeof(obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj);
};
}
return _typeof(obj);
}
module.exports = _typeof;
/***/ }),
/* 16 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__16__;
/***/ }),
/* 17 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__17__;
/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {
var Immutable = __webpack_require__(13);
var KEY_SEPARATOR = '-';
function MultiDecorator(decorators) {
this.decorators = Immutable.List(decorators);
}
/**
Return list of decoration IDs per character
@param {ContentBlock}
@return {List<String>}
*/
MultiDecorator.prototype.getDecorations = function(block) {
var decorations = Array(block.getText().length).fill(null);
this.decorators.forEach(function(decorator, i) {
var _decorations = decorator.getDecorations(block);
_decorations.forEach(function(key, offset) {
if (!key) {
return;
}
key = i + KEY_SEPARATOR + key;
decorations[offset] = key;
});
});
return Immutable.List(decorations);
};
/**
Return component to render a decoration
@param {String}
@return {Function}
*/
MultiDecorator.prototype.getComponentForKey = function(key) {
var decorator = this.getDecoratorForKey(key);
return decorator.getComponentForKey(
this.getInnerKey(key)
);
};
/**
Return props to render a decoration
@param {String}
@return {Object}
*/
MultiDecorator.prototype.getPropsForKey = function(key) {
var decorator = this.getDecoratorForKey(key);
return decorator.getPropsForKey(
this.getInnerKey(key)
);
};
/**
Return a decorator for a specific key
@param {String}
@return {Decorator}
*/
MultiDecorator.prototype.getDecoratorForKey = function(key) {
var parts = key.split(KEY_SEPARATOR);
var index = Number(parts[0]);
return this.decorators.get(index);
};
/**
Return inner key for a decorator
@param {String}
@return {String}
*/
MultiDecorator.prototype.getInnerKey = function(key) {
var parts = key.split(KEY_SEPARATOR);
return parts.slice(1).join(KEY_SEPARATOR);
};
module.exports = MultiDecorator;
/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule CharacterMetadata
* @format
*
*/
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; }
var _require = __webpack_require__(13),
Map = _require.Map,
OrderedSet = _require.OrderedSet,
Record = _require.Record;
// Immutable.map is typed such that the value for every key in the map
// must be the same type
var EMPTY_SET = OrderedSet();
var defaultRecord = {
style: EMPTY_SET,
entity: null
};
var CharacterMetadataRecord = Record(defaultRecord);
var CharacterMetadata = function (_CharacterMetadataRec) {
_inherits(CharacterMetadata, _CharacterMetadataRec);
function CharacterMetadata() {
_classCallCheck(this, CharacterMetadata);
return _possibleConstructorReturn(this, _CharacterMetadataRec.apply(this, arguments));
}
CharacterMetadata.prototype.getStyle = function getStyle() {
return this.get('style');
};
CharacterMetadata.prototype.getEntity = function getEntity() {
return this.get('entity');
};
CharacterMetadata.prototype.hasStyle = function hasStyle(style) {
return this.getStyle().includes(style);
};
CharacterMetadata.applyStyle = function applyStyle(record, style) {
var withStyle = record.set('style', record.getStyle().add(style));
return CharacterMetadata.create(withStyle);
};
CharacterMetadata.removeStyle = function removeStyle(record, style) {
var withoutStyle = record.set('style', record.getStyle().remove(style));
return CharacterMetadata.create(withoutStyle);
};
CharacterMetadata.applyEntity = function applyEntity(record, entityKey) {
var withEntity = record.getEntity() === entityKey ? record : record.set('entity', entityKey);
return CharacterMetadata.create(withEntity);
};
/**
* Use this function instead of the `CharacterMetadata` constructor.
* Since most content generally uses only a very small number of
* style/entity permutations, we can reuse these objects as often as
* possible.
*/
CharacterMetadata.create = function create(config) {
if (!config) {
return EMPTY;
}
var defaultConfig = {
style: EMPTY_SET,
entity: null
};
// Fill in unspecified properties, if necessary.
var configMap = Map(defaultConfig).merge(config);
var existing = pool.get(configMap);
if (existing) {
return existing;
}
var newCharacter = new CharacterMetadata(configMap);
pool = pool.set(configMap, newCharacter);
return newCharacter;
};
return CharacterMetadata;
}(CharacterMetadataRecord);
var EMPTY = new CharacterMetadata();
var pool = Map([[Map(defaultRecord), EMPTY]]);
CharacterMetadata.EMPTY = EMPTY;
module.exports = CharacterMetadata;
/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule findRangesImmutable
* @format
*
*/
/**
* Search through an array to find contiguous stretches of elements that
* match a specified filter function.
*
* When ranges are found, execute a specified `found` function to supply
* the values to the caller.
*/
function findRangesImmutable(haystack, areEqualFn, filterFn, foundFn) {
if (!haystack.size) {
return;
}
var cursor = 0;
haystack.reduce(function (value, nextValue, nextIndex) {
if (!areEqualFn(value, nextValue)) {
if (filterFn(value)) {
foundFn(cursor, nextIndex);
}
cursor = nextIndex;
}
return nextValue;
});
filterFn(haystack.last()) && foundFn(cursor, haystack.count());
}
module.exports = findRangesImmutable;
/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {
var objectWithoutPropertiesLoose = __webpack_require__(25);
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
module.exports = _objectWithoutProperties;
/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule getFragmentFromSelection
* @format
*
*/
var getContentStateFragment = __webpack_require__(30);
function getFragmentFromSelection(editorState) {
var selectionState = editorState.getSelection();
if (selectionState.isCollapsed()) {
return null;
}
return getContentStateFragment(editorState.getCurrentContent(), selectionState);
}
module.exports = getFragmentFromSelection;
/***/ }),
/* 23 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE__23__;
/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {
var arrayWithHoles = __webpack_require__(36);
var iterableToArrayLimit = __webpack_require__(37);
var nonIterableRest = __webpack_require__(38);
function _slicedToArray(arr, i) {
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();
}
module.exports = _slicedToArray;
/***/ }),
/* 25 */
/***/ (function(module, exports) {
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
module.exports = _objectWithoutPropertiesLoose;
/***/ }),
/* 26 */
/***/ (function(module, exports) {
function _setPrototypeOf(o, p) {
module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
module.exports = _setPrototypeOf;
/***/ }),
/* 27 */
/***/ (function(module, exports) {
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {
arr2[i] = arr[i];
}
return arr2;
}
}
module.exports = _arrayWithoutHoles;
/***/ }),
/* 28 */
/***/ (function(module, exports) {
function _iterableToArray(iter) {
if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter);
}
module.exports = _iterableToArray;
/***/ }),
/* 29 */
/***/ (function(module, exports) {
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance");
}
module.exports = _nonIterableSpread;
/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule getContentStateFragment
* @format
*
*/
var randomizeBlockMapKeys = __webpack_require__(31);
var removeEntitiesAtEdges = __webpack_require__(34);
var getContentStateFragment = function getContentStateFragment(contentState, selectionState) {
var startKey = selectionState.getStartKey();
var startOffset = selectionState.getStartOffset();
var endKey = selectionState.getEndKey();
var endOffset = selectionState.getEndOffset();
// Edge entities should be stripped to ensure that we don't preserve
// invalid partial entities when the fragment is reused. We do, however,
// preserve entities that are entirely within the selection range.
var contentWithoutEdgeEntities = removeEntitiesAtEdges(contentState, selectionState);
var blockMap = contentWithoutEdgeEntities.getBlockMap();
var blockKeys = blockMap.keySeq();
var startIndex = blockKeys.indexOf(startKey);
var endIndex = blockKeys.indexOf(endKey) + 1;
return randomizeBlockMapKeys(blockMap.slice(startIndex, endIndex).map(function (block, blockKey) {
var text = block.getText();
var chars = block.getCharacterList();
if (startKey === endKey) {
return block.merge({
text: text.slice(startOffset, endOffset),
characterList: chars.slice(startOffset, endOffset)
});
}
if (blockKey === startKey) {
return block.merge({
text: text.slice(startOffset),
characterList: chars.slice(startOffset)
});
}
if (blockKey === endKey) {
return block.merge({
text: text.slice(0, endOffset),
characterList: chars.slice(0, endOffset)
});
}
return block;
}));
};
module.exports = getContentStateFragment;
/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule randomizeBlockMapKeys
* @format
*
*/
var ContentBlockNode = __webpack_require__(32);
var Immutable = __webpack_require__(13);
var generateRandomKey = __webpack_require__(33);
var OrderedMap = Immutable.OrderedMap;
var randomizeContentBlockNodeKeys = function randomizeContentBlockNodeKeys(blockMap) {
var newKeysRef = {};
// we keep track of root blocks in order to update subsequent sibling links
var lastRootBlock = void 0;
return OrderedMap(blockMap.withMutations(function (blockMapState) {
blockMapState.forEach(function (block, index) {
var oldKey = block.getKey();
var nextKey = block.getNextSiblingKey();
var prevKey = block.getPrevSiblingKey();
var childrenKeys = block.getChildKeys();
var parentKey = block.getParentKey();
// new key that we will use to build linking
var key = generateRandomKey();
// we will add it here to re-use it later
newKeysRef[oldKey] = key;
if (nextKey) {
var nextBlock = blockMapState.get(nextKey);
if (nextBlock) {
blockMapState.setIn([nextKey, 'prevSibling'], key);
} else {
// this can happen when generating random keys for fragments
blockMapState.setIn([oldKey, 'nextSibling'], null);
}
}
if (prevKey) {
var prevBlock = blockMapState.get(prevKey);
if (prevBlock) {
blockMapState.setIn([prevKey, 'nextSibling'], key);
} else {
// this can happen when generating random keys for fragments
blockMapState.setIn([oldKey, 'prevSibling'], null);
}
}
if (parentKey && blockMapState.get(parentKey)) {
var parentBlock = blockMapState.get(parentKey);
var parentChildrenList = parentBlock.getChildKeys();
blockMapState.setIn([parentKey, 'children'], parentChildrenList.set(parentChildrenList.indexOf(block.getKey()), key));
} else {
// blocks will then be treated as root block nodes
blockMapState.setIn([oldKey, 'parent'], null);
if (lastRootBlock) {
blockMapState.setIn([lastRootBlock.getKey(), 'nextSibling'], key);
blockMapState.setIn([oldKey, 'prevSibling'], newKeysRef[lastRootBlock.getKey()]);
}
lastRootBlock = blockMapState.get(oldKey);
}
childrenKeys.forEach(function (childKey) {
var childBlock = blockMapState.get(childKey);
if (childBlock) {
blockMapState.setIn([childKey, 'parent'], key);
} else {
blockMapState.setIn([oldKey, 'children'], block.getChildKeys().filter(function (child) {
return child !== childKey;
}));
}
});
});
}).toArray().map(function (block) {
return [newKeysRef[block.getKey()], block.set('key', newKeysRef[block.getKey()])];
}));
};
var randomizeContentBlockKeys = function randomizeContentBlockKeys(blockMap) {
return OrderedMap(blockMap.toArray().map(function (block) {
var key = generateRandomKey();
return [key, block.set('key', key)];
}));
};
var randomizeBlockMapKeys = function randomizeBlockMapKeys(blockMap) {
var isTreeBasedBlockMap = blockMap.first() instanceof ContentBlockNode;
if (!isTreeBasedBlockMap) {
return randomizeContentBlockKeys(blockMap);
}
return randomizeContentBlockNodeKeys(blockMap);
};
module.exports = randomizeBlockMapKeys;
/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule ContentBlockNode
* @format
*
*
* This file is a fork of ContentBlock adding support for nesting references by
* providing links to children, parent, prevSibling, and nextSibling.
*
* This is unstable and not part of the public API and should not be used by
* production systems. This file may be update/removed without notice.
*/
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; }
var CharacterMetadata = __webpack_require__(19);
var Immutable = __webpack_require__(13);
var findRangesImmutable = __webpack_require__(20);
var List = Immutable.List,
Map = Immutable.Map,
OrderedSet = Immutable.OrderedSet,
Record = Immutable.Record,
Repeat = Immutable.Repeat;
var EMPTY_SET = OrderedSet();
var defaultRecord = {
parent: null,
characterList: List(),
data: Map(),
depth: 0,
key: '',
text: '',
type: 'unstyled',
children: List(),
prevSibling: null,
nextSibling: null
};
var haveEqualStyle = function haveEqualStyle(charA, charB) {
return charA.getStyle() === charB.getStyle();
};
var haveEqualEntity = function haveEqualEntity(charA, charB) {
return charA.getEntity() === charB.getEntity();
};
var decorateCharacterList = function decorateCharacterList(config) {
if (!config) {
return config;
}
var characterList = config.characterList,
text = config.text;
if (text && !characterList) {
config.characterList = List(Repeat(CharacterMetadata.EMPTY, text.length));
}
return config;
};
var ContentBlockNode = function (_Record) {
_inherits(ContentBlockNode, _Record);
function ContentBlockNode() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultRecord;
_classCallCheck(this, ContentBlockNode);
return _possibleConstructorReturn(this, _Record.call(this, decorateCharacterList(props)));
}
ContentBlockNode.prototype.getKey = function getKey() {
return this.get('key');
};
ContentBlockNode.prototype.getType = function getType() {
return this.get('type');
};
ContentBlockNode.prototype.getText = function getText() {
return this.get('text');
};
ContentBlockNode.prototype.getCharacterList = function getCharacterList() {
return this.get('characterList');
};
ContentBlockNode.prototype.getLength = function getLength() {
return this.getText().length;
};
ContentBlockNode.prototype.getDepth = function getDepth() {
return this.get('depth');
};
ContentBlockNode.prototype.getData = function getData() {
return this.get('data');
};
ContentBlockNode.prototype.getInlineStyleAt = function getInlineStyleAt(offset) {
var character = this.getCharacterList().get(offset);
return character ? character.getStyle() : EMPTY_SET;
};
ContentBlockNode.prototype.getEntityAt = function getEntityAt(offset) {
var character = this.getCharacterList().get(offset);
return character ? character.getEntity() : null;
};
ContentBlockNode.prototype.getChildKeys = function getChildKeys() {
return this.get('children');
};
ContentBlockNode.prototype.getParentKey = function getParentKey() {
return this.get('parent');
};
ContentBlockNode.prototype.getPrevSiblingKey = function getPrevSiblingKey() {
return this.get('prevSibling');
};
ContentBlockNode.prototype.getNextSiblingKey = function getNextSiblingKey() {
return this.get('nextSibling');
};
ContentBlockNode.prototype.findStyleRanges = function findStyleRanges(filterFn, callback) {
findRangesImmutable(this.getCharacterList(), haveEqualStyle, filterFn, callback);
};
ContentBlockNode.prototype.findEntityRanges = function findEntityRanges(filterFn, callback) {
findRangesImmutable(this.getCharacterList(), haveEqualEntity, filterFn, callback);
};
return ContentBlockNode;
}(Record(defaultRecord));
module.exports = ContentBlockNode;
/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule generateRandomKey
* @format
*
*/
var seenKeys = {};
var MULTIPLIER = Math.pow(2, 24);
function generateRandomKey() {
var key = void 0;
while (key === undefined || seenKeys.hasOwnProperty(key) || !isNaN(+key)) {
key = Math.floor(Math.random() * MULTIPLIER).toString(32);
}
seenKeys[key] = true;
return key;
}
module.exports = generateRandomKey;
/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule removeEntitiesAtEdges
* @format
*
*/
var CharacterMetadata = __webpack_require__(19);
var findRangesImmutable = __webpack_require__(20);
var invariant = __webpack_require__(35);
function removeEntitiesAtEdges(contentState, selectionState) {
var blockMap = contentState.getBlockMap();
var entityMap = contentState.getEntityMap();
var updatedBlocks = {};
var startKey = selectionState.getStartKey();
var startOffset = selectionState.getStartOffset();
var startBlock = blockMap.get(startKey);
var updatedStart = removeForBlock(entityMap, startBlock, startOffset);
if (updatedStart !== startBlock) {
updatedBlocks[startKey] = updatedStart;
}
var endKey = selectionState.getEndKey();
var endOffset = selectionState.getEndOffset();
var endBlock = blockMap.get(endKey);
if (startKey === endKey) {
endBlock = updatedStart;
}
var updatedEnd = removeForBlock(entityMap, endBlock, endOffset);
if (updatedEnd !== endBlock) {
updatedBlocks[endKey] = updatedEnd;
}
if (!Object.keys(updatedBlocks).length) {
return contentState.set('selectionAfter', selectionState);
}
return contentState.merge({
blockMap: blockMap.merge(updatedBlocks),
selectionAfter: selectionState
});
}
function getRemovalRange(characters, key, offset) {
var removalRange;
findRangesImmutable(characters, function (a, b) {
return a.getEntity() === b.getEntity();
}, function (element) {
return element.getEntity() === key;
}, function (start, end) {
if (start <= offset && end >= offset) {
removalRange = { start: start, end: end };
}
});
!(typeof removalRange === 'object') ? false ? undefined : invariant(false) : void 0;
return removalRange;
}
function removeForBlock(entityMap, block, offset) {
var chars = block.getCharacterList();
var charBefore = offset > 0 ? chars.get(offset - 1) : undefined;
var charAfter = offset < chars.count() ? chars.get(offset) : undefined;
var entityBeforeCursor = charBefore ? charBefore.getEntity() : undefined;
var entityAfterCursor = charAfter ? charAfter.getEntity() : undefined;
if (entityAfterCursor && entityAfterCursor === entityBeforeCursor) {
var entity = entityMap.__get(entityAfterCursor);
if (entity.getMutability() !== 'MUTABLE') {
var _getRemovalRange = getRemovalRange(chars, entityAfterCursor, offset),
start = _getRemovalRange.start,
end = _getRemovalRange.end;
var current;
while (start < end) {
current = chars.get(start);
chars = chars.set(start, CharacterMetadata.applyEntity(current, null));
start++;
}
return block.set('characterList', chars);
}
}
return block;
}
module.exports = removeEntitiesAtEdges;
/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/**
* Copyright (c) 2013-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
/**
* Use invariant() to assert state which your program assumes to be true.
*
* Provide sprintf-style format (only %s is supported) and arguments
* to provide information about what broke and what you were
* expecting.
*
* The invariant message will be stripped in production, but the invariant
* will remain to ensure logic does not differ in production.
*/
var validateFormat = function validateFormat(format) {};
if (false) {}
function invariant(condition, format, a, b, c, d, e, f) {
validateFormat(format);
if (!condition) {
var error;
if (format === undefined) {
error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
} else {
var args = [a, b, c, d, e, f];
var argIndex = 0;
error = new Error(format.replace(/%s/g, function () {
return args[argIndex++];
}));
error.name = 'Invariant Violation';
}
error.framesToPop = 1; // we don't care about invariant's own frame
throw error;
}
}
module.exports = invariant;
/***/ }),
/* 36 */
/***/ (function(module, exports) {
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
module.exports = _arrayWithHoles;
/***/ }),
/* 37 */
/***/ (function(module, exports) {
function _iterableToArrayLimit(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
module.exports = _iterableToArrayLimit;
/***/ }),
/* 38 */
/***/ (function(module, exports) {
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
module.exports = _nonIterableRest;
/***/ }),
/* 39 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/typeof.js
var helpers_typeof = __webpack_require__(15);
var typeof_default = /*#__PURE__*/__webpack_require__.n(helpers_typeof);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/objectSpread.js
var objectSpread = __webpack_require__(5);
var objectSpread_default = /*#__PURE__*/__webpack_require__.n(objectSpread);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/objectWithoutProperties.js
var objectWithoutProperties = __webpack_require__(21);
var objectWithoutProperties_default = /*#__PURE__*/__webpack_require__.n(objectWithoutProperties);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/classCallCheck.js
var classCallCheck = __webpack_require__(4);
var classCallCheck_default = /*#__PURE__*/__webpack_require__.n(classCallCheck);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/createClass.js
var createClass = __webpack_require__(7);
var createClass_default = /*#__PURE__*/__webpack_require__.n(createClass);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js
var possibleConstructorReturn = __webpack_require__(8);
var possibleConstructorReturn_default = /*#__PURE__*/__webpack_require__.n(possibleConstructorReturn);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/getPrototypeOf.js
var getPrototypeOf = __webpack_require__(9);
var getPrototypeOf_default = /*#__PURE__*/__webpack_require__.n(getPrototypeOf);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/inherits.js
var inherits = __webpack_require__(10);
var inherits_default = /*#__PURE__*/__webpack_require__.n(inherits);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/assertThisInitialized.js
var assertThisInitialized = __webpack_require__(1);
var assertThisInitialized_default = /*#__PURE__*/__webpack_require__.n(assertThisInitialized);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/defineProperty.js
var defineProperty = __webpack_require__(2);
var defineProperty_default = /*#__PURE__*/__webpack_require__.n(defineProperty);
// EXTERNAL MODULE: ../node_modules/@babel/runtime/helpers/toConsumableArray.js
var toConsumableArray = __webpack_require__(12);
var toConsumableArray_default = /*#__PURE__*/__webpack_require__.n(toConsumableArray);
// EXTERNAL MODULE: ../node_modules/draft-js/dist/Draft.css
var Draft = __webpack_require__(40);
// EXTERNAL MODULE: ./assets/scss/_base.scss
var _base = __webpack_require__(42);
// EXTERNAL MODULE: external "react"
var external_react_ = __webpack_require__(0);
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_);
// CONCATENATED MODULE: ./languages/en.js
/* harmony default export */ var en = ({
base: {
remove: 'Remove',
cancel: 'Cancel',
confirm: 'Confirm',
inert: 'Insert',
width: 'Width',
height: 'Height'
},
controls: {
clear: 'Clear',
undo: 'Undo',
redo: 'Redo',
fontSize: 'Font Size',
color: 'Color',
textColor: 'Text',
tempColors: 'Temp Colors',
backgroundColor: 'Background',
bold: 'Bold',
lineHeight: 'Line Height',
letterSpacing: 'Letter Spacing',
textIndent: 'Text Indent',
increaseIndent: 'Increase Indent',
decreaseIndent: 'Decrease Indent',
italic: 'Italic',
underline: 'Underline',
strikeThrough: 'Strike Through',
fontFamily: 'Font Family',
textAlign: 'Text Alignment',
alignLeft: 'Left Alignment',
alignCenter: 'Center Alignment',
alignRight: 'Right Alignment',
alignJustify: 'Justify Alignment',
floatLeft: 'Left Float',
floatRight: 'Right Float',
superScript: 'Super Script',
subScript: 'Sub Script',
removeStyles: 'Remove Styles',
headings: 'Headings',
header: 'Header',
normal: 'Normal',
orderedList: 'Ordered List',
unorderedList: 'Unordered List',
blockQuote: 'Quote',
code: 'Code',
link: 'Link',
unlink: 'Unlink',
hr: 'Horizontal Line',
media: 'Media',
mediaLibirary: 'Media Library',
emoji: 'Emoji',
fullscreen: 'Fullscreen',
exitFullscreen: 'Exit Fullscreen'
},
linkEditor: {
textInputPlaceHolder: 'Input link text',
linkInputPlaceHolder: 'Input link URL',
inputWithEnterPlaceHolder: 'Input link URL and press Enter',
openInNewWindow: 'Open in new window',
removeLink: 'Remove Link'
},
audioPlayer: {
title: 'Play Audio'
},
videoPlayer: {
title: 'Play Video',
embedTitle: 'Embed Media'
},
media: {
image: 'Image',
video: 'Video',
audio: 'Audio',
embed: 'Embed'
}
});
// CONCATENATED MODULE: ./languages/zh.js
/* harmony default export */ var zh = ({
base: {
remove: '删除',
cancel: '取消',
confirm: '确定',
inert: '插入',
width: '宽度',
height: '高度'
},
controls: {
clear: '清除内容',
undo: '撤销',
redo: '重做',
fontSize: '字号',
lineHeight: '行高',
letterSpacing: '字间距',
textIndent: '段落缩进',
increaseIndent: '增加缩进',
decreaseIndent: '减少缩进',
border: '边框',
color: '颜色',
textColor: '文字颜色',
backgroundColor: '背景颜色',
tempColors: '临时颜色',
bold: '加粗',
italic: '斜体',
underline: '下划线',
strikeThrough: '删除线',
fontFamily: '字体',
textAlign: '文本对齐',
alignLeft: '居左',
alignCenter: '居中',
alignRight: '居右',
alignJustify: '两端',
floatLeft: '左浮动',
floatRight: '右浮动',
superScript: '上标',
subScript: '下标',
removeStyles: '清除样式',
headings: '标题',
header: '标题',
normal: '常规',
orderedList: '有序列表',
unorderedList: '无序列表',
blockQuote: '引用',
code: '代码',
link: '链接',
unlink: '清除链接',
hr: '水平线',
media: '媒体',
mediaLibirary: '媒体库',
emoji: '小表情',
fullscreen: '全屏',
exitFullscreen: '退出全屏'
},
linkEditor: {
textInputPlaceHolder: '输入链接文字',
linkInputPlaceHolder: '输入链接地址',
inputWithEnterPlaceHolder: '输入链接地址并回车',
openInNewWindow: '在新窗口打开',
removeLink: '移除链接'
},
audioPlayer: {
title: '播放音频文件'
},
videoPlayer: {
title: '播放视频文件',
embedTitle: '嵌入式媒体'
},
media: {
image: '图像',
video: '视频',
audio: '音频',
embed: '嵌入式媒体'
}
});
// CONCATENATED MODULE: ./languages/zh-hant.js
/* harmony default export */ var zh_hant = ({
base: {
remove: '刪除',
cancel: '取消',
confirm: '確定',
inert: '插入',
width: '宽度',
height: '高度'
},
controls: {
clear: '清除内容',
undo: '撤銷',
redo: '重做',
fontSize: '字號',
color: '顏色',
textColor: '文字顏色',
backgroundColor: '背景顏色',
tempColors: '臨時顏色',
bold: '加粗',
lineHeight: '行高',
letterSpacing: '字間距',
textIndent: '段落縮進',
increaseIndent: '增加縮進',
decreaseIndent: '减少縮進',
border: '邊框',
italic: '斜體',
underline: '下劃線',
strikeThrough: '刪除線',
fontFamily: '字體',
textAlign: '文本對齊',
alignLeft: '居左',
alignCenter: '居中',
alignRight: '居右',
alignJustify: '兩端對齊',
floatLeft: '左浮動',
floatRight: '右浮動',
superScript: '上標',
subScript: '下標',
removeStyles: '清除样式',
headings: '標題',
header: '標題',
normal: '常規',
orderedList: '有序列表',
unorderedList: '無序列表',
blockQuote: '引用',
code: '代碼',
link: '鏈接',
unlink: '清除鏈接',
hr: '水平线',
media: '媒體',
mediaLibirary: '媒體库',
emoji: '小表情',
fullscreen: '全熒幕',
exitFullscreen: '退出全熒幕'
},
linkEditor: {
textInputPlaceHolder: '輸入鏈接文字',
linkInputPlaceHolder: '輸入鏈接地址',
inputWithEnterPlaceHolder: '輸入鏈接地址並回車',
openInNewWindow: '在新窗口打開',
removeLink: '移除鏈接'
},
audioPlayer: {
title: '播放音頻文件'
},
videoPlayer: {
title: '播放視頻文件',
embedTitle: '嵌入式媒體'
},
media: {
image: '圖像',
video: '視頻',
audio: '音頻',
embed: '嵌入式媒體'
}
});
// CONCATENATED MODULE: ./languages/pl.js
/* harmony default export */ var pl = ({
base: {
remove: 'Usuń',
cancel: 'Anuluj',
confirm: 'Potwierdź',
inert: 'Wstaw',
width: 'Szerokość',
height: 'Wysokość'
},
controls: {
clear: 'Wyczyść',
undo: 'Cofnij',
redo: 'Przywróć',
fontSize: 'Wielkość',
color: 'Kolor',
textColor: 'Kolor tekstu',
tempColors: 'Kolory',
backgroundColor: 'Tło',
bold: 'Pogrubienie',
lineHeight: 'Wysokość linii',
letterSpacing: 'Odstęp znaków',
textIndent: 'Wcięcie tekstu',
increaseIndent: 'Zwiększ wcięcie',
decreaseIndent: 'Zmniejsz wcięcie',
italic: 'Italiki',
underline: 'Podkreślenie',
strikeThrough: 'Przekreślenie',
fontFamily: 'Czcionka',
textAlign: 'Wyrównanie tekstu',
alignLeft: 'Do lewej',
alignCenter: 'Wycentruj',
alignRight: 'Do prawej',
alignJustify: 'Wyjustuj',
floatLeft: 'Do lewej',
floatRight: 'Do prawej',
superScript: 'Superskrypt',
subScript: 'Subskrypt',
removeStyles: 'Usuń stylowanie',
headings: 'Nagłówki',
header: 'Nagłówek',
normal: 'Normalny',
orderedList: 'Lista uporządkowana',
unorderedList: 'Lista nieuporządkowana',
blockQuote: 'Cytat',
code: 'Kod',
link: 'Link',
unlink: 'Usuń link',
hr: 'Linia pozioma',
media: 'Media',
mediaLibirary: 'Biblioteka mediów',
emoji: 'Emoji'
},
linkEditor: {
textInputPlaceHolder: 'Wpisz tekst linku',
linkInputPlaceHolder: 'Wpisz Adres URL',
inputWithEnterPlaceHolder: 'Wpisz adres URL i naciśnij Enter',
openInNewWindow: 'Otwórz w nowym oknie',
removeLink: 'Usuń link'
},
audioPlayer: {
title: 'Odtwórz audio'
},
videoPlayer: {
title: 'Odtwórz wideo',
embedTitle: 'Tytuł'
},
media: {
image: 'Obraz',
video: 'Wideo',
audio: 'Audio',
embed: 'Obiekt osadzony'
}
});
// CONCATENATED MODULE: ./languages/kr.js
/* harmony default export */ var kr = ({
base: {
remove: '삭제',
cancel: '취소',
confirm: '결정',
inert: '삽입',
width: '너비',
height: '높이'
},
controls: {
clear: '콘텐츠지우기',
undo: '취소',
redo: '다시하기',
fontSize: '글자크기',
lineHeight: '행높이',
letterSpacing: '단어간격',
textIndent: '단락들여쓰기',
increaseIndent: '들여쓰기늘리기',
decreaseIndent: '들여쓰기줄이기',
border: '국경',
color: '색상',
textColor: '텍스트색상',
backgroundColor: '배경색상',
tempColors: '임시색',
bold: '굵게',
italic: '기울임꼴',
underline: '밑줄',
strikeThrough: '취소선',
fontFamily: '글꼴',
textAlign: '텍스트정렬',
alignLeft: '왼쪽',
alignCenter: '중심',
alignRight: '오른쪽',
alignJustify: '양쪽끝',
floatLeft: '떠다니기',
floatRight: '오른쪽부동',
superScript: '위첨자',
subScript: '첨자',
removeStyles: '스타일지우기',
headings: '제목',
header: '제목',
normal: '재래식',
orderedList: '순서가지정된목록',
unorderedList: '정렬되지않은목록',
blockQuote: '참고문헌',
code: '코드',
link: '링크',
unlink: '링크삭제',
hr: '수평선',
media: '미디어',
mediaLibirary: '미디어라이브러리',
emoji: '작은표현',
fullscreen: '전체화면',
exitFullscreen: '전체화면종료'
},
linkEditor: {
textInputPlaceHolder: '링크텍스트입력',
linkInputPlaceHolder: '링크주소입력',
inputWithEnterPlaceHolder: '링크주소입력.',
openInNewWindow: '새창열기',
removeLink: '링크삭제'
},
audioPlayer: {
title: '오디오파일재생'
},
videoPlayer: {