From df687b184a7ea44aedb4586be1b877cc077e74a4 Mon Sep 17 00:00:00 2001 From: Will Rowe Date: Wed, 6 May 2015 23:45:54 -0400 Subject: [PATCH] Fix selection of embedded objects. --- config/grunt/dist.coffee | 1 + src/modules/toolbar.coffee | 13 +++++++++---- test/unit/modules/toolbar.coffee | 28 +++++++++++++++++++--------- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/config/grunt/dist.coffee b/config/grunt/dist.coffee index 5ef93da6e8..431719971f 100644 --- a/config/grunt/dist.coffee +++ b/config/grunt/dist.coffee @@ -80,6 +80,7 @@ module.exports = (grunt) -> 'clone', 'extend', 'defaults', 'omit', 'values' 'isElement', 'isEqual', 'isFunction', 'isNumber', 'isObject', 'isString' 'uniqueId' + 'omit' ] flags: ['development'] target: diff --git a/src/modules/toolbar.coffee b/src/modules/toolbar.coffee index a4067fdc2d..bf44a60079 100644 --- a/src/modules/toolbar.coffee +++ b/src/modules/toolbar.coffee @@ -1,6 +1,7 @@ Quill = require('../quill') -_ = Quill.require('lodash') -dom = Quill.require('dom') +Format = require('../core/format') +_ = Quill.require('lodash') +dom = Quill.require('dom') class Toolbar @@ -66,7 +67,6 @@ class Toolbar ) setActive: (format, value) -> - value = false if format == 'image' # TODO generalize to all embeds input = @inputs[format] return unless input? $input = dom(input) @@ -122,7 +122,12 @@ class Toolbar else contents = @quill.getContents(range) formatsArr = _.map(contents.ops, 'attributes') - return this._intersectFormats(formatsArr) + activeFormats = this._intersectFormats(formatsArr) + + if range.isCollapsed() + activeFormats = _.omit(activeFormats, (value, format) => return @quill.editor.doc.formats[format].isType(Format.types.EMBED)) + + return activeFormats _getLineActive: (range) -> formatsArr = [] diff --git a/test/unit/modules/toolbar.coffee b/test/unit/modules/toolbar.coffee index db9653fb15..b0cbfdaeda 100644 --- a/test/unit/modules/toolbar.coffee +++ b/test/unit/modules/toolbar.coffee @@ -136,18 +136,16 @@ describe('Toolbar', -> ) ) - describe('quill.deleteText()', -> - it('button', -> + describe('buttons should update when calling Quill method', -> + it('deleteText()', -> @quill.setSelection(1, 1) expect(dom(@button).hasClass('ql-active')).toBe(true) @quill.deleteText(0, 2) expect(dom(@button).hasClass('ql-active')).toBe(false) ) - ) - describe('quill content methods', -> - it('button', -> + it('insertEmbed()', -> @quill.addModule('image-tooltip', true) image = @toolbarContainer.querySelector('.ql-image') @quill.setSelection(1, 1) @@ -159,7 +157,7 @@ describe('Toolbar', -> expect(dom(image).hasClass('ql-active')).toBe(false) ) - it('button', -> + it('insertText()', -> @quill.setSelection(1, 1) expect(dom(@button).hasClass('ql-active')).toBe(true) @@ -167,7 +165,7 @@ describe('Toolbar', -> expect(dom(@button).hasClass('ql-active')).toBe(false) ) - it('button', -> + it('setText()', -> @quill.setSelection(1, 1) expect(dom(@button).hasClass('ql-active')).toBe(true) @@ -175,7 +173,7 @@ describe('Toolbar', -> expect(dom(@button).hasClass('ql-active')).toBe(false) ) - it('button', -> + it('setHTML()', -> italic = @toolbarContainer.querySelector('.ql-italic') @quill.setSelection(1, 1) expect(dom(@button).hasClass('ql-active')).toBe(true) @@ -186,7 +184,7 @@ describe('Toolbar', -> expect(dom(italic).hasClass('ql-active')).toBe(true) ) - it('button', -> + it('formatText()', -> @quill.setSelection(1, 1) expect(dom(@button).hasClass('ql-active')).toBe(true) @@ -194,4 +192,16 @@ describe('Toolbar', -> expect(dom(@button).hasClass('ql-active')).toBe(false) ) ) + + describe('embed button should become active when selecting', -> + it('an image', -> + @quill.addModule('image-tooltip', true) + image = @toolbarContainer.querySelector('.ql-image') + + @quill.setSelection(0, 0) + @quill.insertEmbed(0, 'image', 'http://quilljs.com/images/cloud.png') + @quill.setSelection(0, 1) + expect(dom(image).hasClass('ql-active')).toBe(true) + ) + ) )