0
Fork 0
mirror of https://github.com/fastmail/Squire.git synced 2024-12-22 23:40:35 -05:00
Commit graph

343 commits

Author SHA1 Message Date
Neil Jenkins
07b459db3b Remove support for IE<11 2020-03-11 14:48:48 +11:00
Neil Jenkins
58321e5504 Remove support for pre-Chromium Opera 2020-03-11 14:47:14 +11:00
Neil Jenkins
b36a35faf4 Remove polyfill for FF3.5
That's way too old to support any more.
2020-03-11 14:36:30 +11:00
Neil Jenkins
e1f982a3dd Detect iOS when it's an iPad pretending to be a Mac 2020-03-11 14:35:50 +11:00
Neil Jenkins
2d307ba54a Fix first line of plain text paste not HTML escaped 2020-03-10 18:46:40 +11:00
Neil Jenkins
f6d6ac8ca0 Pasting plain text on a blank line should keep line's formatting 2020-03-02 10:23:24 +11:00
Neil Jenkins
c5a7c622fe Preserve target block formatting when pasting inline text
If you have a document like this:

<div style="font-size:20px">XXXX</div>
<div style="font-size:14px">YYYY</div>

and you select the YYYY text and copy it, we just copy the text to the clipboard
and not the block formatting. This is fine.

Now you select XXXX and paste. Because that removes all content from the first
block we were replacing it with the block formatting from the clipboard. But
this has no block formatting, so you essentially just "lost" the font-size:20px,
which broke user expectations.

(If the copied text *did* have block formatting, then replacing the block is
the correct thing to do in this case, which we still do.)
2020-02-24 14:50:22 +11:00
Neil Jenkins
2799f172ee Preserve all span attributes
When cleaning the span don't remove it, just remove the properties now going
into their own node.
2020-02-24 14:50:03 +11:00
Neil Jenkins
b550de09f0 Don't extract colour into separate <span>s
Because it's the parsed representation, you lose the comments in the
CSS so it breaks the dark mode reverse transform.
2020-02-24 14:49:48 +11:00
Neil Jenkins
8980c1ac4a Skip replacing node if type/class match
Replacing the node risks blatting other properties, so safer not to if it
already seems to be the right sort.
2020-02-24 14:49:30 +11:00
Neil Jenkins
9916a4c300 Improve link detection regexp.
Fixes the pathological handling of unmatched brackets, which could hang the
browser. Adds support for mailto: query params. Removes support for nested
parentheses in URLs, as these are rare. Adds comment with formatted version of
regex to make it easier to modify in future.
2020-02-24 14:48:46 +11:00
Neil Jenkins
f8a5b1ee19 Don't try to rewrite style of <p>
This was the only block-level element being rewritten, and could result in some
strange effects. For example, when you move a background colour from the <p> to
a <span>, it renders very differently. It was already inconsistent to do this
for <p> but not for <div>, and better just to drop it.
2020-02-24 14:47:33 +11:00
Limon Monte
9c6a3f6983 bump build files 2019-12-30 13:14:33 +11:00
Neil Jenkins
9218c9ba14 Fix iOS auto-capitalisation on enter 2019-11-20 22:52:36 +08:00
Neil Jenkins
3dc4f201d9 Don't autoscroll on focus
If the rich text view is inside an overflow:scroll, every time you add a link
or do something else that requires we programatically focus the editor it would
jump the scroll back to the top; very annoying.
2019-09-25 20:49:56 -04:00
Neil Jenkins
6b85bda364 Handle pasting text/uri-list 2019-03-25 15:40:41 -04:00
Neil Jenkins
43b2c6b0e1 Insert table rather than image on paste from Excel 2019-02-21 16:31:06 +11:00
Neil Jenkins
2059c5a4ae Fix pasting image copied from browser 2019-01-10 15:18:24 +11:00
Neil Jenkins
892986b17c Don't crash removing list if no <li> inside 2018-10-19 11:54:05 +11:00
Neil Jenkins
5b998f5b6f Fix Kana-Kanji input on Mac Safari
Resolves #332
2018-10-15 08:40:10 +11:00
Neil Jenkins
79e65240bd Make detect-link regular expression customisable
Resolves #313
2018-10-05 17:00:09 +10:00
Neil Jenkins
b14ae45b38 Escape <a> on space even if in nested tags
Fixes #326
2018-10-05 16:25:28 +10:00
Neil Jenkins
625d10139e Add support for <pre>/<code> formatting 2018-07-27 10:47:38 +10:00
Neil Jenkins
e07150192f Make shift-enter always just add <br> 2018-07-27 09:23:26 +10:00
Neil Jenkins
2d5114c669 Make TreeWalker filter argument optional 2018-07-27 09:22:06 +10:00
Neil Jenkins
e3e7c17315 Add config.willCutCopy option
Is an optional function that transforms the HTML being cut/copied before
placing it on the clipboard.
2018-07-12 15:40:01 +10:00
Neil Jenkins
f0594091c5 Allow class names to be configured 2018-07-12 15:22:18 +10:00
Neil Jenkins
7a24d6c505 Make check for link protocol case-insensitive
Resolves #308.
2018-06-23 14:39:59 +10:00
Neil Jenkins
35a25e6d44 Simplify regex for matching link query params 2018-06-23 14:35:16 +10:00
dhoko
55fa0ae8e9 Build lib 2018-06-23 14:21:47 +10:00
Neil Jenkins
db005b379b Make createRange method public 2018-05-09 17:43:11 +10:00
Neil Jenkins
23b95e6594 Update built version from latest source 2018-04-04 20:14:53 +10:00
Neil Jenkins
b0ac7d32d0 Handle all cases of overwriting content
Modern browsers tell you which character will be inserted with event.key, so
we can make sure we handle content deletion ourselves in these cases too.
2018-03-18 10:40:03 +00:00
Neil Jenkins
9dda7cc845 Fix FF does not leave <a> on space 2018-03-18 10:34:12 +00:00
Neil Jenkins
070f2e52a3 Support pasting images in Edge 2017-12-13 16:43:43 +11:00
Neil Jenkins
50fb7c7c53 Preserve block style if pasting on blank line
If the clipboard contains block contents, e.g.

<blockquote><p>Foo</p></blockquote>

Then if you paste it into a block that already has content we merge the inline
content from the first block and discard its surrounding block.

However, if you paste into an empty block, we'll now keep the block and remove
the empty one in the document. This seems a reasonable heuristic for determining
user intent.
2017-11-01 10:45:21 +11:00
Neil Jenkins
306230d0df Better handling of <pre>
* Pasting <pre> should not attempt to merge with block.
* Hitting enter should produce a new <pre>, otherwise all new lines after the
  break are lost.
2017-09-05 11:42:54 +10:00
Neil Jenkins
033370ebee Don't try to merge table cell into block on paste 2017-09-04 10:22:49 +10:00
Neil Jenkins
c5be1b79dc Fix broken variable reference 2017-08-17 14:12:29 +10:00
Neil Jenkins
833d7dfdbd New (increase|decrease)ListLevel algorithms
Fixes #287
2017-08-15 11:11:48 +10:00
Neil Jenkins
6842cb94eb Fix undo does not always restore cursor position.
If the content hasn't changed before an undo point is requested we ignore the
request, but the cursor position may have changed and users expect undo to
restore the cursor position immediately before the requested change was made.

So in this instance we now still record an undo state, but replace the previous
one if the content is unchanged.
2017-07-19 14:29:36 +02:00
Neil Jenkins
48fabd491a Improved algorithm for inserting tree into range
Fixes #283
2017-07-19 14:29:16 +02:00
Neil Jenkins
239b7d19e9 Ignore saved selection if not in document
The browser will rewrite the range if the nodes it refers to are removed from
the document, so check that it's still in the document before returning.
2017-07-07 11:48:42 +10:00
Neil Jenkins
a8f07d9adb Default to allowing URIs with unknown protocols 2017-06-28 16:03:31 +10:00
Neil Jenkins
283a7d1d85 Don't consider editor focused if sub-element focused
Fixes #267
2017-05-10 14:22:56 +10:00
Neil Jenkins
632aae016b Code style fixup 2017-05-10 14:00:28 +10:00
Neil Jenkins
bb593e879a Don't insert <br> inside end of <a> on enter
Fixes #271
2017-03-21 17:06:44 +11:00
Neil Jenkins
70a2b48333 Return cached selection if not focused
If an action modifies the selection while the editor is not focused, we cannot
immediately set it in the DOM as this triggers focus. So instead we cache it and
restore on focus. If getSelection is called before the editor is next focused,
we need to return this new selection, not the current DOM selection.

Fixes #259
2017-02-11 09:40:56 -08:00
Neil Jenkins
45fee4c858 Fix potential infinite loop on cut
Common ancestor of range may change while range is manipulated for deletion.
2017-01-19 17:08:39 +11:00
Neil Jenkins
9596f4ecf8 Ensure moving boundaries up tree never passes root 2017-01-13 15:15:59 +11:00