Index: dart/site/try/src/interaction_manager.dart |
diff --git a/dart/site/try/src/interaction_manager.dart b/dart/site/try/src/interaction_manager.dart |
index dba6d5547423d4dea912623aea08ed0853c566a6..bccc995ad88f9b26d7cb3132c250015a8ebecefd 100644 |
--- a/dart/site/try/src/interaction_manager.dart |
+++ b/dart/site/try/src/interaction_manager.dart |
@@ -228,6 +228,7 @@ class InteractionContext extends InteractionManager { |
void onKeyUp(KeyboardEvent event) => state.onKeyUp(event); |
void onMutation(List<MutationRecord> mutations, MutationObserver observer) { |
+ workAroundFirefoxBug(); |
try { |
try { |
return state.onMutation(mutations, observer); |
@@ -305,7 +306,6 @@ abstract class InteractionState implements InteractionManager { |
void set state(InteractionState newState); |
void onStateChanged(InteractionState previous) { |
- print('State change ${previous.runtimeType} -> ${runtimeType}.'); |
} |
void transitionToInitialState() { |
@@ -333,10 +333,8 @@ class InitialState extends InteractionState { |
void onKeyUp(KeyboardEvent event) { |
if (computeHasModifier(event)) { |
- print('onKeyUp (modified)'); |
onModifiedKeyUp(event); |
} else { |
- print('onKeyUp (unmodified)'); |
onUnmodifiedKeyUp(event); |
} |
} |
@@ -383,8 +381,6 @@ class InitialState extends InteractionState { |
} |
void onMutation(List<MutationRecord> mutations, MutationObserver observer) { |
- print('onMutation'); |
- |
removeCodeCompletion(); |
Selection selection = window.getSelection(); |
@@ -426,7 +422,9 @@ class InitialState extends InteractionState { |
node.parent.insertAllBefore(nodes, node); |
node.remove(); |
- trySelection.adjust(selection); |
+ if (mainEditorPane.contains(trySelection.anchorNode)) { |
ahe
2014/06/27 11:23:28
This sometimes happens on Firefox. It is related t
Johnni Winther
2014/07/02 08:40:54
Put this in a comment.
ahe
2014/07/04 13:52:00
Done.
|
+ trySelection.adjust(selection); |
+ } |
// TODO(ahe): We know almost exactly what has changed. It could be |
// more efficient to only communicate what changed. |
@@ -1150,7 +1148,7 @@ void normalizeMutationRecord(MutationRecord record, |
if (!record.removedNodes.isEmpty) { |
normalizedNodes.add(findLine(record.target)); |
} |
- if (record.type == "characterData") { |
+ if (record.type == "characterData" && record.target.parent != null) { |
ahe
2014/06/27 11:23:28
Firefox sends two records when the last character
Johnni Winther
2014/07/02 08:40:54
Put this in a comment.
ahe
2014/07/04 13:52:00
Done.
|
normalizedNodes.add(findLine(record.target)); |
} |
} |
@@ -1203,3 +1201,17 @@ bool isCompilerStageMarker(String message) { |
message == "Compiling..." || |
message.startsWith('Compiled '); |
} |
+ |
+void workAroundFirefoxBug() { |
+ Selection selection = window.getSelection(); |
+ if (!isCollapsed(selection)) return; |
+ Node node = selection.anchorNode; |
+ int offset = selection.anchorOffset; |
+ if (selection.anchorNode is Element && selection.anchorOffset != 0) { |
ahe
2014/06/27 11:23:28
In some cases, Firefox reports the wrong anchorOff
Johnni Winther
2014/07/02 08:40:54
Again, put this in a comment.
ahe
2014/07/04 13:52:00
Done.
|
+ selection |
+ ..modify('move', 'backward', 'character') |
+ ..modify('move', 'forward', 'character'); |
+ print('Worked around Firefox selection bug $node@$offset -> ' |
+ '${selection.anchorNode}@${selection.anchorOffset}.'); |
+ } |
+} |