diff --git a/service2.js b/service2.js
index 67e97c5..d5dd8fb 100644
--- a/service2.js
+++ b/service2.js
@@ -8,10 +8,6 @@
*/
let besServices = []
-window.addEventListener('scroll', () =>
- besServices.forEach(service => service.onScroll())
-)
-
// TODO: Window resize may cause host element(s) to move. That needs correction panel and status icon
// repositioning. Also, should any parent element of our service host element move, we should reposition
// correction panel and status icon. How to do this? Alas there is no PlacementObserver to monitor host
@@ -153,15 +149,7 @@ class BesService {
this.scrollPanel.style.top = `${-this.hostElement.scrollTop}px`
// Why do we need to set left to -scrollLeft? It destroys the position of highlights
- // this.scrollPanel.style.left = `${-this.hostElement.scrollLeft}px`
-
- // Markup is in a "position:absolute"
element requiring repositioning when scrolling host element or window.
- // It is defered to reduce stress in a flood of scroll events.
- if (this.scrollTimeout) clearTimeout(this.scrollTimeout)
- this.scrollTimeout = setTimeout(() => {
- this.updateRects()
- delete this.scrollTimeout
- }, 500)
+ this.scrollPanel.style.left = `${-this.hostElement.scrollLeft}px`
}
/**
@@ -207,15 +195,6 @@ class BesService {
return { clientRects, highlights }
}
- updateRects() {
- this.results.forEach(result => {
- result.matches.forEach(match => {
- const clientRects = match.range.getClientRects()
- match.rects = clientRects
- })
- })
- }
-
/**
* Tests if given coordinate is inside of a rectangle.
*
@@ -711,20 +690,24 @@ class BesTreeService extends BesService {
const el = this.getBlockParent(source.targetElement || source.target)
if (!el) return
- const result = this.results.find(child =>
- BesTreeService.isSameParagraph(child.element, el)
- )
- if (result) {
- for (let m of result.matches) {
- for (let r of m.rects) {
- if (BesService.isPointInRect(source.clientX, source.clientY, r)) {
- this.popupCorrectionPanel(el, m, source)
- return
- }
- }
+ let resultMatch
+ for (let result of this.results) {
+ let match = result.matches.find(match => {
+ // This way we can check if the click was inside the rectangle of the highlight even if some content was removed or added.
+ // We used to check if the click was inside the stored rectangle coordinates which is not reliable because the content can change.
+ // But this way we can check if the click was inside the rectangle of the highlight even if some content was changed.
+ // TODO: what to do with rectLists inside match.rects?
+ let rect = match.highlights[0].getBoundingClientRect()
+ return BesService.isPointInRect(source.clientX, source.clientY, rect)
+ })
+ if (match) {
+ resultMatch = match
+ break
}
}
- BesPopup.hide()
+
+ if (resultMatch) this.popupCorrectionPanel(el, resultMatch, source)
+ else BesPopup.hide()
}
}
diff --git a/styles.css b/styles.css
index 0f738dd..247268a 100644
--- a/styles.css
+++ b/styles.css
@@ -4,64 +4,32 @@
.bes-typo-mistake {
border-bottom: 2px solid red;
position: absolute;
- z-index: 2;
+ z-index: 3;
cursor: text;
- pointer-events: none;
+ /* pointer-events: none; */
}
.bes-correction-panel-parent {
- z-index: 3;
- top: 0;
- left: 0;
- width: 0;
- height: 0;
- display: inline;
- float: left;
position: relative;
overflow: visible;
- visibility: visible;
+ float: left;
+ display: inline;
+ width: 0px;
+ height: 0px;
+ border: none;
+ z-index: 1;
}
.bes-correction-panel {
- background: transparent;
- border: none;
- color: transparent;
- cursor: initial;
- display: block;
- float: initial;
- margin: 0;
- max-height: initial;
- min-height: initial;
- max-width: initial;
- min-width: initial;
- outline: initial;
- overflow: hidden;
- padding: 0;
- pointer-events: none;
position: relative;
+ overflow: hidden;
+ border-color: transparent;
+ color: transparent;
+ pointer-events: none;
}
.bes-correction-panel-scroll {
- pointer-events: none;
- box-shadow: initial;
- box-sizing: initial;
- cursor: initial;
- display: block;
- float: initial;
- max-height: initial;
- min-height: initial;
- max-width: initial;
- min-width: initial;
- position: absolute;
- height: initial;
- width: initial;
- animation: auto ease 0s 1 normal none running none;
- background: transparent;
- border-width: initial;
- border-style: none;
- margin: 0px;
- outline: initial;
- padding: 0px;
+ position: relative;
}
.bes-status-div {
@@ -95,3 +63,27 @@
.bes-status-icon.bes-status-mistakes {
background-image: url('images/mistake-svgrepo-com.svg');
}
+
+/* TODO: Styles below should be removed after testing period is over */
+.resizable {
+ overflow-x: scroll;
+ position: relative;
+ display: inline-block;
+ border: 1px solid #ccc;
+ width: 300px;
+ height: 400px;
+ border-radius: 3px;
+ background-color: #f9f9f9;
+}
+
+.mock-content {
+ width: 1000px;
+ height: 600px;
+ background-color: #f9f9f9;
+}
+
+.flex {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}