anchor.diff:     * Complete the toggling process, see [_toggle].
      */
     void _completeToggle() {
  -    // Most likely, all aggregated events for a single gesture will have the 
  +    // Most likely, all aggregated events for a single gesture will have the
       // same value (either 'close' or 'open'), but we don't count on that and
       // formally && all the values just in case.
       final bool newOpened = _toggleQueue.reduce((a, b) => a && b);
       if (newOpened != opened) {
         opened = newOpened;
  -      // TODO(ussuri): A temporary plug to make #overlay and #button see
  -      // changes in 'opened'. Data binding via {{opened}} in the HTML isn't
  -      // detected. deliverChanges() fixes #overlay, but not #button.
  -      _overlay..opened = newOpened..deliverChanges();
  -      _button..active = newOpened..deliverChanges();
  +      // TODO(ussuri): A hack to make #overlay and #button see
  +      // changes in 'opened'. Data binding via {{opened}} in the HTML wasn't
  +      // detected. deliverChanges() here fixed #overlay, but not #button.
  +      // Only direct attribute setting helps.
  +      _overlay.setAttr('opened', newOpened);
  +      _button.setAttr('active', newOpened);
         if (newOpened) {
           // Enforce focused state so the button can accept keyboard events.
           focus();
  
positive.code:     assert(_SUPPORTED_ARROWS.contains(arrow));
  
      _overlay = $['overlay'];
      _menu = $['menu'];
  
      final ContentElement buttonCont = $['button'];
  
negative.code:   static final List<String> _SUPPORTED_ARROWS = [
      'none', 'top-center', 'top-left', 'top-right'
    ];
  
    SparkButton _button;
    SparkOverlay _overlay;
    SparkMenu _menu;
  