OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
4 * Copyright (C) 2009 Igalia S.L. | 4 * Copyright (C) 2009 Igalia S.L. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 case CommandFromDOMWithUserInterface: | 185 case CommandFromDOMWithUserInterface: |
186 frame.editor().applyParagraphStyle(style.get()); | 186 frame.editor().applyParagraphStyle(style.get()); |
187 return true; | 187 return true; |
188 } | 188 } |
189 ASSERT_NOT_REACHED(); | 189 ASSERT_NOT_REACHED(); |
190 return false; | 190 return false; |
191 } | 191 } |
192 | 192 |
193 static bool executeInsertFragment(Frame& frame, PassRefPtr<DocumentFragment> fra
gment) | 193 static bool executeInsertFragment(Frame& frame, PassRefPtr<DocumentFragment> fra
gment) |
194 { | 194 { |
195 applyCommand(ReplaceSelectionCommand::create(frame.document(), fragment, Rep
laceSelectionCommand::PreventNesting, EditActionUnspecified)); | 195 ASSERT(frame.document()); |
| 196 applyCommand(ReplaceSelectionCommand::create(*frame.document(), fragment, Re
placeSelectionCommand::PreventNesting, EditActionUnspecified)); |
196 return true; | 197 return true; |
197 } | 198 } |
198 | 199 |
199 static bool executeInsertNode(Frame& frame, PassRefPtr<Node> content) | 200 static bool executeInsertNode(Frame& frame, PassRefPtr<Node> content) |
200 { | 201 { |
201 RefPtr<DocumentFragment> fragment = DocumentFragment::create(frame.document(
)); | 202 RefPtr<DocumentFragment> fragment = DocumentFragment::create(frame.document(
)); |
202 TrackExceptionState es; | 203 TrackExceptionState es; |
203 fragment->appendChild(content, es); | 204 fragment->appendChild(content, es); |
204 if (es.hadException()) | 205 if (es.hadException()) |
205 return false; | 206 return false; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 { | 283 { |
283 frame.editor().copy(); | 284 frame.editor().copy(); |
284 return true; | 285 return true; |
285 } | 286 } |
286 | 287 |
287 static bool executeCreateLink(Frame& frame, Event*, EditorCommandSource, const S
tring& value) | 288 static bool executeCreateLink(Frame& frame, Event*, EditorCommandSource, const S
tring& value) |
288 { | 289 { |
289 // FIXME: If userInterface is true, we should display a dialog box to let th
e user enter a URL. | 290 // FIXME: If userInterface is true, we should display a dialog box to let th
e user enter a URL. |
290 if (value.isEmpty()) | 291 if (value.isEmpty()) |
291 return false; | 292 return false; |
292 applyCommand(CreateLinkCommand::create(frame.document(), value)); | 293 ASSERT(frame.document()); |
| 294 applyCommand(CreateLinkCommand::create(*frame.document(), value)); |
293 return true; | 295 return true; |
294 } | 296 } |
295 | 297 |
296 static bool executeCut(Frame& frame, Event*, EditorCommandSource source, const S
tring&) | 298 static bool executeCut(Frame& frame, Event*, EditorCommandSource source, const S
tring&) |
297 { | 299 { |
298 if (source == CommandFromMenuOrKeyBinding) { | 300 if (source == CommandFromMenuOrKeyBinding) { |
299 UserTypingGestureIndicator typingGestureIndicator(&frame); | 301 UserTypingGestureIndicator typingGestureIndicator(&frame); |
300 frame.editor().cut(); | 302 frame.editor().cut(); |
301 } else { | 303 } else { |
302 frame.editor().cut(); | 304 frame.editor().cut(); |
(...skipping 17 matching lines...) Expand all Loading... |
320 case CommandFromMenuOrKeyBinding: { | 322 case CommandFromMenuOrKeyBinding: { |
321 // Doesn't modify the text if the current selection isn't a range. | 323 // Doesn't modify the text if the current selection isn't a range. |
322 UserTypingGestureIndicator typingGestureIndicator(&frame); | 324 UserTypingGestureIndicator typingGestureIndicator(&frame); |
323 frame.editor().performDelete(); | 325 frame.editor().performDelete(); |
324 return true; | 326 return true; |
325 } | 327 } |
326 case CommandFromDOM: | 328 case CommandFromDOM: |
327 case CommandFromDOMWithUserInterface: | 329 case CommandFromDOMWithUserInterface: |
328 // If the current selection is a caret, delete the preceding character.
IE performs forwardDelete, but we currently side with Firefox. | 330 // If the current selection is a caret, delete the preceding character.
IE performs forwardDelete, but we currently side with Firefox. |
329 // Doesn't scroll to make the selection visible, or modify the kill ring
(this time, siding with IE, not Firefox). | 331 // Doesn't scroll to make the selection visible, or modify the kill ring
(this time, siding with IE, not Firefox). |
330 TypingCommand::deleteKeyPressed(frame.document(), frame.selection()->gra
nularity() == WordGranularity ? TypingCommand::SmartDelete : 0); | 332 ASSERT(frame.document()); |
| 333 TypingCommand::deleteKeyPressed(*frame.document(), frame.selection()->gr
anularity() == WordGranularity ? TypingCommand::SmartDelete : 0); |
331 return true; | 334 return true; |
332 } | 335 } |
333 ASSERT_NOT_REACHED(); | 336 ASSERT_NOT_REACHED(); |
334 return false; | 337 return false; |
335 } | 338 } |
336 | 339 |
337 static bool executeDeleteBackward(Frame& frame, Event*, EditorCommandSource, con
st String&) | 340 static bool executeDeleteBackward(Frame& frame, Event*, EditorCommandSource, con
st String&) |
338 { | 341 { |
339 frame.editor().deleteWithDirection(DirectionBackward, CharacterGranularity,
false, true); | 342 frame.editor().deleteWithDirection(DirectionBackward, CharacterGranularity,
false, true); |
340 return true; | 343 return true; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 { | 443 { |
441 String tagName = value.lower(); | 444 String tagName = value.lower(); |
442 if (tagName[0] == '<' && tagName[tagName.length() - 1] == '>') | 445 if (tagName[0] == '<' && tagName[tagName.length() - 1] == '>') |
443 tagName = tagName.substring(1, tagName.length() - 2); | 446 tagName = tagName.substring(1, tagName.length() - 2); |
444 | 447 |
445 String localName, prefix; | 448 String localName, prefix; |
446 if (!Document::parseQualifiedName(tagName, prefix, localName, IGNORE_EXCEPTI
ON)) | 449 if (!Document::parseQualifiedName(tagName, prefix, localName, IGNORE_EXCEPTI
ON)) |
447 return false; | 450 return false; |
448 QualifiedName qualifiedTagName(prefix, localName, xhtmlNamespaceURI); | 451 QualifiedName qualifiedTagName(prefix, localName, xhtmlNamespaceURI); |
449 | 452 |
450 RefPtr<FormatBlockCommand> command = FormatBlockCommand::create(frame.docume
nt(), qualifiedTagName); | 453 ASSERT(frame.document()); |
| 454 RefPtr<FormatBlockCommand> command = FormatBlockCommand::create(*frame.docum
ent(), qualifiedTagName); |
451 applyCommand(command); | 455 applyCommand(command); |
452 return command->didApply(); | 456 return command->didApply(); |
453 } | 457 } |
454 | 458 |
455 static bool executeForwardDelete(Frame& frame, Event*, EditorCommandSource sourc
e, const String&) | 459 static bool executeForwardDelete(Frame& frame, Event*, EditorCommandSource sourc
e, const String&) |
456 { | 460 { |
457 switch (source) { | 461 switch (source) { |
458 case CommandFromMenuOrKeyBinding: | 462 case CommandFromMenuOrKeyBinding: |
459 frame.editor().deleteWithDirection(DirectionForward, CharacterGranularit
y, false, true); | 463 frame.editor().deleteWithDirection(DirectionForward, CharacterGranularit
y, false, true); |
460 return true; | 464 return true; |
461 case CommandFromDOM: | 465 case CommandFromDOM: |
462 case CommandFromDOMWithUserInterface: | 466 case CommandFromDOMWithUserInterface: |
463 // Doesn't scroll to make the selection visible, or modify the kill ring
. | 467 // Doesn't scroll to make the selection visible, or modify the kill ring
. |
464 // ForwardDelete is not implemented in IE or Firefox, so this behavior i
s only needed for | 468 // ForwardDelete is not implemented in IE or Firefox, so this behavior i
s only needed for |
465 // backward compatibility with ourselves, and for consistency with Delet
e. | 469 // backward compatibility with ourselves, and for consistency with Delet
e. |
466 TypingCommand::forwardDeleteKeyPressed(frame.document()); | 470 ASSERT(frame.document()); |
| 471 TypingCommand::forwardDeleteKeyPressed(*frame.document()); |
467 return true; | 472 return true; |
468 } | 473 } |
469 ASSERT_NOT_REACHED(); | 474 ASSERT_NOT_REACHED(); |
470 return false; | 475 return false; |
471 } | 476 } |
472 | 477 |
473 static bool executeIgnoreSpelling(Frame& frame, Event*, EditorCommandSource, con
st String&) | 478 static bool executeIgnoreSpelling(Frame& frame, Event*, EditorCommandSource, con
st String&) |
474 { | 479 { |
475 frame.editor().ignoreSpelling(); | 480 frame.editor().ignoreSpelling(); |
476 return true; | 481 return true; |
477 } | 482 } |
478 | 483 |
479 static bool executeIndent(Frame& frame, Event*, EditorCommandSource, const Strin
g&) | 484 static bool executeIndent(Frame& frame, Event*, EditorCommandSource, const Strin
g&) |
480 { | 485 { |
481 applyCommand(IndentOutdentCommand::create(frame.document(), IndentOutdentCom
mand::Indent)); | 486 ASSERT(frame.document()); |
| 487 applyCommand(IndentOutdentCommand::create(*frame.document(), IndentOutdentCo
mmand::Indent)); |
482 return true; | 488 return true; |
483 } | 489 } |
484 | 490 |
485 static bool executeInsertBacktab(Frame& frame, Event* event, EditorCommandSource
, const String&) | 491 static bool executeInsertBacktab(Frame& frame, Event* event, EditorCommandSource
, const String&) |
486 { | 492 { |
487 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("\t",
event, TextEventInputBackTab); | 493 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("\t",
event, TextEventInputBackTab); |
488 } | 494 } |
489 | 495 |
490 static bool executeInsertHorizontalRule(Frame& frame, Event*, EditorCommandSourc
e, const String& value) | 496 static bool executeInsertHorizontalRule(Frame& frame, Event*, EditorCommandSourc
e, const String& value) |
491 { | 497 { |
(...skipping 19 matching lines...) Expand all Loading... |
511 static bool executeInsertLineBreak(Frame& frame, Event* event, EditorCommandSour
ce source, const String&) | 517 static bool executeInsertLineBreak(Frame& frame, Event* event, EditorCommandSour
ce source, const String&) |
512 { | 518 { |
513 switch (source) { | 519 switch (source) { |
514 case CommandFromMenuOrKeyBinding: | 520 case CommandFromMenuOrKeyBinding: |
515 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("
\n", event, TextEventInputLineBreak); | 521 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("
\n", event, TextEventInputLineBreak); |
516 case CommandFromDOM: | 522 case CommandFromDOM: |
517 case CommandFromDOMWithUserInterface: | 523 case CommandFromDOMWithUserInterface: |
518 // Doesn't scroll to make the selection visible, or modify the kill ring
. | 524 // Doesn't scroll to make the selection visible, or modify the kill ring
. |
519 // InsertLineBreak is not implemented in IE or Firefox, so this behavior
is only needed for | 525 // InsertLineBreak is not implemented in IE or Firefox, so this behavior
is only needed for |
520 // backward compatibility with ourselves, and for consistency with other
commands. | 526 // backward compatibility with ourselves, and for consistency with other
commands. |
521 TypingCommand::insertLineBreak(frame.document(), 0); | 527 ASSERT(frame.document()); |
| 528 TypingCommand::insertLineBreak(*frame.document(), 0); |
522 return true; | 529 return true; |
523 } | 530 } |
524 ASSERT_NOT_REACHED(); | 531 ASSERT_NOT_REACHED(); |
525 return false; | 532 return false; |
526 } | 533 } |
527 | 534 |
528 static bool executeInsertNewline(Frame& frame, Event* event, EditorCommandSource
, const String&) | 535 static bool executeInsertNewline(Frame& frame, Event* event, EditorCommandSource
, const String&) |
529 { | 536 { |
530 Frame* targetFrame = WebCore::targetFrame(frame, event); | 537 Frame* targetFrame = WebCore::targetFrame(frame, event); |
531 return targetFrame->eventHandler()->handleTextInputEvent("\n", event, target
Frame->editor().canEditRichly() ? TextEventInputKeyboard : TextEventInputLineBre
ak); | 538 return targetFrame->eventHandler()->handleTextInputEvent("\n", event, target
Frame->editor().canEditRichly() ? TextEventInputKeyboard : TextEventInputLineBre
ak); |
532 } | 539 } |
533 | 540 |
534 static bool executeInsertNewlineInQuotedContent(Frame& frame, Event*, EditorComm
andSource, const String&) | 541 static bool executeInsertNewlineInQuotedContent(Frame& frame, Event*, EditorComm
andSource, const String&) |
535 { | 542 { |
536 TypingCommand::insertParagraphSeparatorInQuotedContent(frame.document()); | 543 ASSERT(frame.document()); |
| 544 TypingCommand::insertParagraphSeparatorInQuotedContent(*frame.document()); |
537 return true; | 545 return true; |
538 } | 546 } |
539 | 547 |
540 static bool executeInsertOrderedList(Frame& frame, Event*, EditorCommandSource,
const String&) | 548 static bool executeInsertOrderedList(Frame& frame, Event*, EditorCommandSource,
const String&) |
541 { | 549 { |
542 applyCommand(InsertListCommand::create(frame.document(), InsertListCommand::
OrderedList)); | 550 ASSERT(frame.document()); |
| 551 applyCommand(InsertListCommand::create(*frame.document(), InsertListCommand:
:OrderedList)); |
543 return true; | 552 return true; |
544 } | 553 } |
545 | 554 |
546 static bool executeInsertParagraph(Frame& frame, Event*, EditorCommandSource, co
nst String&) | 555 static bool executeInsertParagraph(Frame& frame, Event*, EditorCommandSource, co
nst String&) |
547 { | 556 { |
548 TypingCommand::insertParagraphSeparator(frame.document(), 0); | 557 ASSERT(frame.document()); |
| 558 TypingCommand::insertParagraphSeparator(*frame.document(), 0); |
549 return true; | 559 return true; |
550 } | 560 } |
551 | 561 |
552 static bool executeInsertTab(Frame& frame, Event* event, EditorCommandSource, co
nst String&) | 562 static bool executeInsertTab(Frame& frame, Event* event, EditorCommandSource, co
nst String&) |
553 { | 563 { |
554 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("\t",
event); | 564 return targetFrame(frame, event)->eventHandler()->handleTextInputEvent("\t",
event); |
555 } | 565 } |
556 | 566 |
557 static bool executeInsertText(Frame& frame, Event*, EditorCommandSource, const S
tring& value) | 567 static bool executeInsertText(Frame& frame, Event*, EditorCommandSource, const S
tring& value) |
558 { | 568 { |
559 TypingCommand::insertText(frame.document(), value, 0); | 569 ASSERT(frame.document()); |
| 570 TypingCommand::insertText(*frame.document(), value, 0); |
560 return true; | 571 return true; |
561 } | 572 } |
562 | 573 |
563 static bool executeInsertUnorderedList(Frame& frame, Event*, EditorCommandSource
, const String&) | 574 static bool executeInsertUnorderedList(Frame& frame, Event*, EditorCommandSource
, const String&) |
564 { | 575 { |
565 applyCommand(InsertListCommand::create(frame.document(), InsertListCommand::
UnorderedList)); | 576 ASSERT(frame.document()); |
| 577 applyCommand(InsertListCommand::create(*frame.document(), InsertListCommand:
:UnorderedList)); |
566 return true; | 578 return true; |
567 } | 579 } |
568 | 580 |
569 static bool executeJustifyCenter(Frame& frame, Event*, EditorCommandSource sourc
e, const String&) | 581 static bool executeJustifyCenter(Frame& frame, Event*, EditorCommandSource sourc
e, const String&) |
570 { | 582 { |
571 return executeApplyParagraphStyle(frame, source, EditActionCenter, CSSProper
tyTextAlign, "center"); | 583 return executeApplyParagraphStyle(frame, source, EditActionCenter, CSSProper
tyTextAlign, "center"); |
572 } | 584 } |
573 | 585 |
574 static bool executeJustifyFull(Frame& frame, Event*, EditorCommandSource source,
const String&) | 586 static bool executeJustifyFull(Frame& frame, Event*, EditorCommandSource source,
const String&) |
575 { | 587 { |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
903 } | 915 } |
904 | 916 |
905 static bool executeMoveToRightEndOfLineAndModifySelection(Frame& frame, Event*,
EditorCommandSource, const String&) | 917 static bool executeMoveToRightEndOfLineAndModifySelection(Frame& frame, Event*,
EditorCommandSource, const String&) |
906 { | 918 { |
907 frame.selection()->modify(FrameSelection::AlterationExtend, DirectionRight,
LineBoundary, UserTriggered); | 919 frame.selection()->modify(FrameSelection::AlterationExtend, DirectionRight,
LineBoundary, UserTriggered); |
908 return true; | 920 return true; |
909 } | 921 } |
910 | 922 |
911 static bool executeOutdent(Frame& frame, Event*, EditorCommandSource, const Stri
ng&) | 923 static bool executeOutdent(Frame& frame, Event*, EditorCommandSource, const Stri
ng&) |
912 { | 924 { |
913 applyCommand(IndentOutdentCommand::create(frame.document(), IndentOutdentCom
mand::Outdent)); | 925 ASSERT(frame.document()); |
| 926 applyCommand(IndentOutdentCommand::create(*frame.document(), IndentOutdentCo
mmand::Outdent)); |
914 return true; | 927 return true; |
915 } | 928 } |
916 | 929 |
917 static bool executeToggleOverwrite(Frame& frame, Event*, EditorCommandSource, co
nst String&) | 930 static bool executeToggleOverwrite(Frame& frame, Event*, EditorCommandSource, co
nst String&) |
918 { | 931 { |
919 frame.editor().toggleOverwriteModeEnabled(); | 932 frame.editor().toggleOverwriteModeEnabled(); |
920 return true; | 933 return true; |
921 } | 934 } |
922 | 935 |
923 static bool executePaste(Frame& frame, Event*, EditorCommandSource source, const
String&) | 936 static bool executePaste(Frame& frame, Event*, EditorCommandSource source, const
String&) |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 } | 1139 } |
1127 | 1140 |
1128 static bool executeUndo(Frame& frame, Event*, EditorCommandSource, const String&
) | 1141 static bool executeUndo(Frame& frame, Event*, EditorCommandSource, const String&
) |
1129 { | 1142 { |
1130 frame.editor().undo(); | 1143 frame.editor().undo(); |
1131 return true; | 1144 return true; |
1132 } | 1145 } |
1133 | 1146 |
1134 static bool executeUnlink(Frame& frame, Event*, EditorCommandSource, const Strin
g&) | 1147 static bool executeUnlink(Frame& frame, Event*, EditorCommandSource, const Strin
g&) |
1135 { | 1148 { |
1136 applyCommand(UnlinkCommand::create(frame.document())); | 1149 ASSERT(frame.document()); |
| 1150 applyCommand(UnlinkCommand::create(*frame.document())); |
1137 return true; | 1151 return true; |
1138 } | 1152 } |
1139 | 1153 |
1140 static bool executeUnscript(Frame& frame, Event*, EditorCommandSource source, co
nst String&) | 1154 static bool executeUnscript(Frame& frame, Event*, EditorCommandSource source, co
nst String&) |
1141 { | 1155 { |
1142 return executeApplyStyle(frame, source, EditActionUnscript, CSSPropertyVerti
calAlign, "baseline"); | 1156 return executeApplyStyle(frame, source, EditActionUnscript, CSSPropertyVerti
calAlign, "baseline"); |
1143 } | 1157 } |
1144 | 1158 |
1145 static bool executeUnselect(Frame& frame, Event*, EditorCommandSource, const Str
ing&) | 1159 static bool executeUnselect(Frame& frame, Event*, EditorCommandSource, const Str
ing&) |
1146 { | 1160 { |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1742 return m_command->state(*m_frame, triggeringEvent) == TrueTriState ? "tr
ue" : "false"; | 1756 return m_command->state(*m_frame, triggeringEvent) == TrueTriState ? "tr
ue" : "false"; |
1743 return m_command->value(*m_frame, triggeringEvent); | 1757 return m_command->value(*m_frame, triggeringEvent); |
1744 } | 1758 } |
1745 | 1759 |
1746 bool Editor::Command::isTextInsertion() const | 1760 bool Editor::Command::isTextInsertion() const |
1747 { | 1761 { |
1748 return m_command && m_command->isTextInsertion; | 1762 return m_command && m_command->isTextInsertion; |
1749 } | 1763 } |
1750 | 1764 |
1751 } // namespace WebCore | 1765 } // namespace WebCore |
OLD | NEW |