The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
? my $app = shift;
? my @ircs = $app->ircs;

<div class="config" id="servers">

  <div class="sidebar">

    <h2>Connections</h2>
    
    <ul id="connections">
      <? for my $index (0 .. @ircs - 1) { ?>
        <? my $irc = $ircs[$index]; ?>
        <? my $network = $irc->name; ?>
        <li class="<?= $irc->is_connected ? "connected" : "disconnected" ?> <? if ($index == 0) {?> active<?}?>"
            onclick="Alice.connections.showConnection('<?= $network ?>')" id="menu_<?= $network ?>">
          <?= $network ?>
        </li>
      <? } ?>
    </ul>

    <div class="controls" id="server_controls">
      <a href="#" onclick="return Alice.connections.addServer()">New</a>
      <a href="#" onclick="return Alice.connections.removeServer()">Remove</a>
    </div>

  </div>

  <form id="config_data" onsubmit="return Alice.connections.submit(this)">

  <div class="config_body">

      <input type="hidden" name="has_servers" value="1" />
    
? for my $index (0 .. @ircs - 1) {
?   my $irc = $ircs[$index];
?   my $network = $irc->name;
?   my $config = $app->config->servers->{$network};

?   my ($action, $status);
?   if ($irc->is_connected) {
?     $status = "connected";
?     $action = "disconnect";
?   } elsif ($irc->is_connecting) {
?     $status = "connecting";
?     $action = "disconnect";
?   } elsif ($irc->reconnect_timer) {
?     $status = "reconnecting";
?     $action = "disconnect";
?   } else {
?     $status = "disconnected";
?     $action = "connect";
?   }

    <table class="<? if ($index == 0) {?>active<?}?>" id="setting_<?= $network ?>">

      <tr>
        <td>
          <label>Name</label>
          <span><?= $network ?></span>
          <input type="hidden" name="<?= $network ?>_name" value="<?= $network ?>" />
        </td>

        <td>
          <label>Status</label>
          <span class="<?= $status ?>" id="<?= $network ?>_status"><?= $status ?></span>
        </td>
      </tr>

      <tr>
        <td>
          <label>Auto-connect?</label>
          <input type="checkbox"<? if ($config->{autoconnect}) {?> checked="checked"<?}?> name="<?= $network ?>_autoconnect" />
        </td>

        <td>
          <button id="<?= $network ?>_connection" onclick="return Alice.connections.serverConnection('<?= $irc->name ?>', '<?= $action ?>')">
            <?= $action ?>
          </button>
        </td>
      </tr>

      <tr>
        <td>
          <label>Server address</label>
          <input type="text" name="<?= $network ?>_host" value="<?= $config->{host} || "" ?>" size="15"/>
        </td>

        <td>
          <label>Port</label>
          <input type="text" name="<?= $network ?>_port" value="<?= $config->{port} || "" ?>" size="6" style="float:left"/>

            <input type="checkbox" name="<?= $network ?>_ssl"<? if ($config->{ssl}) { ?> checked="checked"<? } ?> />
            <span style="font-size:0.7em">SSL</span>
        </td>
      </tr>

      <tr>
        <td>
          <label>Nick</label>
          <input type="text" name="<?= $network ?>_nick" value="<?= $config->{nick} || ""?>" size="15" />
        </td>

        <td>
          <label>Name or Avatar URL</label>
          <input type="text" name="<?= $network ?>_ircname" value="<?= $config->{ircname} || ""?>" size="15" />
        </td>
      </tr>

      <tr>
        <td>
          <label>Username</label>
          <input type="text" name="<?= $network ?>_username" value="<?= $config->{username} || ""?>" size="15" />
        </td>

        <td>
          <label>Password</label>
          <input type="text" name="<?= $network ?>_password" value="<?= $config->{password} || ""?>" size="15" />
        </td>
      </tr>

      <tr>
        <td>
          <label>Channels
            <span style="font-size:0.8em">(e.g. <span style="font-family:monospace;font-size:1em">#alice</span>)</span>
          </label>
          <select name="<?= $network ?>_channels" multiple="multiple" id="channels_<?= $network ?>" class="channelselect">
            <? for my $channel (@{$config->{channels}}) { ?>
            <option value="<?= $channel ?>"><?= $channel ?></option>
            <? } ?>
          </select>
          <div class="controls">
            <a href="#" onclick="return Alice.connections.addChannel('<?= $network ?>')">Add</a>
            <a href="#" onclick="return Alice.connections.removeChannels('<?= $network ?>')">Remove</a>
          </div>
        </td>

        <td>
          <label>Commands</label>
          <select name="<?= $network ?>_on_connect" multiple="multiple" id="on_connect_<?= $network ?>" class="channelselect">
            <? for my $command (@{ $config->{on_connect} }) { ?>
            <option value="<?= $command ?>"><?= $command ?></option>
            <? } ?>
          </select>
          <div class="controls">
            <a href="#" onclick="return Alice.connections.addCommand('<?= $network ?>')">Add</a>
            <a href="#" onclick="return Alice.connections.removeCommands('<?= $network ?>')">Remove</a>
          </div>
        </td>
      </tr>
    </table>

? }

  </div>

  <div class="buttons">
    <a style="text-decoration:none;color:#fff;font-size:11px" href="/export" target="_blank">export config</a>
    <button type="submit">Save</button>
    <button onclick="Alice.connections.remove(); return false;">Cancel</button>
  </div>

  </form>

</div>