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 18 matching lines...) Expand all Loading... |
29 | 29 |
30 #include "bindings/core/v8/ExceptionState.h" | 30 #include "bindings/core/v8/ExceptionState.h" |
31 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 31 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
32 #include "core/CSSPropertyNames.h" | 32 #include "core/CSSPropertyNames.h" |
33 #include "core/CSSValueKeywords.h" | 33 #include "core/CSSValueKeywords.h" |
34 #include "core/HTMLNames.h" | 34 #include "core/HTMLNames.h" |
35 #include "core/clipboard/Pasteboard.h" | 35 #include "core/clipboard/Pasteboard.h" |
36 #include "core/css/CSSValueList.h" | 36 #include "core/css/CSSValueList.h" |
37 #include "core/css/StylePropertySet.h" | 37 #include "core/css/StylePropertySet.h" |
38 #include "core/dom/DocumentFragment.h" | 38 #include "core/dom/DocumentFragment.h" |
| 39 #include "core/dom/TagCollection.h" |
39 #include "core/editing/EditingUtilities.h" | 40 #include "core/editing/EditingUtilities.h" |
40 #include "core/editing/FrameSelection.h" | 41 #include "core/editing/FrameSelection.h" |
41 #include "core/editing/SelectionModifier.h" | 42 #include "core/editing/SelectionModifier.h" |
42 #include "core/editing/commands/CreateLinkCommand.h" | 43 #include "core/editing/commands/CreateLinkCommand.h" |
43 #include "core/editing/commands/EditorCommandNames.h" | 44 #include "core/editing/commands/EditorCommandNames.h" |
44 #include "core/editing/commands/FormatBlockCommand.h" | 45 #include "core/editing/commands/FormatBlockCommand.h" |
45 #include "core/editing/commands/IndentOutdentCommand.h" | 46 #include "core/editing/commands/IndentOutdentCommand.h" |
46 #include "core/editing/commands/InsertListCommand.h" | 47 #include "core/editing/commands/InsertListCommand.h" |
47 #include "core/editing/commands/ReplaceSelectionCommand.h" | 48 #include "core/editing/commands/ReplaceSelectionCommand.h" |
48 #include "core/editing/commands/TypingCommand.h" | 49 #include "core/editing/commands/TypingCommand.h" |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 const EphemeralRange newRange = selection.toNormalizedEphemeralRange(); | 352 const EphemeralRange newRange = selection.toNormalizedEphemeralRange(); |
352 if (newRange.isNull()) | 353 if (newRange.isNull()) |
353 return false; | 354 return false; |
354 if (newRange.isCollapsed()) | 355 if (newRange.isCollapsed()) |
355 return false; | 356 return false; |
356 TextAffinity affinity = frame.selection().affinity(); | 357 TextAffinity affinity = frame.selection().affinity(); |
357 frame.selection().setSelectedRange(newRange, affinity, SelectionDirectionalM
ode::NonDirectional, FrameSelection::CloseTyping); | 358 frame.selection().setSelectedRange(newRange, affinity, SelectionDirectionalM
ode::NonDirectional, FrameSelection::CloseTyping); |
358 return true; | 359 return true; |
359 } | 360 } |
360 | 361 |
| 362 static bool hasChildTags(Element& element, const QualifiedName& tagName) |
| 363 { |
| 364 return !element.getElementsByTagName(tagName.localName())->isEmpty(); |
| 365 } |
| 366 |
361 static TriState selectionListState(const FrameSelection& selection, const Qualif
iedName& tagName) | 367 static TriState selectionListState(const FrameSelection& selection, const Qualif
iedName& tagName) |
362 { | 368 { |
363 if (selection.isCaret()) { | 369 if (selection.isCaret()) { |
364 if (enclosingElementWithTag(selection.selection().start(), tagName)) | 370 if (enclosingElementWithTag(selection.selection().start(), tagName)) |
365 return TrueTriState; | 371 return TrueTriState; |
366 } else if (selection.isRange()) { | 372 } else if (selection.isRange()) { |
367 Element* startElement = enclosingElementWithTag(selection.selection().st
art(), tagName); | 373 Element* startElement = enclosingElementWithTag(selection.selection().st
art(), tagName); |
368 Element* endElement = enclosingElementWithTag(selection.selection().end(
), tagName); | 374 Element* endElement = enclosingElementWithTag(selection.selection().end(
), tagName); |
369 if (startElement && endElement && startElement == endElement) | 375 |
| 376 if (startElement && endElement && startElement == endElement) { |
| 377 // If the selected list has the different type of list as child, ret
urn |FalseTriState|. |
| 378 // See http://crbug.com/385374 |
| 379 if (hasChildTags(*startElement, tagName.matches(ulTag) ? olTag : ulT
ag)) |
| 380 return FalseTriState; |
370 return TrueTriState; | 381 return TrueTriState; |
| 382 } |
371 } | 383 } |
372 | 384 |
373 return FalseTriState; | 385 return FalseTriState; |
374 } | 386 } |
375 | 387 |
376 static TriState stateStyle(LocalFrame& frame, CSSPropertyID propertyID, const ch
ar* desiredValue) | 388 static TriState stateStyle(LocalFrame& frame, CSSPropertyID propertyID, const ch
ar* desiredValue) |
377 { | 389 { |
378 if (frame.editor().behavior().shouldToggleStyleBasedOnStartOfSelection()) | 390 if (frame.editor().behavior().shouldToggleStyleBasedOnStartOfSelection()) |
379 return frame.editor().selectionStartHasStyle(propertyID, desiredValue) ?
TrueTriState : FalseTriState; | 391 return frame.editor().selectionStartHasStyle(propertyID, desiredValue) ?
TrueTriState : FalseTriState; |
380 return frame.editor().selectionHasStyle(propertyID, desiredValue); | 392 return frame.editor().selectionHasStyle(propertyID, desiredValue); |
(...skipping 1577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1958 case WebEditingCommandType::DeleteWordBackward: | 1970 case WebEditingCommandType::DeleteWordBackward: |
1959 return RangesFromCurrentSelectionOrExtendCaret(*m_frame, DirectionBackwa
rd, WordGranularity); | 1971 return RangesFromCurrentSelectionOrExtendCaret(*m_frame, DirectionBackwa
rd, WordGranularity); |
1960 case WebEditingCommandType::DeleteWordForward: | 1972 case WebEditingCommandType::DeleteWordForward: |
1961 return RangesFromCurrentSelectionOrExtendCaret(*m_frame, DirectionForwar
d, WordGranularity); | 1973 return RangesFromCurrentSelectionOrExtendCaret(*m_frame, DirectionForwar
d, WordGranularity); |
1962 default: | 1974 default: |
1963 return nullptr; | 1975 return nullptr; |
1964 } | 1976 } |
1965 } | 1977 } |
1966 | 1978 |
1967 } // namespace blink | 1979 } // namespace blink |
OLD | NEW |