From 76501646008333b4fa30fc99278b01c3520df95e Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Fri, 21 Nov 2014 16:00:27 -0500 Subject: [PATCH 1/6] Add a remove button to the link tooltip --- src/modules/link-tooltip.coffee | 20 +++++++++++++++++--- src/themes/base/modules/link-tooltip.styl | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/modules/link-tooltip.coffee b/src/modules/link-tooltip.coffee index 26f9df6387..6d5075b303 100644 --- a/src/modules/link-tooltip.coffee +++ b/src/modules/link-tooltip.coffee @@ -13,6 +13,7 @@ class LinkTooltip extends Tooltip  -  Change + Remove Done' constructor: (@quill, @options) -> @@ -35,6 +36,9 @@ class LinkTooltip extends Tooltip this.hide() ) dom(@container.querySelector('.done')).on('click', _.bind(this.saveLink, this)) + dom(@container.querySelector('.remove')).on('click', => + this.removeLink(@range) + ) dom(@container.querySelector('.change')).on('click', => this.setMode(@link.href, true) ) @@ -53,6 +57,15 @@ class LinkTooltip extends Tooltip @quill.formatText(@range, 'link', url, 'user') this.setMode(url, false) + removeLink: (range) -> + # Expand range to the entire leaf + if range.isCollapsed() + [leaf, offset] = @quill.editor.doc.findLeafAt(range.start, true) + range = + start: range.start - offset + end: range.start - offset + leaf.length + @quill.formatText(range, 'link', false, 'user') + setMode: (url, edit = false) -> if edit @textbox.value = url @@ -76,13 +89,14 @@ class LinkTooltip extends Tooltip return null _onToolbar: (range, value) -> - return unless range and !range.isCollapsed() - if value + return unless range + + if value and !range.isCollapsed() this.setMode(this._suggestURL(range), true) nativeRange = @quill.editor.selection._getNativeRange() this.show(nativeRange) else - @quill.formatText(range, 'link', false, 'user') + this.removeLink(range) _normalizeURL: (url) -> url = 'http://' + url unless /^(https?:\/\/|mailto:)/.test(url) diff --git a/src/themes/base/modules/link-tooltip.styl b/src/themes/base/modules/link-tooltip.styl index c7745765fa..c22ae8aa47 100644 --- a/src/themes/base/modules/link-tooltip.styl +++ b/src/themes/base/modules/link-tooltip.styl @@ -7,5 +7,5 @@ .ql-link-tooltip.editing input.input, a.done display: inline-block - a.url, a.change + a.url, a.change, a.remove display: none From 1d4f0b2dbef8b920981215f048aa30f74ea07f32 Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Sat, 22 Nov 2014 00:01:59 -0500 Subject: [PATCH 2/6] Extract _expandRange function --- src/modules/link-tooltip.coffee | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/modules/link-tooltip.coffee b/src/modules/link-tooltip.coffee index 6d5075b303..aa0fbdd87e 100644 --- a/src/modules/link-tooltip.coffee +++ b/src/modules/link-tooltip.coffee @@ -60,10 +60,7 @@ class LinkTooltip extends Tooltip removeLink: (range) -> # Expand range to the entire leaf if range.isCollapsed() - [leaf, offset] = @quill.editor.doc.findLeafAt(range.start, true) - range = - start: range.start - offset - end: range.start - offset + leaf.length + range = this._expandRange(range) @quill.formatText(range, 'link', false, 'user') setMode: (url, edit = false) -> @@ -88,6 +85,12 @@ class LinkTooltip extends Tooltip node = node.parentNode return null + _expandRange: (range) -> + [leaf, offset] = @quill.editor.doc.findLeafAt(range.start, true) + start = range.start - offset + end = start + leaf.length + return { start, end } + _onToolbar: (range, value) -> return unless range From cd466d9084e3b1d3ab7bc8fd7ba346c51ce438fd Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Sat, 22 Nov 2014 00:02:47 -0500 Subject: [PATCH 3/6] Tell the toolbar to update active status in removeLink --- src/modules/link-tooltip.coffee | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/link-tooltip.coffee b/src/modules/link-tooltip.coffee index aa0fbdd87e..d96f93963a 100644 --- a/src/modules/link-tooltip.coffee +++ b/src/modules/link-tooltip.coffee @@ -44,6 +44,7 @@ class LinkTooltip extends Tooltip ) this.initTextbox(@textbox, this.saveLink, this.hide) @quill.onModuleLoad('toolbar', (toolbar) => + @toolbar = toolbar toolbar.initFormat('link', _.bind(this._onToolbar, this)) ) @@ -62,6 +63,7 @@ class LinkTooltip extends Tooltip if range.isCollapsed() range = this._expandRange(range) @quill.formatText(range, 'link', false, 'user') + @toolbar.setActive('link', false) if @toolbar? setMode: (url, edit = false) -> if edit From 2444fbe973afef82bab59899903d260d4742c9e7 Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Thu, 11 Dec 2014 10:35:38 -0500 Subject: [PATCH 4/6] Remove blank line, and add some whitespace in link-tooltip --- src/modules/link-tooltip.coffee | 1 - src/themes/base/modules/link-tooltip.styl | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/modules/link-tooltip.coffee b/src/modules/link-tooltip.coffee index d96f93963a..2dfdab5ae5 100644 --- a/src/modules/link-tooltip.coffee +++ b/src/modules/link-tooltip.coffee @@ -95,7 +95,6 @@ class LinkTooltip extends Tooltip _onToolbar: (range, value) -> return unless range - if value and !range.isCollapsed() this.setMode(this._suggestURL(range), true) nativeRange = @quill.editor.selection._getNativeRange() diff --git a/src/themes/base/modules/link-tooltip.styl b/src/themes/base/modules/link-tooltip.styl index c22ae8aa47..e91796e589 100644 --- a/src/themes/base/modules/link-tooltip.styl +++ b/src/themes/base/modules/link-tooltip.styl @@ -4,6 +4,8 @@ width: 170px input.input, a.done display: none + a.change + margin-right: 4px .ql-link-tooltip.editing input.input, a.done display: inline-block From b57c65e7622b7aadde0c4e537cb67c9d6fa087f2 Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Mon, 5 Jan 2015 17:51:30 -0500 Subject: [PATCH 5/6] Allow calling quill.updateContents() with an array Provides consistency with the setContents() method, which currently accepts both array and delta objects as the argument. --- src/quill.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/src/quill.coffee b/src/quill.coffee index 8a5f728a01..8cad6cd682 100644 --- a/src/quill.coffee +++ b/src/quill.coffee @@ -211,6 +211,7 @@ class Quill extends EventEmitter2 this.setContents(delta, source) updateContents: (delta, source = Quill.sources.API) -> + delta = { ops: delta } if Array.isArray(delta) @editor.applyDelta(delta, source) # fn(Number start, Number end, String name, String value, String source) From 1421406c6e3a8b8c4114412ea667802fcaf5a03a Mon Sep 17 00:00:00 2001 From: Blake Thomson Date: Mon, 15 Dec 2014 12:05:51 -0500 Subject: [PATCH 6/6] Bind meta+K to toggle the link tooltip popup --- src/modules/link-tooltip.coffee | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/modules/link-tooltip.coffee b/src/modules/link-tooltip.coffee index 2dfdab5ae5..7c6881488e 100644 --- a/src/modules/link-tooltip.coffee +++ b/src/modules/link-tooltip.coffee @@ -16,6 +16,9 @@ class LinkTooltip extends Tooltip Remove Done' + @hotkeys: + LINK: { key: 'K', metaKey: true } + constructor: (@quill, @options) -> @options = _.defaults(@options, Tooltip.DEFAULTS) super(@quill, @options) @@ -47,6 +50,9 @@ class LinkTooltip extends Tooltip @toolbar = toolbar toolbar.initFormat('link', _.bind(this._onToolbar, this)) ) + @quill.onModuleLoad('keyboard', (keyboard) => + keyboard.addHotkey(LinkTooltip.hotkeys.LINK, _.bind(this._onKeyboard, this)) + ) saveLink: -> url = this._normalizeURL(@textbox.value) @@ -94,6 +100,13 @@ class LinkTooltip extends Tooltip return { start, end } _onToolbar: (range, value) -> + this._toggle(range, value) + + _onKeyboard: -> + range = @quill.getSelection() + this._toggle(range, true) + + _toggle: (range, value) -> return unless range if value and !range.isCollapsed() this.setMode(this._suggestURL(range), true)