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

187 commits

Author SHA1 Message Date
Neil Jenkins
46706db889 Wrap LI contents when merging. 2014-05-23 15:33:00 +10:00
Neil Jenkins
ca5c08e4d0 Cleanup nbsp-only text nodes. 2014-05-20 17:47:02 +10:00
Neil Jenkins
f9cb71a666 Remove Firefox's native table controls. 2014-05-20 13:55:11 +10:00
Neil Jenkins
85c458b2d2 Drop all formatting when breaking block quote.
We don't want the same formatting as the quote in the unquoted section.
2014-05-20 13:49:55 +10:00
Neil Jenkins
76b482b41f Fix off-by-one error trimming white space. 2014-04-30 15:15:54 +10:00
Neil Jenkins
996a0dd672 Trim meaningless white space from text nodes in cleanTree fn.
If a text node at the beinning of a block began with white-space, it would mean
some situations where we should be doing all the transformations for
enter/delete/backspace were being left to the browser.
2014-04-26 11:58:58 +10:00
Neil Jenkins
0d5398868f Better, simpler cleanup of zero-width space placeholders.
Fixes issue applying multiple inline formats at the same time with a collapsed
selection in WebKit. Much more robust than previous method.
2014-04-16 18:07:46 +10:00
Neil Jenkins
712104cd99 Add kb shortcuts for making lists and +/- quote level. 2014-04-07 14:44:44 +10:00
Neil Jenkins
6b754d423c Add support mult-level lists.
* Hit tab to increase list depth, or call increaseListLevel method.
* Hit enter on a blank item to decrease list depth, or call decreaseListLevel method.
2014-04-07 13:05:44 +10:00
Neil Jenkins
bee49bef40 Use <S> to markup strike through, not <STRIKE>.
The <strike> tab has been obsoleted in HTML5.
2014-02-03 18:20:03 +11:00
Neil Jenkins
a875d20f12 Rewrite <s> to <strike> in cleanTree fn. 2014-02-03 17:58:11 +11:00
Neil Jenkins
db82ba1217 Fixup colour attribute in <font> tags.
In the markup cleanup function, extract the "color" attribute from font tags
as well as the size and font-face.
2014-01-28 17:37:31 +11:00
Neil Jenkins
88ced455f9 Add subscript/superscript/strikethrough helper methods.
* And keyboard shortcuts. (Ctrl-Shift-5/6/7 respectively).
2014-01-13 14:32:24 +11:00
Neil Jenkins
08cc8172a8 Stop treating a non-breaking space as white-space.
Its effect is that of a normal character in HTML, that just happens to render
as a space.
2013-11-04 18:21:57 +11:00
Neil Jenkins
0b3df54b6e IE11 Compatibility 2013-10-08 16:44:08 +11:00
Neil Jenkins
5d30a85aa8 Fix broken this reference in afterCut handler. 2013-07-18 15:49:21 +10:00
Neil Jenkins
f918a0106b Fix method call names in _onCut handler. 2013-07-17 17:13:04 +10:00
Neil Jenkins
731a1da910 Fix wrong method name & invalid this. 2013-07-17 16:13:29 +10:00
Neil Jenkins
02a647c574 Fix reference to old range method.
Now a function instead.
2013-07-17 11:35:34 +10:00
Neil Jenkins
d2e9d2214b Fix broken references to this.
The clean functions used a `this` reference to call createElement, but are
called as functions not methods so `this` is undefined. Instead, we'll get the
ownerDocument off the nodes passed in, then call the createElement function
directly.
2013-07-17 11:13:49 +10:00
Neil Jenkins
fefa32b744 Fix reference to setPlaceholderTextNode
This is now an instance method, whereas before it was global. Annoyingly, we
need to access this from from within fixCursor which has no reference to the
RTE instance itself (and it would be a pain to pass one down). For now, just
referring to the global `editor` variable if it exists (i.e. if the script
loaded in an iframe). Need a better solution longer term though.
2013-07-16 20:36:24 +10:00
Neil Jenkins
6b4dda816e Make into a JS class for multiple instantiation.
* If you load the squire.js script into a top-level page rather than an iframe,
  it will add a Squire constructor to the global scope.
* The Squire constructor can be used to instantiate multiple instances on the
  same page without having to load/parse/execute the full code every time.
* For each instance, create a new iframe, then call `new Squire( document )`,
  with the document node for each iframe.
2013-06-20 23:15:18 +10:00
Neil Jenkins
7812b8db23 Turn Range prototype extensions into functions.
A step towards being able to share code between multiple concurrent instances of
the editor. Also reduces minified size slightly.
2013-06-20 21:03:01 +10:00
Neil Jenkins
dbda1fa4ed On paste, ignore image if text/html present.
If you copy a portion of text from word, it includes an image version of the text as well as an HTML version. On paste, we now ignore the image
representation on the clipboard if an HTML representation is present, so that
the text pastes as expected, rather than as an image.
2013-06-03 15:34:51 +10:00
Neil Jenkins
946afc9a17 Support add/removing listeners whilst firing event
If you removed an event listener whilst it was being fired, this would alter the
list of handlers, which would cause the fireEvent function to read past the end
of the array (and to skip the next listener). Now, we clone the array of
listeners before firing, so adding/removing listeners has no effect on an
already firing event.
2013-05-24 14:02:12 +10:00
Neil Jenkins
87c0f3fbe1 Fix Cmd-left/right bug in Firefox on Mac OS X.
Firefox incorrectly goes back/forward in history instead of moving the cursor to
the beginning/end of the line when you press cmd-left/right on a mac. We now
override this to do the right thing.
2013-05-20 16:14:28 +10:00
Neil Jenkins
03818bd3e8 Log error if addEventListener called with null fn 2013-05-20 11:43:08 +10:00
Neil Jenkins
1fbc166226 Ignore IMGs when stripping empty inlines.
When cleaning up pasted content, we remove any empty inline tags. However, we
should not be stripping <img> tags (which are of course both inline and empty).
2013-05-17 17:24:00 +10:00
Neil Jenkins
4c5b157d09 Fix KB bold/italic etc. shortcuts in Webkit.
Webkit needs a special placeholder text node as it can't focus empty text nodes.
This was being cleaned up too early, before the user had a chance to enter any
text.
2013-04-18 13:59:08 +02:00
Neil Jenkins
20f92c9785 Always return nodeAfterSplit from split fn 2013-04-10 13:43:31 +10:00
Neil Jenkins
77b0b6c716 Check for null start block in backspace handler. 2013-04-10 11:08:40 +10:00
Neil Jenkins
dd7034501f Return same node passed in to fixCursor function. 2013-04-10 10:47:42 +10:00
Neil Jenkins
e1bae30a16 Make editor.insertElement support block elements. 2013-04-08 13:48:06 +10:00
Neil Jenkins
af1720282c Replace Node prototype extensions with normal fns.
* Firefox was sometimes not finding the extensions on elements.
* This minifies to a smaller target.
2013-04-08 13:27:06 +10:00
Neil Jenkins
10abc3faf8 Check for null return from Range#getStartBlock. 2013-04-05 15:58:34 +11:00
Neil Jenkins
02d25f0ef5 Catch and log FF error getting selection. 2013-03-27 16:04:57 +11:00
Neil Jenkins
768f4420b9 Correctly check if <br> makes a line break.
The previous test was incorrect. A <br> actually introduces a line break if
there is any non-whitespace after it in the block or if there is another <br>
after it in the block. It is irrelevant what comes before it in the block.
2013-03-08 17:14:11 +11:00
Neil Jenkins
a12f6905a5 Always call setSelection after bookmarking.
IE and Safari 5 loses the selection during the bookmarking process, so we must
always explicitly reset the selection after recording an undo state (which adds
a bookmark).
2013-03-08 13:25:56 +11:00
Neil Jenkins
6927928a79 If can't split block, wrap inlines instead.
When cleaning up <br>s, if it's inside a block we can't split, it's probably a
containing node (like a <blockquote>), so we should wrap the top level inlines
instead.
2013-03-07 18:12:18 +11:00
Neil Jenkins
a340115a87 Preserve background colour on paste. 2013-03-07 16:25:20 +11:00
Neil Jenkins
7d760ce635 Don't strip styles added by tag rewriters.
* Should preserve font styles on paste.
2013-03-07 13:52:38 +11:00
Neil Jenkins
5b52e9b4b8 FF: Selection range may not have startContainer.
* Odd bug this. From the logs, it seems either it's returning a range with no
  startContainer, or the startContainer is not something inheriting from the
  Node prototype (which would be very wrong).
2013-02-27 10:49:08 +11:00
Neil Jenkins
a069e8305e Add accurate check for whether <br> breaks line.
When cleaning up <br> elements, we need to accurately determine whether there's
text before and after it in the block to know whether it will introduce a
visible line break.
2013-02-26 10:19:00 +11:00
Neil Jenkins
327b48b9db Save undo step on delete.
* But only if it's deleting whitespace or destroying a block or deleting a
  selection. This makes it undo deletion word-by-word rather than
  character-by-character.
2013-02-25 13:52:22 +11:00
Neil Jenkins
e3ad6c6b18 Fix allowed block regexp.
* Was not correctly matching full string only.
2013-02-25 11:05:26 +11:00
Neil Jenkins
0ba91e627d Rewrite all <br>s in cleanupBRs fn.
Previously, we were just removing <br>s that didn't have siblings on both sides. A better test is whether the containing block has any non-whitespace text content. If it does, the <br> is a line break and we can just split the block. If it doesn't though, we need to leave the <br> as a placeholder, to ensure the block doesn't collapse to 0 height.
2013-02-25 10:39:27 +11:00
Neil Jenkins
ac14985583 Remove empty inline nodes on paste. 2013-02-22 15:06:56 +11:00
Neil Jenkins
7162777a0f Only remove whitespace nodes if between blocks.
* When cleaning the tree we want to remove useless whitespace between block
  nodes, but we were being a bit too aggressive and removing all whitespace
  nodes. Now checks the context first.
2013-02-21 11:37:20 +11:00
Neil Jenkins
0bb3c142eb Rewrite <font> tags when cleaning tree.
* Converts to <span>.
2013-02-21 11:35:23 +11:00
Neil Jenkins
b35b7d4b35 Fix bug in Range#insertTreeFragment
Merging containers could remove the nodeAfterSplit from the tree, which then
caused an error to be thrown if it had no content, as the code would try to
remove it again.
2013-01-30 11:30:11 +11:00
Neil Jenkins
775b72ec88 Make Element#getPath more robust.
Won't throw an error if called on a node that is not part of a document, but
will now instead return the path from whatever the root element is down to the
node.
2013-01-30 11:28:36 +11:00
Neil Jenkins
52e517b376 Catch all errors to allow logging.
* All errors will be caught and passed to the editor.didError fn. This can be
  overridden to do something useful, like logging them to the server.
2013-01-24 11:54:44 +11:00
Neil Jenkins
45711a38a4 Markup links on 'enter' too.
* Check for links in the current text node, and add <a> tags if found, when the
  enter key is pressed, not just when the spacebar is pressed.
2013-01-24 11:51:51 +11:00
Neil Jenkins
f49d1c190e Automatically markup <a> links on spacebar press.
* When spacebar is pressed, any URL-like text in the current text node will be
  wrapped in an <a> tag with the URL as the href.
2013-01-15 10:34:37 +11:00
Neil Jenkins
8b2090c94e Add <a> for ftp:// links on paste. 2013-01-15 10:34:03 +11:00
Neil Jenkins
bce3e8d208 Ensure IE not in compat-mode on demo page. 2013-01-15 10:32:21 +11:00
Neil Jenkins
8ccc9fad06 Add argument to getHTML to include bookmark.
* Selection is then automatically restored when HTML containing a bookmark is
  set.
2012-11-21 12:35:50 +11:00
Neil Jenkins
fe6ffb0ed5 Add IE10 compatibility.
* All UA detection moved into a separate file.
2012-11-12 18:30:40 +11:00
Neil Jenkins
1d83790a57 Fix Webkit scrolls to top on paste bug. 2012-11-12 11:51:46 +11:00
Neil Jenkins
99c26861c1 Force IE to not be in compatibility mode. 2012-11-05 10:00:21 +11:00
Neil Jenkins
388740c7f8 Fix bug in cut in Safari
* Safari 6 modifies the selection when bookmarking it. Ensure it is restored
  before the cut takes place.
2012-11-01 18:14:10 +11:00
Neil Jenkins
92645f1c0f Add extra check to loop. 2012-08-22 13:14:08 +02:00
Neil Jenkins
691058e071 Fix blur() function loses IE browser window focus. 2012-08-09 16:08:21 +10:00
Neil Jenkins
f9974ed7d9 Fix IE returns null for getSelection if never focussed. 2012-08-09 15:08:04 +10:00
Neil Jenkins
52a10d463c Tidy. Make backspace/delete aware of non-editable blocks 2012-08-08 16:20:28 +10:00
Neil Jenkins
f2090b05d0 Tidy. Ensure trailing new line in all source files 2012-08-07 13:36:05 +10:00
Neil Jenkins
50b7ad1e4e Treat pasted image as a drag-dropped image file. 2012-08-07 12:20:55 +10:00
Neil Jenkins
a9a0ac6411 Fix bug where image may be duplicated on enter.
* Do not move range boundaries inside images; these should always be treated as
  leaf nodes.
* Workaround FF bug where it may return range as being inside of image node.
2012-08-01 11:53:37 +10:00
Neil Jenkins
0412ece8ec Fix blur method.
Have to blur the body, not the window.
2012-07-25 17:35:03 +10:00
Neil Jenkins
b87a9c26fe Add setTextDirection method.
Allows setting RTL or LTR text direction on a block level basis.
2012-07-24 15:59:36 +10:00
Neil Jenkins
630a7c4e4f Tidy IE8 range code. 2012-07-24 15:54:05 +10:00
Neil Jenkins
c964a6a564 Fix bug in removing empty inlines on delete. 2012-07-02 16:44:10 +10:00
Neil Jenkins
e4b5ea6ee8 If all text in inline tag deleted, remove tag. 2012-07-02 14:04:06 +10:00
Neil Jenkins
819ddb296e Always restore range to textnodes.
When restoring a range from a bookmark, always call range.moveBoundariesDownTree
to anchor it to the nearest text node. If you call setSelection with a range not
anchored inside a textnode, Opera may incorrectly set the selection.
2012-06-19 14:43:10 +10:00
Neil Jenkins
ffd6edbaef Remove redundant -ms-box-sizing CSS.
Prefix was only used in IE8 betas. No need to keep it.
2012-04-27 17:52:10 +10:00
Neil Jenkins
c5abcde210 API rename (inc|dec)reaseQuoteLevel
Use full words in API method name for consistency with the rest of the API.
2012-04-12 11:42:07 +10:00
Neil Jenkins
98ebe661b2 Allow custom cleaning on paste.
A willPaste event is now fired just before pasted content is inserted into the
document, allowing custom, arbitrary modification of the pasted content, or
prevention of the paste event altogether.
2012-04-12 11:38:22 +10:00
Neil Jenkins
b6c659e295 Remove unused variables. 2012-04-12 09:22:58 +10:00
Neil Jenkins
bf8598e060 Fix zero-width space character bug.
If the node containing the zero-width space character was merged by a call to
Range#mergeInlines, the character was not being removed, making for odd cursor
movement.
2012-04-10 15:42:47 +10:00
Neil Jenkins
63a97d9b99 Fix IE8 grabs focus on load of editor. 2012-04-04 17:01:28 +10:00
Neil Jenkins
c595fb0bb8 Fix cursor location after Range::_deleteContents
Should always collapse to start.
2012-04-04 15:11:27 +10:00
Neil Jenkins
5c9420c7fa Fix bug in updating path correctly. 2012-04-03 20:35:07 +10:00
Neil Jenkins
9b5512bf98 Tidy up a few bits of code. 2012-04-02 17:38:19 +10:00
Neil Jenkins
543abca022 Workaround WebKit/IE can't focus empty text nodes. 2012-04-02 17:38:01 +10:00
Neil Jenkins
6480739143 Update copyright year. 2012-04-02 15:55:33 +10:00
Neil Jenkins
89eb88ce15 Fix repeating keys don't fire handlers.
Holding down a key will trigger it repeatedly; we need to capture all of these
events to override backspace/enter etc.
2012-04-02 15:55:33 +10:00
Neil Jenkins
f0ba6216cc Add support for IE8. 2012-04-02 15:55:33 +10:00
Neil Jenkins
746e86a3a8 Tidy document.html 2012-03-29 17:55:15 +11:00
Neil Jenkins
cfb08691c2 Don't focus body in non-Gecko.
Opera loses selection. Only Gecko seems to need it.
2012-03-29 17:55:15 +11:00
Neil Jenkins
70078355b7 Whitespace fix. 2012-03-08 15:19:43 +11:00
Neil Jenkins
f8273e7d15 Make email addresses into links on paste. 2012-03-08 15:13:32 +11:00
Neil Jenkins
64b8f9affa Fix focus method not working in Firefox. 2012-02-08 23:23:55 +11:00
Neil Jenkins
e3ee4dad12 Whitespace cleanup. 2012-01-25 11:47:26 +11:00
Neil Jenkins
78e8955be1 Work around iOS bug when setting selection. 2012-01-25 11:37:38 +11:00
Neil Jenkins
d413b1bb85 Automatically wrap URLs in <a> when pasting text. 2012-01-25 11:36:51 +11:00
Neil Jenkins
aa8527fc2c Fix bug in removing format. 2011-12-09 14:27:37 +11:00
Neil Jenkins
ceed1cfa81 Don't continue link over block break. 2011-12-09 13:53:09 +11:00
Neil Jenkins
cfe9bea8b3 Opera collapses blocks with just spaces for data 2011-12-09 13:30:58 +11:00
Neil Jenkins
14ee0d0ad5 Scroll cursor into view on enter. 2011-12-09 13:15:15 +11:00
Neil Jenkins
43634a3ba4 Add styles via separate API method.
<style></style> must not be included text supplied to setHTML call.
2011-11-17 18:37:49 +11:00