| {#- |
| 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. |
| -#} |
| {% extends g.theme.master %} |
| |
| {% if hasattr(c.app, 'repo') %} |
| {% set repo = c.app.repo %} |
| {% else %} |
| {% set repo = None %} |
| {% endif %} |
| |
| {% if repo and repo.status != 'ready' %} |
| {% set hide_left_bar = True %} |
| {% endif %} |
| |
| {% set clone_categories = repo.clone_command_categories(anon=not h.has_access(c.app, 'write')()) %} |
| |
| {% block extra_css %} |
| <link rel="alternate" type="application/rss+xml" title="RSS" href="{{c.app.url}}feed.rss"/> |
| <link rel="alternate" type="application/atom+xml" title="Atom" href="{{c.app.url}}feed.atom"/> |
| <style type="text/css"> |
| #access_urls .btn-set { |
| {# we need a min-width to prevent this block from wrapping, but its size can vary, so we have to do this ugly guesstimate #} |
| min-width: {{ clone_categories|join('', attribute='name')|length + clone_categories|length + 1}}em; |
| } |
| </style> |
| {% endblock %} |
| |
| {% block extra_js %} |
| <script type="text/javascript">(function() { |
| $('#access_urls .btn').click(function(evt){ |
| evt.preventDefault(); |
| var parent = $(this).parents('.btn-bar'); |
| var checkout_cmd = $(this).attr('data-url'); |
| $(parent).find('input').val(checkout_cmd); |
| $(parent).find('span').text($(this).attr('title')+' access'); |
| $(this).parent().children('.btn').removeClass('active'); |
| $(this).addClass('active'); |
| if (checkout_cmd.indexOf(' http://') !== -1 || checkout_cmd.indexOf(' https://') !== -1 ) { |
| $('#http-2fa-msg').show(); |
| } else { |
| $('#http-2fa-msg').hide(); |
| } |
| }); |
| $('#access_urls .btn').first().click(); |
| |
| {% if repo %} |
| var repo_status = document.getElementById('repo_status'); |
| // The repo_status div will only be present if repo.status != 'ready' |
| if (repo_status) { |
| $('.spinner').show() |
| var delay = 500; |
| function check_status() { |
| $.get('{{repo.url()}}status', function(data) { |
| if (data.status === 'ready') { |
| $('.spinner').hide() |
| $('#repo_status h2').html('Repo status: ready. <a href="." rel="nofollow">Click here to refresh this page.</a>'); |
| } |
| else { |
| $('#repo_status h2 span').html(data.status); |
| if (delay < 60000){ |
| delay = delay * 2; |
| } |
| window.setTimeout(check_status, delay); |
| } |
| }); |
| } |
| var status_checker = window.setTimeout(check_status, delay); |
| {% endif %} |
| } |
| }()); |
| </script> |
| {% endblock %} |
| |
| {% block before_content %} |
| {% if repo and repo.status != 'ready' %} |
| <div id="repo_status"> |
| <img src="{{g.forge_static('images/spinner.gif')}}" class="spinner" style="display:none"/> |
| <h2>Repo status: <span>{{repo.status}}</span>...</h2> |
| </div> |
| {% endif %} |
| {% endblock %} |
| |
| {% macro clone_info(repo) %} |
| {% if repo %} |
| <div id="access_urls" class="btn-bar grid-19"> |
| {% if clone_categories|length > 1 %} |
| <div class="btn-set{% if clone_categories|length == 2 %} duo{% endif %}"> |
| {% for clone_cat in clone_categories %} |
| <a class="btn" data-url="{{repo.clone_command(clone_cat['key'])}}" title="{{ clone_cat.get('title', '') }}"> |
| {{ clone_cat['name'] }} |
| </a> |
| {% endfor %} |
| </div> |
| {% endif %} |
| <span>{{ clone_categories[0]['title'] }} access</span> |
| <div> |
| <input id="access_url" readonly type="text" |
| class="selectText" |
| value="{{repo.clone_command(clone_categories[0]['key'])}}"/> |
| </div> |
| </div> |
| {% if not c.user.is_anonymous() and c.user.get_pref('multifactor') and h.has_access(c.app, 'write') %} |
| <div id="http-2fa-msg" class="grid-19 info" style="display: none"> |
| When using HTTPS access with two-factor auth, you will need to enter your password and current token together as |
| the password (e.g. "p4ssw0Rd123456") |
| </div> |
| {% endif %} |
| <hr> |
| {% endif %} |
| {% endmacro %} |
| |
| {% macro commit_labels(commit) %} |
| {% set branches, tags = commit.symbolic_ids %} |
| {% for b in branches %} |
| <span class="scm-branch-label">{{b}}</span> |
| {% endfor %} |
| {% for t in tags %} |
| <span class="scm-tag-label">{{t}}</span> |
| {% endfor %} |
| {% endmacro %} |