Files
talk/plugins/talk-plugin-rich-text/client/components/rte/buttons/Blockquote.js
T
2018-03-25 01:20:46 +01:00

55 lines
1.2 KiB
JavaScript

import createToggle from '../factories/createToggle';
import {
findIntersecting,
insertNewLineAfterNode,
insertNodes,
getSelectedNodesExpanded,
outdentNode,
selectEndOfNode,
} from '../lib/dom';
function execCommand() {
const bq = findIntersecting('BLOCKQUOTE');
if (bq) {
outdentNode(bq, true);
} else {
const node = document.createElement('blockquote');
// Expanded selection means we always select whole lines.
const selectedNodes = getSelectedNodesExpanded();
if (selectedNodes.length) {
const firstNode = selectedNodes[0];
firstNode.parentNode.insertBefore(node, firstNode);
selectedNodes.forEach(n => {
node.appendChild(n);
});
selectEndOfNode(node);
} else {
node.appendChild(document.createElement('br'));
insertNodes(node);
selectEndOfNode(node);
}
}
this.broadcastChange();
}
function isActive() {
return !!findIntersecting('BLOCKQUOTE');
}
const onEnter = node => {
if (node.tagName !== 'BLOCKQUOTE') {
return;
}
insertNewLineAfterNode(node, true);
return true;
};
const Blockquote = createToggle(execCommand, { onEnter, isActive });
Blockquote.defaultProps = {
children: 'Blockquote',
};
export default Blockquote;