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
10bf787651
Parse url and create anchor with queryparams
2018-06-23 14:21:46 +10:00
Neil Jenkins
db005b379b
Make createRange method public
2018-05-09 17:43:11 +10:00
Neil Jenkins
389daab664
If ctrl/meta held down, key is not inserting text
2018-03-26 10:06:01 +01: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
0ae8322d04
Code tidying
2017-07-07 11:32:37 +10:00
Neil Jenkins
0b59a746f7
Ignore selectionchange events outside of editor
...
The selectionchange event handler can only be registered on the document
but we are not interested in changes of focus/selection that happen
outside of the editor, so check we have focus before firing the update
path event.
2017-07-07 11:32:18 +10:00
Neil Jenkins
a8f07d9adb
Default to allowing URIs with unknown protocols
2017-06-28 16:03:31 +10:00
Neil Jenkins
601043f020
Fire a 'cursor' event so selection end can be monitored
2017-06-21 17:03:14 +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
kyuwoo.choi
9eacfb7b22
fix: handle insert table by CF_HTML
...
ms html clipboard format CF_HTML handles table like below if we copy part of table.
it makes problem when copying table from ms product such as ie, excel, powerpoint then pasting to squire.
<TABLE BORDER>
<!--StartFragment-->
<TR><TD>Item 6</TD><TD>Item 7</TD></TR><TR><TD>Item 10</TD><TD>Item 11</TD></TR>
<!--EndFragment-->
</TABLE>
and
<TABLE BORDER><TR>
<!--StartFragment-->
<TD>Item</TD>
<!--EndFragment-->
</TR></TABLE>
https://msdn.microsoft.com/en-us/library/windows/desktop/ms649015(v=vs.85).aspx
#274
2017-05-10 13:59:30 +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
Neil Jenkins
79ffc02557
Unify cut and copy implementations
...
* Data added to clipboard should now always be the same for cut as for copy
* Fixes bug when cutting across blocks, where not all parents would be included
in the data added to the clipboard
2017-01-13 10:24:01 +11:00
Neil Jenkins
6f83f23881
Fix delete behaviour
...
1. Fixes cursor position when deleting starting with a selection at beginning
of block.
2. Fixes block disappears when whole inline contents is deleted.
2017-01-10 10:06:28 +11:00
Neil Jenkins
066bdd2cde
Ignore "cut" if no selection
2017-01-10 10:05:56 +11:00
Neil Jenkins
e645489f5f
Fix empty lines missing when copying plain text
2017-01-10 10:05:35 +11:00
Neil Jenkins
e35ad32c09
Fix potential null deref when sanitizing html
2016-12-13 12:15:35 +11:00
Neil Jenkins
c1c63478f0
Check for queued events before disconnecting mutation observer
...
Fixes #252
2016-12-12 10:35:14 +11:00
Neil Jenkins
3d8cd62edb
Improve copying of plain text on windows
2016-12-11 12:32:25 +11:00
Steven Allen
fcb8a4a63c
Use class constants
2016-12-08 21:03:50 -08:00
Neil Jenkins
2c7f7b907c
Fix copying when not inside valid doc structure
2016-12-09 10:42:18 +11:00
Neil Jenkins
30dc11fd3c
If deleting range to start/end of doc, collapse into a block
2016-12-09 10:41:52 +11:00
Steven Allen
9dcac8c94e
Never pass null as root.
2016-12-08 13:11:52 -08:00
Neil Jenkins
65a621abcf
null arg to setText(Alignment|Direction) should reset value
...
Resolves #247
2016-12-07 19:22:28 +11:00
Neil Jenkins
a899c001eb
Fix null deref in insertHTML
2016-12-07 19:08:52 +11:00
Neil Jenkins
bb40d03899
Export useful Node helper functions
2016-12-07 18:42:48 +11:00
Neil Jenkins
504b40c857
Add pointer from root node to Squire instance.
...
Resolves #253
2016-12-07 17:54:13 +11:00
Neil Jenkins
9fac7ffdb6
Make HTML sanitization configurable.
...
And default to sanitizing setHTML content as well.
2016-12-07 17:24:16 +11:00
Neil Jenkins
801388222d
Fix pasting plain text when not first item
2016-11-21 10:59:44 +11:00
Neil Jenkins
0b72f29ce5
Don't bother caching text node category
2016-11-21 10:59:11 +11:00
Neil Jenkins
f46dee1255
Memoize node category with weak map
...
Fix horrendous performance of isInline etc.
2016-11-15 11:07:15 +11:00
Neil Jenkins
8ab95e0dac
Reset ignoreChange flag in modifyDocument method
...
Resolves #245
2016-11-04 11:17:31 +11:00
Neil Jenkins
c656be7e65
Fix copying plain text in Firefox
...
Resolves #244
2016-11-02 15:32:06 +11:00
Neil Jenkins
e517f1505b
Fix converting OL <-> UL
2016-10-19 14:45:17 +11:00
selvan
23375d4422
Preserve 'bold' font style while copy & pasting from Google Docs. Google docs uses numeric value 700 as font-weight for bold instead of string value 'bold'
2016-09-29 11:37:25 +05:30
selvan
68618b1e5d
Preserve cell width while copy & pasting from Goolgle Sheet - added COLGROUP and COL as part of 'allowedBlock' regex
2016-09-29 11:36:14 +05:30
Neil Jenkins
5f8bd2d935
Treat nbsp as content when cleaning DOM tree.
...
Fixes #240 .
2016-09-28 12:02:29 +10:00
Neil Jenkins
0fa4a9b587
Replace block node when creating list
...
So you get:
<li>Text</li>
instead of
<li><p>Text</p></li>
2016-09-27 06:06:42 +04:00
Islam Sharabash
6a9582c7e7
Allowing arbitrary nesting for bullets
...
This allows any level of indentation for bullets. It does this by introducing
invalid HTML. In particular, you can make bullets like:
<ul>
<ul>
<li>foo</li>
</ul>
</ul>
2016-09-27 05:50:59 +04:00
Neil Jenkins
4f83b0a8bc
Treat inline tags as containers in malformed HTML
...
Fixes #239 .
2016-09-26 11:37:38 +01:00
Neil Jenkins
d8239d2570
Skip placeholder BRs when moving range up/down tree
2016-09-25 21:43:47 +01:00
Neil Jenkins
78b638f79b
Ensure root node is never returned by get(Start|End)BlockOfRange
...
Fixes #237
2016-09-22 09:44:03 +01:00
Neil Jenkins
e1d30b7082
Fix error when copying inline text-only.
2016-09-10 09:24:14 -04:00
Neil Jenkins
26b71dee8e
Fix copying inline styles when selection not on boundary.
...
Resolves #219 properly this time.
2016-09-09 12:14:57 -04:00
Neil Jenkins
9aacad6e3c
Make Shift-Ctrl-V paste as plain text.
...
Fixes #230 .
2016-09-04 20:58:49 -04:00
Neil Jenkins
cbde7a9198
Always preserve inline formatting on copy
...
Fixes #219 .
2016-09-04 20:44:36 -04:00
Neil Jenkins
25ff83455e
Exports some useful internal functions
...
This is a rebase/slight tidy of #226 .
2016-08-23 20:59:38 +10:00
Islam Sharabash
ead3ea9f39
Fix bug where TIME element was not being counted as inline
...
This makes inline node detection count the TIME element as an inline element.
This was causing <br> to be inserted into a TIME element incorrectly via fixCursor.
2016-08-22 13:16:05 -07:00
Neil Jenkins
aae328e226
Ensure valid DOM tree is added to clipboard on copy
...
Fixes #204 .
2016-08-10 16:24:13 +10:00
Neil Jenkins
aaaae70504
Tidy code.
2016-08-05 20:49:44 +10:00
Andy Kauffman
6e1b864663
Remove Unneeded ZWS
...
ZWS are added when formats are added, however these are not cleaned up
if the format is changed. Now they will be cleaned up if they only
contain ZWS and no text.
2016-08-05 20:48:24 +10:00
Neil Jenkins
1a797aca48
Merge pull request #218 from nhnent/leafNodeNames-are-configurable
...
leafNodeNames are configurable
2016-08-05 20:37:12 +10:00
Sungho Kim
b83d071666
leafNodeNames are configurable
2016-07-27 16:59:15 +09:00
Sungho Kim
c3d4d551ed
Fix MSIE detection regex
2016-07-27 16:33:06 +09:00
Sungho Kim
96b03d4aaf
Fire focus or blur event manually in focus/blur method for MSIE because
...
MSIE invoke focus/blur event listener asynchronously
2016-07-27 16:15:42 +09:00
Neil Jenkins
df9b5add68
Explicit attributes should override defaults
...
Fixes #203
2016-07-16 16:51:24 +10:00
Neil Jenkins
766dea7ccf
Merge inlines when inserting node into range
2016-07-14 12:15:06 +10:00
Neil Jenkins
13241028f1
Workaround Android hiding the keyboard on cut.
2016-07-14 11:32:38 +10:00
Neil Jenkins
d4abc182c8
If selection, delete contents before letting brower insert space
...
Fixes #213
2016-07-14 11:31:11 +10:00
Neil Jenkins
aaf84870aa
Ensure focus after paste
2016-07-14 10:39:20 +10:00
Neil Jenkins
6ef4ad96e8
Fix whitespace
2016-07-07 16:11:45 +10:00
Andy Kauffman
964070ee46
Path contains format values
...
Add values of font size, font face, and color to the path. This allows
us to distinguish path changes to different formats.
2016-07-07 16:11:45 +10:00
Neil Jenkins
db09921d7b
Fix multiple firing of updatePathOnEvent
2016-06-27 13:17:18 +10:00
Neil Jenkins
267085e8c1
Don't disable restore selection on input
...
The only time we don't want to restore selection is if the user explicitly
changes it, by clicking/touching a specific cursor point.
Fixes formatting commands in IE11, where the mutation event first between
calling editor.focus() and the focus event actually firing, rather than
after the focus event as in other browsers.
2016-06-27 12:05:40 +10:00
Neil Jenkins
f060dbf978
Restore selection of focus after call to setHTML.
2016-06-16 14:45:19 +10:00
Neil Jenkins
f593d8ac04
Enforce sane focus/blur events.
...
Because focus/blur events are fired synchonously, browsers can get confused if
UI code starts focusing other elements while inside a focus/blur handler, and
end up firing events in the wrong order which can cause infinite loops.
This change ensures we only get a focus/blur event when they really are
happening, and you always get one then the other.
2016-06-10 11:02:24 +10:00
Neil Jenkins
84ae8a05f5
Interpret null value for set font/size/colour methods correctly.
...
Removes any current formatting of the given type.
2016-06-08 15:38:13 +10:00
Neil Jenkins
048a7296b2
changeFormat should always return self.
2016-06-07 16:27:04 +10:00
Andy Kauffman
8eea926e2b
Limit the undo stack size
...
Add an undo configuration.
If the document is larger than the configured threshold, then limit the
number of undo states that can be saved to the configured amount.
Defaults to no limit.
Merged for #200
2016-06-06 18:50:11 +10:00
Neil Jenkins
bd4d377cf0
Sanitise pasted HTML if DOMPurify library present.
...
This protects against malicious HTML being added to the clipboard, and also
removes unwanted content before insertion.
DOMPurify can be found at https://github.com/cure53/DOMPurify
2016-06-06 12:36:08 +10:00
Andy Kauffman
9dcc4fb79f
Cleanup P and Underline tags
...
node.
2016-05-26 14:16:15 +10:00
Neil Jenkins
8b580ed988
Add undo checkpoint on drop.
...
Resolves #188 .
2016-05-26 13:54:26 +10:00
Neil Jenkins
6deae3c188
Strip HTML surrounding copied fragment added by Edge.
...
Fixes #181
2016-05-26 13:09:49 +10:00
Neil Jenkins
7ecf75f246
Fix determining if at start of block when at end of doc
...
Fixes #190
2016-05-26 11:42:53 +10:00
Neil Jenkins
d225f384b7
Use selectionchange event if available.
...
Fixes #194 .
2016-05-26 11:07:11 +10:00
Neil Jenkins
4354b46db9
Don't merge <a> tags.
...
Fixes #198
2016-05-26 10:33:18 +10:00
Neil Jenkins
aa3857ab77
Use default block config when inserting plain text
2016-05-25 12:41:57 +10:00
Andy Kauffman
4e7e290fbc
Fix block boundary issue
...
If the node is at the end of the document, this method can fail with
'TypeError: Cannot read property 'previousSibling' of null'
2016-05-19 10:28:46 +10:00
Neil Jenkins
f7774c8cf3
Always save selection on blur.
...
Hopefully fixes #194
2016-05-18 18:07:55 +10:00
Neil Jenkins
1f4baefda4
Remove dragover/drop from custom events list.
...
Fixes #183
2016-05-05 12:22:56 +10:00
Neil Jenkins
6c4f8e1aaf
Add support for default <a> attributes
...
Resolves #186 .
2016-05-05 11:50:36 +10:00
Andy Kauffman
f50962db7f
Add a modifyDocument method
...
There are certain times when it is necessary to modify the document
programmatically, such as to set attributes, add tooltips, etc. Such
edits should not be observed as inputs. This method allows edits to be
ignored by the editor.
2016-05-05 11:30:27 +10:00
Andy Kauffman
64ee5db293
insertElement should register as input for older browsers
2016-05-02 13:47:39 -04:00
Neil Jenkins
0f361d69c6
Add IFRAME to list of inline nodes.
...
Resolves #180 .
2016-05-01 16:36:43 +10:00
Neil Jenkins
6a28aafd2f
Add HR as a leaf node name.
2016-05-01 16:33:47 +10:00
Neil Jenkins
e3d0576a38
Workaround Facebook iOS URL copying bug
2016-04-11 16:58:13 +10:00
Neil Jenkins
44a2b5c7a8
Add guard for null nodes in insertTreeFragmentIntoRange
2016-04-08 17:42:47 +10:00
Neil Jenkins
66c0b20702
Squire: Fix possible error when deleting range
2016-04-07 13:08:45 +10:00
Neil Jenkins
d9122222b2
Restore range more accurately from bookmark
2016-03-30 16:39:04 +11:00
Neil Jenkins
ed44d72ca7
Add dragover and drop to custom events list
...
Since these are fired by the clipboard handler.
2016-03-30 13:23:47 +11:00
Neil Jenkins
5b4aa6b764
Add getRoot method
2016-03-30 10:42:41 +11:00
Neil Jenkins
230520645b
Fix cleanup of white space
2016-03-28 10:14:55 +11:00
Neil Jenkins
bac7c5d2cc
Restore selection on focus, unless explicit click
2016-03-28 09:58:50 +11:00
Neil Jenkins
3ff9a46ea9
Check for null parent in getPath
2016-03-26 11:32:59 +11:00
Neil Jenkins
923a0efd1a
Fix delete/backspace removing content outside editor
2016-03-26 11:20:28 +11:00
Neil Jenkins
3dca852630
Log errors from fixCursor to track down bug
2016-03-24 22:04:42 +11:00
Neil Jenkins
4ca3b20b8a
Handle old browsers w/o range.getBoundingClientRect
2016-03-24 21:25:14 +11:00
Neil Jenkins
072a2d9fce
Add getCursorPosition method, remove scrollRangeIntoView
...
Scrolling depends so much on the integration. Better to allow the cursor
position to be fetched, and then the integration can do the scrolling when it
wants (for example on each "input" event).
2016-03-24 13:48:09 +11:00
Neil Jenkins
3be9a7dea8
Workaround iOS clipboardData bug
2016-03-24 09:44:35 +11:00
Neil Jenkins
6a348e084b
Make Squire work without an iframe(!)
2016-03-23 17:41:09 +11:00
Neil Jenkins
e133f26db1
Fix getFontInfo iteration up tree
2016-03-18 18:55:21 +11:00
Neil Jenkins
349f391075
Fix typo in cut/copy handlers
2016-03-14 15:21:48 +11:00
Neil Jenkins
c895d6b307
Set a plain text version too on cut/copy
2016-03-12 17:18:21 +11:00
Neil Jenkins
62616ef4ec
Add saveUndoState method to public API
...
For #174
2016-03-11 15:58:32 +11:00
Neil Jenkins
6413034884
Improve copy/paste
...
* In browsers that support it, we now tell it to copy exactly what was selected
in the DOM, and not to add extra gunk which browsers do to preserve exact
styling if pasted into another document.
* Don't use the clipboard APIs with MS Edge, since it only supports plain text.
If we let it fallback to the browser implementation it will insert HTML.
2016-03-11 15:22:49 +11:00
Neil Jenkins
6ed3b93900
Workaround Firefox clipboard ignores RTF data
2016-03-07 18:38:07 +11:00
Neil Jenkins
9b88aca813
Fix crash in scrollRangeIntoView if no bounding rect
2016-03-07 17:19:51 +11:00
Neil Jenkins
6bafa1d140
Run fixContainers before merging blocks.
...
In case paste or something has got the document into a weird state with inline
content not inside a block.
2016-02-26 14:28:53 +11:00
Neil Jenkins
2fccc317ad
Fix getFontInfo method.
...
Resolves #169
2016-02-03 15:35:13 +11:00
Neil Jenkins
7330324d92
Fix Firefox throws error if initialised with display:none
...
Fixes #168 .
2016-01-06 14:38:53 +11:00
Neil Jenkins
93f7867214
Fix Meta-Left/Right handling in Firefox.
...
Fixes #167 .
2015-12-29 11:15:01 +11:00
Neil Jenkins
8b183c6ef6
Add scrollPointIntoView event for integrations.
2015-12-09 17:29:47 +11:00
Neil Jenkins
9ccf765ba8
Scroll cursor into view after setting selection.
...
Fixes #162 and fixes #165 .
2015-12-09 15:12:47 +11:00
Neil Jenkins
df25d6d596
Add colour/background-colour to result of getFontInfo
...
Resolves #158
2015-12-03 18:14:49 +11:00
Neil Jenkins
0d1f1cf44b
Consistently don't use a space in CSS when setting colour.
...
Fixes #159 .
2015-12-03 17:55:22 +11:00
priceld
abfebbab16
change the walker's currentNode to reflect the changes being made to the tree
2015-12-01 10:53:30 -05:00
Neil Jenkins
987f3afd52
Fix escaping first/last line plain text on insertion.
...
Fixes #157 .
2015-11-20 13:55:57 +11:00
Neil Jenkins
bf8f796ea4
Add shift-tab keyboard shortcut.
...
If at beginning of list item, shift-tab decreases indent (to mirror tab to indent).
2015-11-17 16:50:55 +11:00
Neil Jenkins
162ec9049e
Make scroll on enter logic independent of CSS.
...
Fixes #149 .
2015-10-23 17:05:32 +01:00
Trey Cordova
85c9002ce5
Add tab nesting capability to list items with text in them;
...
- This requires your cursor to be at the beginning of the list item.
- This implementation mimics Google Docs.
2015-10-23 14:22:04 +02:00
Neil Jenkins
8d178e1a65
Merge pull request #141 from gertsonderby/test/hasFormat
...
Added test suite that checks a number of cases for hasFormat().
2015-10-13 09:10:13 +02:00
Gert Sønderby
c40f900b7d
Fixed copypasta-mistake, nextSibling -> previousSibling.
2015-10-13 08:46:44 +02:00
Ray Brooks
08e85c912b
[Issue-147] Fix Firefox hidden iframe win.getSelection() bug
...
[Issue-147] Fixed code convention errors
2015-10-12 21:52:10 +01:00
Gert K. Sønderby
49ca521704
Fix up ranges in weird cases generated by IE (both start and end to be safe).
2015-10-02 15:26:30 +02:00
Neil Jenkins
9461368a5c
Fix whitespace errors.
...
Thanks to @gertsonderby who pointed these out in #138 .
2015-09-28 15:48:23 +02:00
Neil Jenkins
0ec3c43791
Don't prevent default on tab unless doing something.
...
Fixes #131 .
2015-09-04 18:33:11 +01:00
Gert K. Sønderby
94f5a56255
Added getFontInfo() function, which extracts font-family and font-size styles.
2015-09-03 11:48:47 +01:00
xfra35
702991c2c6
Allow FIGCAPTION block tags
2015-08-31 16:41:29 +02:00
Neil Jenkins
02df8f9ed4
Merge pull request #127 from gertsonderby/remove-all-cleans-inputs
2015-08-27 11:16:20 +01:00
Gert K. Sønderby
8238b7a8e4
Removing all formatting also removes INPUT elements.
2015-08-26 15:42:01 +02:00
Gert K. Sønderby
5a46d51671
Lone IMG tags in a range will be accepted by _addFormat, so that they can be made into links.
2015-08-26 15:07:58 +02:00
Neil Jenkins
900e43cca8
Fix prefix white-space trimmed on paste of plain text.
2015-07-25 18:11:56 -07:00