anchor.diff:          _textFileExtensions.contains(extension);
     }
   
  -  void openEditor(ws.File file, {Span selection}) {
  +  Future<Editor> openEditor(ws.File file, {Span selection}) {
       navigationManager.gotoLocation(new NavigationLocation(file, selection));
  +    // TODO(ussuri): Is there something better than nextTick?
  +    return nextTick().then((_) => editorManager.currentEditor);
     }
   
     //
  
positive.code: 
    js.JsObject _designer;
    File _file;
  
    PolymerDesignerAction(Spark spark, SparkDialog dialog)
        : super(spark, "polymer-designer", "Edit in Polymer Designer…", dialog) {
      _designer = new js.JsObject.fromBrowserObject(
          _dialog.getElement('#polymerDesigner'));
      _dialog.getElement('#polymerDesignerClear').onClick.listen(_clearCode);
      _dialog.getElement('#polymerDesignerRevert').onClick.listen(_revertCode);
    }
  
    void _invoke([List<ws.Resource> resources]) {
      _file = spark._getFile(resources);
      _dialog.dialog.headerTitle = "Polymer Designer: ${_file.name}";
      _show();
      _file.getContents().then((String code) {
        _designer.callMethod('load', [code]);
      });
    }
  
    void _commit() {
      final js.JsObject promise = _designer.callMethod('getCode');
      promise.callMethod('then', [(String code) {
        _getCode(code);
        _cleanup();
      }]);
  
  
negative.code:     }
    }
  
    Editor getCurrentEditor() => editorManager.currentEditor;
  
    // TODO(ussuri): The whole show...Message/Dialog() family: polymerize,
    // generalize and offload to SparkPolymerUI.
  