if([self isEditable]) { NSLog(@"editable\n"); // Mail uses an editable WebView, in which case we want to send the entire page to the ODB Editor NSString* const CARET = [NSString stringWithFormat:@"%C", 0xFFFD]; NSString* str = @""; int lineNumber = 0; DOMDocumentFragment* selection = [[self selectedDOMRange] cloneContents]; if(!selection) { NSLog(@"not sel"); [self insertText:CARET]; // ugly hack, but we want to preserve the position of the caret [self selectAll:nil]; selection = [[self selectedDOMRange] cloneContents]; // remove the caret marker. TODO we should start an undo group, so the (chunked) undo doesn’t remove more than just the caret if(NSUndoManager* undoManager = [self undoManager]) { if([undoManager canUndo]) { [undoManager undo]; [self selectAll:nil]; } } } if(selection) { NSLog(@"sel"); str = convert_dom_to_text([[[self mainFrame] DOMDocument] createTreeWalker:selection :DOM_SHOW_ALL :nil :YES]); NSLog(@"str %s\n", str); while([str hasSuffix:@"\n\n"]) str = [str substringToIndex:[str length]-1]; NSLog(@"str %s\n", str); NSArray* split = [str componentsSeparatedByString:CARET]; if([split count] == 2) { lineNumber = [[[split objectAtIndex:0] componentsSeparatedByString:@"\n"] count] - 1; str = [split componentsJoinedByString:@""]; } NSLog(@"str %s\n", str); } [EditInODBEditor externalEditString:str startingAtLine:lineNumber forView:self]; }