mirror of
https://github.com/fastmail/Squire.git
synced 2024-12-22 15:23:29 -05:00
Release v2.0.1
This commit is contained in:
parent
1904405ab8
commit
27f19c4782
8 changed files with 113 additions and 49 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file, starting fr
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
|
## [2.0.1] - 2023-02-14
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Auto delink if backspacing inside auto-linked URL. This means if you make a
|
||||||
|
mistake and backspace, you don't end up accidentally fixing the text but
|
||||||
|
leaving the link to the wrong URL.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix duplicate CSS created when replacing styles
|
||||||
|
- Support browsers without Selection#setBaseAndExtent API. This includes some
|
||||||
|
older Firefox versions.
|
||||||
|
|
||||||
## [2.0.0] - 2023-01-23
|
## [2.0.0] - 2023-01-23
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
27
dist/squire-raw.js
vendored
27
dist/squire-raw.js
vendored
|
@ -338,6 +338,12 @@
|
||||||
if (!child || isLeaf(child)) {
|
if (!child || isLeaf(child)) {
|
||||||
if (startOffset) {
|
if (startOffset) {
|
||||||
child = startContainer.childNodes[startOffset - 1];
|
child = startContainer.childNodes[startOffset - 1];
|
||||||
|
let prev = child.previousSibling;
|
||||||
|
while (child instanceof Text && !child.length && prev && prev instanceof Text) {
|
||||||
|
child.remove();
|
||||||
|
child = prev;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (child instanceof Text) {
|
if (child instanceof Text) {
|
||||||
startContainer = child;
|
startContainer = child;
|
||||||
startOffset = child.data.length;
|
startOffset = child.data.length;
|
||||||
|
@ -695,12 +701,16 @@
|
||||||
newTreeBottom.appendChild(el);
|
newTreeBottom.appendChild(el);
|
||||||
}
|
}
|
||||||
newTreeBottom = el;
|
newTreeBottom = el;
|
||||||
node.style.setProperty(attr, css);
|
node.style.removeProperty(attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (newTreeTop && newTreeBottom) {
|
if (newTreeTop && newTreeBottom) {
|
||||||
newTreeBottom.appendChild(empty(node));
|
newTreeBottom.appendChild(empty(node));
|
||||||
|
if (node.style.cssText) {
|
||||||
node.appendChild(newTreeTop);
|
node.appendChild(newTreeTop);
|
||||||
|
} else {
|
||||||
|
replaceWith(node, newTreeTop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return newTreeBottom || node;
|
return newTreeBottom || node;
|
||||||
};
|
};
|
||||||
|
@ -1702,12 +1712,22 @@
|
||||||
self.setSelection(range);
|
self.setSelection(range);
|
||||||
self._updatePath(range, true);
|
self._updatePath(range, true);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
moveRangeBoundariesDownTree(range);
|
||||||
|
const text = range.startContainer;
|
||||||
|
const offset = range.startOffset;
|
||||||
|
const a = text.parentNode;
|
||||||
|
if (text instanceof Text && a instanceof HTMLAnchorElement && offset && a.href.includes(text.data)) {
|
||||||
|
text.deleteData(offset - 1, 1);
|
||||||
|
self.setSelection(range);
|
||||||
|
self.removeLink();
|
||||||
} else {
|
} else {
|
||||||
self.setSelection(range);
|
self.setSelection(range);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
afterDelete(self);
|
afterDelete(self);
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// source/keyboard/Delete.ts
|
// source/keyboard/Delete.ts
|
||||||
|
@ -2473,12 +2493,17 @@
|
||||||
} else {
|
} else {
|
||||||
const selection = window.getSelection();
|
const selection = window.getSelection();
|
||||||
if (selection) {
|
if (selection) {
|
||||||
|
if ("setBaseAndExtent" in Selection.prototype) {
|
||||||
selection.setBaseAndExtent(
|
selection.setBaseAndExtent(
|
||||||
range.startContainer,
|
range.startContainer,
|
||||||
range.startOffset,
|
range.startOffset,
|
||||||
range.endContainer,
|
range.endContainer,
|
||||||
range.endOffset
|
range.endOffset
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
selection.removeAllRanges();
|
||||||
|
selection.addRange(range);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
|
|
27
dist/squire-raw.mjs
vendored
27
dist/squire-raw.mjs
vendored
|
@ -340,6 +340,12 @@ var moveRangeBoundariesDownTree = (range) => {
|
||||||
if (!child || isLeaf(child)) {
|
if (!child || isLeaf(child)) {
|
||||||
if (startOffset) {
|
if (startOffset) {
|
||||||
child = startContainer.childNodes[startOffset - 1];
|
child = startContainer.childNodes[startOffset - 1];
|
||||||
|
let prev = child.previousSibling;
|
||||||
|
while (child instanceof Text && !child.length && prev && prev instanceof Text) {
|
||||||
|
child.remove();
|
||||||
|
child = prev;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (child instanceof Text) {
|
if (child instanceof Text) {
|
||||||
startContainer = child;
|
startContainer = child;
|
||||||
startOffset = child.data.length;
|
startOffset = child.data.length;
|
||||||
|
@ -697,12 +703,16 @@ var replaceStyles = (node, _, config) => {
|
||||||
newTreeBottom.appendChild(el);
|
newTreeBottom.appendChild(el);
|
||||||
}
|
}
|
||||||
newTreeBottom = el;
|
newTreeBottom = el;
|
||||||
node.style.setProperty(attr, css);
|
node.style.removeProperty(attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (newTreeTop && newTreeBottom) {
|
if (newTreeTop && newTreeBottom) {
|
||||||
newTreeBottom.appendChild(empty(node));
|
newTreeBottom.appendChild(empty(node));
|
||||||
|
if (node.style.cssText) {
|
||||||
node.appendChild(newTreeTop);
|
node.appendChild(newTreeTop);
|
||||||
|
} else {
|
||||||
|
replaceWith(node, newTreeTop);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return newTreeBottom || node;
|
return newTreeBottom || node;
|
||||||
};
|
};
|
||||||
|
@ -1704,12 +1714,22 @@ var Backspace = (self, event, range) => {
|
||||||
self.setSelection(range);
|
self.setSelection(range);
|
||||||
self._updatePath(range, true);
|
self._updatePath(range, true);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
moveRangeBoundariesDownTree(range);
|
||||||
|
const text = range.startContainer;
|
||||||
|
const offset = range.startOffset;
|
||||||
|
const a = text.parentNode;
|
||||||
|
if (text instanceof Text && a instanceof HTMLAnchorElement && offset && a.href.includes(text.data)) {
|
||||||
|
text.deleteData(offset - 1, 1);
|
||||||
|
self.setSelection(range);
|
||||||
|
self.removeLink();
|
||||||
} else {
|
} else {
|
||||||
self.setSelection(range);
|
self.setSelection(range);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
afterDelete(self);
|
afterDelete(self);
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// source/keyboard/Delete.ts
|
// source/keyboard/Delete.ts
|
||||||
|
@ -2436,12 +2456,17 @@ var Squire = class {
|
||||||
} else {
|
} else {
|
||||||
const selection = window.getSelection();
|
const selection = window.getSelection();
|
||||||
if (selection) {
|
if (selection) {
|
||||||
|
if ("setBaseAndExtent" in Selection.prototype) {
|
||||||
selection.setBaseAndExtent(
|
selection.setBaseAndExtent(
|
||||||
range.startContainer,
|
range.startContainer,
|
||||||
range.startOffset,
|
range.startOffset,
|
||||||
range.endContainer,
|
range.endContainer,
|
||||||
range.endOffset
|
range.endOffset
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
selection.removeAllRanges();
|
||||||
|
selection.addRange(range);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
|
|
18
dist/squire.js
vendored
18
dist/squire.js
vendored
File diff suppressed because one or more lines are too long
6
dist/squire.js.map
vendored
6
dist/squire.js.map
vendored
File diff suppressed because one or more lines are too long
18
dist/squire.mjs
vendored
18
dist/squire.mjs
vendored
File diff suppressed because one or more lines are too long
6
dist/squire.mjs.map
vendored
6
dist/squire.mjs.map
vendored
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "squire-rte",
|
"name": "squire-rte",
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"description": "Squire is an HTML5 rich text editor, which provides powerful cross-browser normalisation, whilst being supremely lightweight and flexible.",
|
"description": "Squire is an HTML5 rich text editor, which provides powerful cross-browser normalisation, whilst being supremely lightweight and flexible.",
|
||||||
"main": "dist/squire.mjs",
|
"main": "dist/squire.mjs",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
Loading…
Reference in a new issue