From ef3c82313724ea929f33c4a37602aee96cc5a091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Fri, 2 Jun 2017 14:10:32 +0200 Subject: [PATCH 1/5] Add property isEmpty to State --- src/models/state.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/models/state.js b/src/models/state.js index 3842195907..8028c45683 100644 --- a/src/models/state.js +++ b/src/models/state.js @@ -425,6 +425,22 @@ class State extends new Record(DEFAULTS) { : this.document.getTextsAtRange(this.selection) } + /** + * Check whether the selection is empty. + * + * @return {Boolean} + */ + + get isEmpty() { + const { startKey, endKey, startOffset, endOffset } = this + + if (startKey == endKey) { + return (startOffset == endOffset) + } + + return this.fragment.text.length == 0 + } + /** * Return a new `Transform` with the current state as a starting point. * From 9a9d9917648a2db255890b28d0af2d101d5b1068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Fri, 2 Jun 2017 14:23:37 +0200 Subject: [PATCH 2/5] Update hovering menu example --- examples/hovering-menu/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/hovering-menu/index.js b/examples/hovering-menu/index.js index 157f24fec4..0d7f7fab31 100644 --- a/examples/hovering-menu/index.js +++ b/examples/hovering-menu/index.js @@ -179,7 +179,7 @@ class HoveringMenu extends React.Component { const { menu, state } = this.state if (!menu) return - if (state.isBlurred || state.isCollapsed) { + if (state.isBlurred || state.isEmpty) { menu.removeAttribute('style') return } From 11df9d4f14413c55f39c9c9dc0819198e07d12d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Fri, 2 Jun 2017 14:25:00 +0200 Subject: [PATCH 3/5] Document isEmpty --- docs/reference/models/state.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/reference/models/state.md b/docs/reference/models/state.md index 5e059f750e..ff2aa82019 100644 --- a/docs/reference/models/state.md +++ b/docs/reference/models/state.md @@ -33,6 +33,7 @@ For convenience, in addition to transforms, many of the [`Selection`](./selectio - [`isExpanded`](#isExpanded) - [`isFocused`](#isfocused) - [`isForward`](#isForward) + - [`isEmpty`](#isEmpty) - [Static Methods](#static-methods) - [`State.create`](#statecreate) - [Methods](#methods) @@ -153,6 +154,10 @@ Whether the current selection is focused. Whether the current selection is forward. +### `isEmpty` +`Boolean` + +Whether the current selection is empty. ## Static Methods From 24987debd902d6ce058d5d9000ecf4603a356689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Tue, 13 Jun 2017 09:17:51 +0200 Subject: [PATCH 4/5] Improve perf of isEmpty with @Soreine 's suggestion --- src/models/state.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/models/state.js b/src/models/state.js index 8028c45683..c46a9df705 100644 --- a/src/models/state.js +++ b/src/models/state.js @@ -432,10 +432,14 @@ class State extends new Record(DEFAULTS) { */ get isEmpty() { - const { startKey, endKey, startOffset, endOffset } = this + const { startOffset, endOffset } = this - if (startKey == endKey) { - return (startOffset == endOffset) + if (this.isCollapsed) { + return + } + + if (endOffset != 0 && startOffset != 0) { + return } return this.fragment.text.length == 0 From 13619d1b0ec0b52ab76d895e67d38752d57c677b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samy=20Pess=C3=A9?= Date: Tue, 13 Jun 2017 09:26:24 +0200 Subject: [PATCH 5/5] Fix return of isEmpty --- src/models/state.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/models/state.js b/src/models/state.js index c46a9df705..10408dd8e2 100644 --- a/src/models/state.js +++ b/src/models/state.js @@ -435,11 +435,11 @@ class State extends new Record(DEFAULTS) { const { startOffset, endOffset } = this if (this.isCollapsed) { - return + return true } if (endOffset != 0 && startOffset != 0) { - return + return false } return this.fragment.text.length == 0