diff --git a/formats/bold.js b/formats/bold.js index cdabfb2372..a507ad5f22 100644 --- a/formats/bold.js +++ b/formats/bold.js @@ -1,7 +1,22 @@ import Inline from '../blots/inline'; -class Bold extends Inline { } +class Bold extends Inline { + static create(value) { + return super.create(); + } + + static formats(domNode) { + return true; + } + + optimize() { + super.optimize(); + if (this.domNode.tagName !== this.statics.tagName[0]) { + this.replaceWith(this.statics.blotName); + } + } +} Bold.blotName = 'bold'; -Bold.tagName = 'STRONG'; +Bold.tagName = ['STRONG', 'B']; export default Bold; diff --git a/formats/italic.js b/formats/italic.js index b3ad324471..6d50f39f53 100644 --- a/formats/italic.js +++ b/formats/italic.js @@ -1,7 +1,7 @@ -import Inline from '../blots/inline'; +import Bold from './bold'; -class Italic extends Inline { } +class Italic extends Bold { } Italic.blotName = 'italic'; -Italic.tagName = 'EM'; +Italic.tagName = ['EM', 'I']; export default Italic; diff --git a/test/unit.js b/test/unit.js index f0f21873c7..6a0e12eabf 100644 --- a/test/unit.js +++ b/test/unit.js @@ -19,6 +19,7 @@ import './unit/formats/code'; import './unit/formats/header'; import './unit/formats/indent'; import './unit/formats/list'; +import './unit/formats/bold'; import './unit/modules/clipboard'; import './unit/modules/history'; diff --git a/test/unit/formats/bold.js b/test/unit/formats/bold.js new file mode 100644 index 0000000000..1f08d39594 --- /dev/null +++ b/test/unit/formats/bold.js @@ -0,0 +1,13 @@ +import Scroll from '../../../blots/scroll'; + + +describe('Bold', function() { + it('optimize and merge', function() { + let scroll = this.initialize(Scroll, '

abc

'); + let bold = document.createElement('b'); + bold.appendChild(scroll.domNode.firstChild.childNodes[1]); + scroll.domNode.firstChild.insertBefore(bold, scroll.domNode.firstChild.lastChild); + scroll.update(); + expect(scroll.domNode).toEqualHTML('

abc

'); + }); +});