Commit Graph

69 Commits

Author SHA1 Message Date
Aryeh Gregor
d72a07d357 Bug 1353695 - Sometimes Enter is ignored in editor; r=masayuki
When defaultParagraphSeparator is not "br", and we hit Enter on a line
that is not contained in any block element, we first create a new <div>
(or <p>) wrapper to hold the line's contents.  If creating this wrapper
fails for some reason, we go ahead and insert a <br> instead.

In some cases, we would get confused and think we didn't create the
block element when really we did.  We would insert a <br>, and
afterwards something would get rid of the empty block element.  In a
corner case where the line only consisted of a <br> to start with, this
would result in nothing happening, because the original <br> was removed
when creating the block element, and only one <br> was inserted to
replace it.

The correct fix is to just not get confused!

MozReview-Commit-ID: 1U8KHC71bfw
2017-04-05 20:40:13 +03:00
Makoto Kato
749c9dc6e7 Bug 1356496 - Don't use nsIDOM* in ConfirmSelectionInBody. r=masayuki
ConfirmSelectionInBody uses a lot of QI and TextEditUtils::IsBody call to check body element.  So we shouldn't use nsIDOM* to avoid QI and EditorBase::GetTag().

Also, if did not found body element, it calls collapse to set caret.  If collapse is successful, we might not have to check end selection...  How do you think?

MozReview-Commit-ID: F7FhPrlEpCc
2017-04-14 14:54:03 +09:00
Wes Kocher
fa76c3b853 Merge inbound to central, a=merge 2017-04-04 11:25:13 -07:00
Aryeh Gregor
c371e9bbf5 Bug 1297414 - Support <div> separator in ReturnIn(Header|ListItem); r=masayuki
MozReview-Commit-ID: EkvFpyTmXDc
2017-04-04 13:49:38 +03:00
Aryeh Gregor
603c4658bf Bug 1297414 - Support <div>/<p> separators in WillInsertBreak; r=masayuki
*aHandled was previously always set to true in WillMakeBasicBlock, which
was probably a bug but is not addressed in this commit.

MozReview-Commit-ID: 41JSmptVc0l
2017-04-04 13:49:38 +03:00
Aryeh Gregor
265dd2996e Bug 1297414 - formatBlock should move non-editable nodes; r=masayuki
Before this change, if you did formatBlock on "a<span
contenteditable=false>b</span>c", it would become "acb", because the "a"
and "c" would be moved to the front of the node, and the "b" would be
left alone at the end because the editing code doesn't want to move it.
Now we will move the "b" as well, even though it's not editable, so that
the node remains "abc".  The rule is that a non-editable element cannot
have its attributes or children changed, but it can have its parent
changed, so there's nothing wrong with moving it here.

On the way, I fixed an exception in insert*List if there was an
uneditable inline node around.  I don't intend to fix all the todo's in
the test, but now it should have better coverage, at least.

MozReview-Commit-ID: 3okcGq4an3f
2017-04-04 13:47:28 +03:00
Aryeh Gregor
7caac9f775 Bug 1297414 - Treat <div> like <p> for break insertion; r=masayuki
I don't personally agree with this behavior (although I did spec it some
years ago), but it's the behavior of all other UAs, so we should do it
anyway.

MozReview-Commit-ID: IiIg41kMJIU
2017-04-04 13:47:28 +03:00
Aryeh Gregor
987d037397 Bug 1130651 - Don't throw IndexSizeError from insertText command r=masayuki
MozReview-Commit-ID: 7AXGvenAfWv
2017-03-30 18:36:17 +03:00
Aryeh Gregor
8e17f858d1 Bug 1352144 - document.execCommand("inserttext", false, "") should work r=masayuki
Behavior per spec and Chrome is to just delete the selection.  We
already do this for insertHTML.

MozReview-Commit-ID: AWZhH6lIwuO
2017-03-30 21:04:09 +03:00
Makoto Kato
49803dbe36 Bug 1350772 - Part 1. Check whether node can be splited. r=masayuki
At first, HTMLEditor::GetActiveEditingHost might return null in this situation, we should check whether nullptr is returned.   At second, SplitNodeDeep returns error since curent is design mode and selection node has no parent.  So we should check error.

MozReview-Commit-ID: 2YlWXPNtf80
2017-03-28 14:56:03 +09:00
Makoto Kato
172f084da0 Bug 1348851 - Part 1. Use new block when better selection isn't found. r=masayuki
This is a kind of regression of bug 1088054 part 6.  If new block doesn't have child node, GetLastEditableChild will return null after landing bug 1088054. So, we should use new block when GetLastEditableChild returns null.

MozReview-Commit-ID: Gzt1Xp3Sl47
***
P1

MozReview-Commit-ID: 8LVp5qGnme4
2017-03-24 10:30:21 +09:00
David Major
cb5ae7a6d9 Bug 1344629 - Part 8: Make nsTLiteralString inherit from nsTStringRepr. r=dbaron
This is the patch that all the others have been leading up to: by inheriting from nsTStringRepr, nsTLiteralString loses its destructor (previously suppplied by nsTSubstring).

I included an AsString() cast as an escape hatch for a few pieces of code that couldn't easily accommodate the new hierarchy, but I'm pretty pleased with how little it was necessary.

MozReview-Commit-ID: 2zGkaw1sMUp
2017-03-14 15:26:36 +13:00
Iris Hsiao
22d2818760 Backed out 12 changesets (bug 1344629) for stylo build bustage
Backed out changeset cf4273d3ac30 (bug 1344629)
Backed out changeset a96390e044e0 (bug 1344629)
Backed out changeset d9b330f9bc24 (bug 1344629)
Backed out changeset 2b460fe020af (bug 1344629)
Backed out changeset 0ada91b0452e (bug 1344629)
Backed out changeset 083304fcd6bd (bug 1344629)
Backed out changeset 53d7d1ce2c97 (bug 1344629)
Backed out changeset 55eee7078ae4 (bug 1344629)
Backed out changeset 7d3c06b3eca9 (bug 1344629)
Backed out changeset e5df14c3db61 (bug 1344629)
Backed out changeset 636095ff2815 (bug 1344629)
Backed out changeset 0be052ad24c1 (bug 1344629)
2017-03-14 11:52:24 +08:00
David Major
4840f0d2a7 Bug 1344629 - Part 8: Make nsTLiteralString inherit from nsTStringRepr. r=dbaron
This is the patch that all the others have been leading up to: by inheriting from nsTStringRepr, nsTLiteralString loses its destructor (previously suppplied by nsTSubstring).

I included an AsString() cast as an escape hatch for a few pieces of code that couldn't easily accommodate the new hierarchy, but I'm pretty pleased with how little it was necessary.

MozReview-Commit-ID: 2zGkaw1sMUp
2017-03-14 15:26:36 +13:00
Masayuki Nakano
bbc2327c89 Bug 1345763 part.2 Implement AsHTMLEditor() in EditorBase and its subclasses and replace casts with it r=smaug
MozReview-Commit-ID: CUYV0tMjQHH
2017-03-09 18:38:41 +09:00
aceman
345061feb7 Bug 1326494 - Remove an outdated reference to nsISupportsArray in libeditor. r=erahm DONTBUILD a=tomcat 2017-03-01 16:17:00 +01:00
Makoto Kato
3ee022bf9b Bug 1344116 - Clean up HTMLEditRules::RemoveAlignment. r=masayuki
Before I will fix some justify* command's bug, I would like to clean up HTMLEditRules::RemoveAlignment to get rid of nsIDOM* into this method.

MozReview-Commit-ID: 4UATycS5iBl
2017-03-03 13:13:21 +09:00
Makoto Kato
2f398cedc6 Bug 1270235 - Part 1. Check parent node is null in RemoveEmptyNodes. r=masayuki
RemoveEmptyNodes doesn't check whether parent node is null.  So we shouldn't add null to skip list.

Also, although this crash depends on clang, if debug build, it will hit the assertion on all compiler.

MozReview-Commit-ID: GgiczVExlIn
2017-02-13 15:46:09 +09:00
Carsten "Tomcat" Book
e1b6f23c86 Merge mozilla-central to mozilla-inbound 2017-02-09 11:38:08 +01:00
Makoto Kato
f8b3603c0b Bug 1337698 - Part 3. TypeInState should use UniquePtr. r=masayuki
MozReview-Commit-ID: K9UY83Nx1v3
2017-02-08 18:14:53 +09:00
Makoto Kato
0fc033b313 Bug 1337273 - Don't use mTextEditor from HTMLEditRules. r=masayuki
HTMLEditRules can access both mTextEditor and mHTMLEditor, but we should use mHTMLEditor only on HTMLEditRules for readability.

MozReview-Commit-ID: HfzwAD554XQ
2017-02-08 18:32:32 +09:00
Mats Palmgren
6cd8f52f8e Bug 1332876 - Bail out of HTMLEditRules::BeforeEdit if we have no Selection. r=masayuki 2017-01-30 04:54:37 +01:00
Makoto Kato
b62259a7d8 Bug 1332984 - Clean up usage of nsIDOMCharacterData into editor. r=masayuki
Some uses nsIDOMCharacterData to get the attribute of text node.  But, by using Text object, we don't need nsIDOMCharacter.  So we should use Text object instead of nsIDOMCharacterData instead if possible.

MozReview-Commit-ID: 1cwTUcecFj3
2017-01-23 14:14:30 +09:00
Makoto Kato
daffd62d4a Bug 1324505 - Part 3. Clean up HTMLEditRules::PopListItem. r=masayuki
PopListItem still uses nsIDOM*.  We should new binding API instead and it is unnecessary to use QI and refcounting if possible.

MozReview-Commit-ID: DJL105hNt6z
2017-01-11 19:07:33 +09:00
Makoto Kato
c7faacb457 Bug 1324505 - Part 1. Check whether parent node is null. r=masayuki
designMode is too strange.  Parent of common ancestor of selection might be nullptr, so we should check whether nullptr.

MozReview-Commit-ID: Cy1k2Mpkws0
2017-01-11 19:03:41 +09:00
Jorg K
2287d2b402 Bug 1330796 - Add invisible break to span of display:block in HTMLEditRules::SplitMailCites. r=masayuki 2017-01-16 01:40:00 -05:00
Makoto Kato
e9711eea8f Backed out changeset f1f0f69bc78f (bug 1324505)
MozReview-Commit-ID: 1DbtAJzgJYo
2017-01-16 19:32:59 +09:00
Makoto Kato
eae4a52268 Backed out changeset 7be23bb65b93 (bug 1324505)
MozReview-Commit-ID: 8ONKT1Q6oER
2017-01-16 19:32:56 +09:00
Makoto Kato
e6373b75cc Bug 1324505 - Part 3. Clean up HTMLEditRules::PopListItem. r=masayuki
PopListItem still uses nsIDOM*.  We should new binding API instead and it is unnecessary to use QI and refcounting if possible.

MozReview-Commit-ID: DJL105hNt6z
2017-01-11 19:07:33 +09:00
Makoto Kato
a97a37085c Bug 1324505 - Part 1. Check whether parent node is null. r=masayuki
designMode is too strange.  Parent of common ancestor of selection might be nullptr, so we should check whether nullptr.

MozReview-Commit-ID: Cy1k2Mpkws0
2017-01-11 19:03:41 +09:00
Masayuki Nakano
291ca1330e Bug 1272623 part.3 HTMLEditRules::ReapplyCachedStyles() shouldn't set style to TypeInState if it's currently applied r=smaug
The target node of HTMLEditRules::ReapplyCachedStyles() may be styled with its parent.  When HTMLEditRules::ReapplyCachedStyles() is called, it shouldn't restore another style cache if it's already specified in current DOM tree.

MozReview-Commit-ID: DKCpQ8YyW7
2017-01-06 22:35:48 +09:00
Makoto Kato
36a689be3a Bug 1325843 - Use explicitly static method call for EditorBase::IsTextNode. r=masayuki
IsTextNode is static method, so we should use explicitly static method call into EditRule.

MozReview-Commit-ID: EX2BbbN2vNJ
2016-12-26 14:32:57 +09:00
Makoto Kato
52d58f5914 Bug 1325300 - Use explicitly static method call for GetStartNodeAndOffset and GetEndNodeAndOffset. r=masayuki
Most codes into HTMLEditRules and TextEditRules don't use explicitly static method call such as EditorBase::GetStartNodeAndOffset.  So we should use it instead of "editor->GetStartNodeAndOffset".

MozReview-Commit-ID: DGAEFK6AYzh
2016-12-22 15:48:41 +09:00
Makoto Kato
820f5efcdb Bug 1324996 - Part 2. Use nsIAtom to change attirbute if possible. r=masayuki
We can replace old nsIEditor API with nsIAtom version.

MozReview-Commit-ID: EMEANldtTo0
2016-12-20 20:53:00 +09:00
Makoto Kato
207e7d4433 Bug 1323138 - CSSEditUtils should use atom for CSS property if possible. r=masayuki
There is a lot of string compare when using CSS property name.  We should use nsGkAtoms instead.

MozReview-Commit-ID: JvpWRTkM8U
2016-12-12 00:03:36 -10:00
Carsten "Tomcat" Book
19ba40fb78 merge mozilla-inbound to mozilla-central a=merge 2016-11-21 15:44:20 +01:00
Masayuki Nakano
eacfd191a0 Bug 1316302 part.4 Refine HTMLEditRules::TryToJoinBlocks() and HTMLEditRules::MoveNodeSmart() with early return style for making scope of EditActionResult variable smaller r=smaug
For now, let's make the scope of EditActionResult variable in them smaller without big change.

MozReview-Commit-ID: 9vDoU9bUdVO
2016-11-18 18:59:39 +09:00
Masayuki Nakano
d2766ef76d Bug 1316302 part.3 Create EditActionResult class for making the methods which return nsresult, handled and canceled with out params r=smaug
In a lot of places, edit action handlers and their helper methods return nsresult and aHandled and aCanceled with out params.  However, the out params cause the code complicated since:

* it's not unclear if the method will overwrite aHandled and aCanceled value.
* callers need to create temporary variable event if some of them are not necessary.

This patch rewrites the helper methods of HTMLEditRules::WillDeleteSelection() with it.

MozReview-Commit-ID: CJv75KdOdXf
2016-11-18 17:59:23 +09:00
Masayuki Nakano
9d82bff6df Bug 1316302 part.2 WillDeleteSelection() should retry to handle it when selection is collapsed and JoinBlocks() doesn't handle nor cancel the action r=smaug
When selection is collapsed and JoinBlocks() doesn't handle nor cancel the action, WillDeleteSelection() should move selection to the start/end of leftmost/rightmost editable leaf node and retry to handle the action again.

For avoiding infinite loop, it checks if selected node is changed actually before calling itself again.

MozReview-Commit-ID: GtEC4dim3r9
2016-11-16 20:20:41 +09:00
Masayuki Nakano
c9bfd41a1c Bug 1316302 part.1 Helper methods for HTMLEditRules::WillDeleteSelection() should have an out argument to indicates if it actually handles the action r=smaug
When HTMLEditRules::WillDeleteSelection() tries to remove something from the end/start of a block to its last/first text node but it's contained by block elements, it tries to join the container and the block.  However, JoinBlocks() always fails to join them since it's impossible operation.  In this case, HTMLEditRules::WillDeleteSelection() should retry to remove something in the leaf, however, it's impossible for now because JoinBlocks() and its helper methods don't return if it handles the action actually.

This patch renames |JoinBlocks()| to |TryToJoinBlocks()| for representing what it is.  And this patch adds |bool* aHandled| to the helper methods.  Then, *aHandled and *aCancel are now always returns the result of each method.  Therefore, for merging the result of multiple helper methods, callers need to receive the result with temporary variables and merge them by themselves.

Note that when they modify DOM node actually or the action should do nothing (for example, selection is across tables), aHandled is set to true.

MozReview-Commit-ID: 7ApUOgtLUog
2016-11-18 17:54:31 +09:00
Makoto Kato
d54354f72c Bug 1317718 - Unnecessary QI to nsIContent to check whether text node. r=masayuki
If not text node, QI to nsIContent will be failed.  So we should use IsNodeType (Or EditorBase::IsTextNode) without QI for detection of text node.

Also, to get content length into text node, we should use TextLength() simply instead of getting content string.  It can reduce memory allocation.

MozReview-Commit-ID: C8EKxfUBjTP
2016-11-17 11:14:19 +09:00
Makoto Kato
0635263bbd Bug 1314790 - Part 1. GetGoodSelPointForNode doesn't work with ePrevousWord action. r=masayuki
Although GetGoodSelPointForNode only supports ePrevious or eNext as action, we use other action.  So we should add aseetion for it.

MozReview-Commit-ID: 3gLFFTAdNxU
2016-11-12 21:59:04 +09:00
Makoto Kato
4e5e0ae603 Bug 1314790 - Part 3. Ignore nsIEditor::eNone case. r=masayuki
MozReview-Commit-ID: 6KHFQ84J7dU
2016-11-20 10:35:17 +09:00
Masayuki Nakano
42d830f8d3 Bug 1315065 When selection is collapsed in an empty text node, Backspace/Delete key press should modify the nearest text node r=smaug
Currently, when selection is collapsed at an empty text node, the behavior of each major browser is different.

When you remove the last character of non-empty text node followed by empty text nodes, Chromium removes all following empty text nodes.  However, Edge never removes empty text nodes even when selection is collapsed at an empty text node.

With this patch, our behavior becomes same as Edge.  I think that we should take this for keeping backward compatibility since Gecko never removes empty text nodes.  So, in other words, this patch makes Backspace key press at an empty text node modify the preceding non-empty text node.

When you remove the first character of non-empty text node preceded with empty text nodes, Edge removes all preceding empty text nodes.  However, Chromium and Gecko keeps previous empty text nodes than caret position.  So, we should keep current behavior for backward compatibility.  In other words, this patch makes Delete key press at an empty text node modify the following non-empty text node and keep current behavior.


The fixing approach of this is, making WSRunObject::PriorVisibleNode() and WSRunObject::NextVisibleNode() ignore empty text node.  This should make sense because empty text node is not a visible node. (On the other hand, when the DOMPoint has a null character, it should treat as visible character.  That is visible with Unicode codepoint.)

MozReview-Commit-ID: 11YtqBktEvK
2016-11-11 12:24:21 +09:00
Gerald Squelart
9a3fb4229e Bug 1316432 - Fix nsCOMPtr constructions&assignments from 0 - r=froydnj
Giving '0' (literal zero) to nsCOMPtr is now ambiguous, as both
nsCOMPtr(decltype(nullptr)) and nsCOMPtr(T*) could be used.
In any case, our coding standards mandate the use of 'nullptr' for pointers.
So I'm changing all zeroes into nullptr's where necessary.

MozReview-Commit-ID: LXiZTu87Ck6
2016-11-10 14:11:27 +11:00
Masayuki Nakano
70065b8279 Bug 1311240 Fix odd "{" and "}" of control statements in editor for conforming to our coding rules r=smaug
Currently, editor code uses following style (or similar style) in a lot of places:

if (foo)
{

}
else
{

}

This patch fixes this as conforming to our coding rules, i.e., it becomes:

if (foo) {

} else {

}

Additionally, this fixes other odd control statements in the files which include above issue because it's difficult to find following issues with searching the files:

* if (foo) bar;
* if (foo) { bar; }
* if (foo)
    bar;

Finally, if it becomes much simpler than current code, this patch rewrites existing code with "early return style". But this case is only a few places because this is risky.

MozReview-Commit-ID: 2Gs26goWXrF
2016-10-24 11:27:45 +09:00
Masayuki Nakano
381c9c05ee Bug 1310618 Replace nsresult variables |res| with |rv| under editor/ r=Ehsan
In our coding rules, variable names of nsresult should be rv.  Indeed, when you see |rv| in the code, you must assume that its type if nsresult.

However, a lot of code under editor/ uses |res| for the variables of nsresult.  Let's replace |res| with |rv|.

And this patch improves following points:

1. When |rv| is set in both |if| and |else| block and they are check outside of them, this moves the check into each |if| and |else| block because even if the failure is notified with warning, you cannot see which case was performed and failed.  This change makes it clear.

2. When |return rv;| returns non-error code because |rv| is checked with NS_ENSURE_SUCCESS() immediately before, setting replacing it with |return NS_OK;| is clearer.

3. Move declaration of |nsresult rv| into smaller scope as far as possible.  This prevents setting rv to unexpected value and easier to check its value at reading the code.

MozReview-Commit-ID: 9MAqj7sFey3
2016-10-19 18:09:33 +09:00
Michael Layzell
b73afbd34b Bug 1018486 - Part 2: Changes in editor/, r=masayuki
MozReview-Commit-ID: JA7UCVXEd8j
2016-09-07 10:50:37 -04:00
Aryeh Gregor
3cbe21b37e Bug 1250805 - Respect type-in state when caching inline styles; r=masayuki
MozReview-Commit-ID: OZCUbNUvmz
2016-08-25 14:43:21 +03:00
Aryeh Gregor
e72920d035 Bug 1265800 part 3 - Move cursor into all adjacent nodes after delete; r=masayuki
When deleting, we previously would only move the cursor back into the
previous block if the last leaf node was a text node, for some reason.
We should move into the previous block in other cases as well, like if
the leaf node is a collapsed <br>.  (Probably it's not correct to move
backward into tables, but that already was happening if the table had
text at the end.  There may be other cases where this is wrong.)

MozReview-Commit-ID: 8e0dTU3lNYO
2016-08-22 14:27:17 +03:00