{#-
       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.
-#}
{% set hide_left_bar = True %}
{% extends g.theme.master %}

{% block title %}OpenId Claim Form{% endblock %}

{% block header %}OpenId Claim Form{% endblock %}

{% block content %}
  <div id="loginform_oid">
    <form action="claim_verify_oid" method="post" class="loginfields">
      <label for="provider" class="grid-4">Provider</label>
      <div class="grid-18">
        <select id="provider" name="provider">
          {%- for label, url in oid_providers %}
            <option value="{{url}}">{{label}}</option>
          {%- endfor %}
        </select>
      </div>
      <label class="grid-4" for="username">Username:</label>
      <div class="grid-18">
        <input type="text" id="username" name="username" class="text"/>
      </div>
      <label class="grid-4">&nbsp;</label>
      <div class="grid-18">
        <input type="submit" id="submit" value="Claim">
      </div>
    </form>
  </div>
{% endblock %}
