// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

part of swarmlib;

/// An informational dialog that shows keyboard shortcuts and provides a
/// link to the Dart language webpage.
//TODO(efortuna): fix DialogView so it doesn't require the HTML passed to
// the constructor.
class HelpDialog extends DialogView {
  final CompositeView _parent;
  final Function _doneHandler;

  HelpDialog(this._parent, this._doneHandler)
      : super('Information', '', makeContent());

  @override
  void onDone() {
    _doneHandler();
  }

  static View makeContent() {
    return View.html('''
        <div>

          <p>
          Keyboard shortcuts:
          ${generateTableHtml()}
          </p>

          <p>
          <div id="dart-logo">
          <a href="http://dartlang.org">
          Dart, the programming language</a>.
          </div>
          </p>
        </div>
        ''');
  }

  static String generateTableHtml() {
    String cellStart = '''<th valign="middle" align="center">''';
    return '''<table width="90%" border=1 cellspacing="0" cellpadding="2">
            <tr bgcolor="#c3d9ff">
              $cellStart Shortcut Key </th>
              $cellStart Action </th>
            </tr>
            <tr>
              $cellStart j, &lt;down arrow&gt; </th>
              $cellStart Next Article </th>
            </tr>
            <tr>
              $cellStart k, &lt;up arrow&gt; </th>
              $cellStart Previous Article </th>
            </tr>
            <tr>
              $cellStart o, &lt;enter&gt; </th>
              $cellStart Open Article </th>
            </tr>
            <tr>
              $cellStart &lt;esc&gt;, &lt;delete&gt; </th>
              $cellStart Back </th>
            </tr>
            <tr>
              $cellStart a, h, &lt;left arrow&gt; </th>
              $cellStart Left </th>
            </tr>
            <tr>
              $cellStart d, l, &lt;right arrow&gt; </th>
              $cellStart Right </th>
            </tr>
            <tr>
              $cellStart n </th>
              $cellStart Next Category </th>
            </tr>
            <tr>
              $cellStart p </th>
              $cellStart Previous Category </th>
            </tr>

        </table>''';
  }
}
