  <% issue.position_groups.each do |label, parties| %>

          <%= image_tag label.icon, class: "icon" %>
          <%= label.text %>

  <% end %>

  <% issue.position_groups.each do |label, parties| %>

        <% parties.each do |party| %>
          <%= link_to issue_url(issue, anchor: party.slug), class: 'issue-graph-party' do %>
            <%= image_tag party.logo.versions[:medium], alt: "#{party.name}s logo" %>
          <% end %>
        <% end %>

  <% end %>

  <% issue.position_groups.each do |label, parties| %>

          <%= label.text %>

  <% end %>

  <% issue.position_groups.each do |label, parties| %>

        <% parties.each do |party| %>
          <%= link_to issue_url(issue, anchor: party.slug), class: 'issue-graph-party' do %>
            <%= image_tag party.logo.versions[:medium], alt: "#{party.name}s logo" %>
          <% end %>
        <% end %>

  <% end %>

Remove thumb icons from issue widget.

Remove thumb icons from issue widget.


<% id ||= "takeup" %>
<% title ||= "Digital take-up" %>
<% description ||= "Service Volumetrics by week" %>

<%= title %>

Data source: TBD

  <p id="<%= id %>-number" class="impact-number">

  <figure class="graph timeseries-graph" id="<%= id %>">

<% id ||= "takeup" %>
<% title ||= "Digital take-up" %>
<% description ||= "Service Volumetrics by week" %>

<%= title %>

Data source: DVLA database

Digital take-up measures the percentage of monthly applications that are made through a digital channel versus non-digital.

Digital channels include online applications and Post Office applications (assisted digital).

  <p id="<%= id %>-number" class="impact-number">

  <figure class="graph timeseries-graph" id="<%= id %>">

Add first draft digital take-up copy

Add first draft digital take-up copy


          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
            Toggle navigation

          </button>
          Online DnD Character Sheet Builder

<%= link_to 'Home', root_path %>

            <%= render 'layouts/nav_dropdown' %>

          <%= render 'shared/login_items' %>

          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
            Toggle navigation

          </button>
          <%= link_to 'Online DnD Character Sheet Builder', root_path, class: "navbar-brand" %>

<%= link_to 'Home', root_path %>

            <%= render 'layouts/nav_dropdown' %>

          <%= render 'shared/login_items' %>

Fix navbar title so that it goes to homepage when clicked.


Hi 👋,

You requested a login code for Hack Club. It's here:

  <%= @login_code %>

It will expire in 15 minutes.

Tip: you can triple-click the box to copy-paste the whole thing, including the dash in the middle.

- Hack Club

Make login email code centered in email client viewports


Import/Export Configuration

<fieldset>
  <legend>Export Configuration</legend>

Download an export of your currently published configuration settings on this server.

    Last Publish: <%= ConfigVersion.last_version %>

    Total APIs: <%= ConfigVersion.last_config["apis"].count %>

    <%= link_to("Download", admin_config_export_path(:format => "yaml", :download => "true"), :class => "btn btn-primary") %>

</fieldset>

<fieldset>
  <legend>Import Configuration</legend>
  <%= form_tag(admin_config_import_preview_path, :class => "text-center", :multipart => true) do %>

Import configuration settings from a YAML file to this server.

    <%= file_field_tag(:file) %>

    <button type="submit" id="upload_button" class="btn btn-primary" data-loading-text=" Uploading...">Next...</button>
    <%= javascript_tag do %>
      var button = $('#upload_button');
      $('form').submit(function(e) {
        button.button('loading');
      });
    <% end %>
  <% end %>
</fieldset>

Import/Export Configuration

<fieldset>
  <legend>Export Configuration</legend>

Download an export of your currently published configuration settings on this server.

    Last Publish: <%= ConfigVersion.last_version %>

    Total APIs: <%= if(ConfigVersion.last_config) then ConfigVersion.last_config["apis"].count else 0 end %>

    <%= link_to("Download", admin_config_export_path(:format => "yaml", :download => "true"), :class => "btn btn-primary") %>

</fieldset>

<fieldset>
  <legend>Import Configuration</legend>
  <%= form_tag(admin_config_import_preview_path, :class => "text-center", :multipart => true) do %>

Import configuration settings from a YAML file to this server.

    <%= file_field_tag(:file) %>

    <button type="submit" id="upload_button" class="btn btn-primary" data-loading-text=" Uploading...">Next...</button>
    <%= javascript_tag do %>
      var button = $('#upload_button');
      $('form').submit(function(e) {
        button.button('loading');
      });
    <% end %>
  <% end %>
</fieldset>

Fix import/export page when no apis currently exist.


<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= f.telephone_field :phone_number, help: 'xxx-xxx-xxxx form' %>
<%= f.form_group :school, label: { text: "School" } do %>
  <%= f.radio_button :school, School::FAIRWOOD, label: School::FAIRWOOD, checked: true, inline: true %>
  <%= f.radio_button :school, School::LAKEWOOD, label: School::LAKEWOOD, inline: true %>
<% end %>

<%= f.text_field :first_name %>
<%= f.text_field :last_name %>
<%= f.text_field :phone_number, help: 'xxx-xxx-xxxx form' %>
<%= f.form_group :school, label: { text: "School" } do %>
  <%= f.radio_button :school, School::FAIRWOOD, label: School::FAIRWOOD, checked: true, inline: true %>
  <%= f.radio_button :school, School::LAKEWOOD, label: School::LAKEWOOD, inline: true %>
<% end %>

Make phone number field of registration a simple text input to avoid issues on iphone/ipad


<%# Hide error message (if any) %>
document.getElementById('criterion_incomplete_error').addClass('hidden');
<% if @result.marking_state == Result::MARKING_STATES[:complete] %>
  var revert = "<%= t('marker.revert_to_incomplete') %>";
  document.getElementById('toggle_marking_state').firstChild.value = revert;
  document.getElementById('toggle_released').firstChild.disabled = false;
<% else %>
  var set = "<%= t('marker.set_to_complete') %>";
  document.getElementById('toggle_marking_state').firstChild.value = set;
  document.getElementById('toggle_released').firstChild.disabled = true;
<% end %>

<%
  @assignment = @result.submission.assignment
  if @current_user.admin?
    num_marked = @assignment.get_num_marked
    num_assigned = @assignment.get_num_assigned
  else
    num_marked = @assignment.get_num_marked(@current_user.id)
    num_assigned = @assignment.get_num_assigned(@current_user.id)
  end
%>

update_bar(<%= num_marked %>, <%= num_assigned %>);

<%# Hide error message (if any) %>
document.getElementById('criterion_incomplete_error').addClass('hidden');
<% if @result.marking_state == Result::MARKING_STATES[:complete] %>
  var revert = "<%= t('marker.revert_to_incomplete') %>";
  document.getElementById('toggle_marking_state').firstChild.value = revert;
  if (document.getElementById('toggle_released')) {
    document.getElementById('toggle_released').firstChild.disabled = false;
  }
<% else %>
  var set = "<%= t('marker.set_to_complete') %>";
  document.getElementById('toggle_marking_state').firstChild.value = set;
  if (document.getElementById('toggle_released')) {
    document.getElementById('toggle_released').firstChild.disabled = true;
  }
<% end %>

<%
  @assignment = @result.submission.assignment
  if @current_user.admin?
    num_marked = @assignment.get_num_marked
    num_assigned = @assignment.get_num_assigned
  else
    num_marked = @assignment.get_num_marked(@current_user.id)
    num_assigned = @assignment.get_num_assigned(@current_user.id)
  end
%>

update_bar(<%= num_marked %>, <%= num_assigned %>);

Fix bug with update_bar for TAs

Fix bug with update_bar for TAs


  describe '<%= resource.uri_partial %>' do
    let(:route) { '<%= resource.uri_partial %>' }
    <% resource.methods.each do |method| %>
    describe '<%= method.method.upcase %>' do
      it '<%= method.description.downcase %>' do
      end

      it 'returns status <%= method.responses.first.code %>' do
      end
    end<% end %>
  end

  describe '<%= resource.uri_partial %>' do
    let(:route) { '<%= resource.uri_partial %>' }
    <% resource.methods.each do |method| %>
    describe '<%= method.method.upcase %>' do
      let(:response_body) do
        <%= method.responses.first.bodies.first %>.to_json
      end

      it '<%= method.description.downcase %>' do
      end

      it 'returns status <%= method.responses.first.code %>' do
      end
    end<% end %>
  end

Add response body to spec

Add response body to spec


#!/bin/sh

cd <%= node['gitlab'][@options[:rails_app]]['dir'] %>/working

exec 2>&1

exec chpst -e /opt/gitlab/etc/<%= @options[:rails_app] %>/env -P \
  -U <%= @options[:user] %> -u <%= @options[:user] %> \
  /opt/gitlab/embedded/bin/bundle exec mail_room \
    -q -c <%= @options[:mail_room_config] %>

#!/bin/sh

cd <%= node['gitlab'][@options[:rails_app]]['dir'] %>/working

exec 2>&1

# This is useful to see in the logs; mail_room is very quiet
echo 'Runit: starting mail_room'

exec chpst -e /opt/gitlab/etc/<%= @options[:rails_app] %>/env -P \
  -U <%= @options[:user] %> -u <%= @options[:user] %> \
  /opt/gitlab/embedded/bin/bundle exec mail_room \
    -q -c <%= @options[:mail_room_config] %>

Add startup message to mail_room

Add startup message to mail_room


Edit Comment

<%= render "layouts/error_messages" %>
<%= form_for @comment do |f| %>
  <%= render partial: "form", locals: {f: f} %>
  <%= f.submit %>
<% end %>

Add error messages to comment edit form.


<% breadcrumb(:edit_mapping, @mapping) %>

<%= content_for :page_title, 'Edit mapping' %>

  <%= @site.default_host.hostname %>
  Edit mapping

<%= mapping_edit_tabs active: 'Edit' %>

<%= render :partial => 'form' %>

Include a border on the edit mapping header


<form class="search-form">
	<input class="search-field" type="text" />
</form>

  All schools
  New schools
  Consortium schools
  CTE schools
  All-Girls schools
  International schools
  Specialized schools
  NYC P-Tech 9-14, New School
  All Boys Schools

Add menu-ui nav with filtering for types of schools, add output element for mapbox geocoder, add marker-list element, add search-form element


Pilot

    <% if Time.zone.now < Time.zone.parse("May 1, 2016") %>

    <% else %>

Map is undergoing maintenance. Please check back later.

    <% end %>

Winter 2016 Pilot Buildings

    <% if Time.zone.now < Time.zone.parse("May 1, 2016") %>

    <% else %>

Map is undergoing maintenance. Please check back later.

    <% end %>

Update title of pilot page

Update title of pilot page


<% content_for :header_title, "Income and Employment" %>
<% content_for :form_card_title, "Are you self-employed in any way?" %>
<% content_for :form_card_help, "You’re self employed if you own your own business or perform odd jobs." %>

<% content_for :form_card_body do %>
  <%= fields_for(:form, @form, builder: MbFormBuilder) do |f| %>
    <%= f.mb_yes_no_buttons :self_employed,
                            yes_value: "yes",
                            no_value: "no" %>
  <% end %>
<% end %>

<% content_for :skip_footer, true %>

<% content_for :header_title, "Income and Employment" %>
<% content_for :form_card_title, "Are you self-employed in any way?" %>
<% content_for :form_card_help, "This includes owning your own business, have a home or online business, or performing odd jobs." %>

<% content_for :form_card_body do %>
  <%= fields_for(:form, @form, builder: MbFormBuilder) do |f| %>
    <%= f.mb_yes_no_buttons :self_employed,
                            yes_value: "yes",
                            no_value: "no" %>
  <% end %>
<% end %>

<% content_for :skip_footer, true %>

Update help text for self-employment question

[Fixes #156390041]


<
<% if flash[:notice].present? %>

		<button id="close-button" type="button" class="close" aria-label="Close">×</button>
		<%= flash[:notice] %>

<% end %>
<%= render "document" %>

Put flash message back in the public page after submitting.


# Habitat Supervisor Log Key Reference

When running services with the Habitat Supervisor you'll see log output similar
to this:

~~~
redis.default(SR): Initializing
redis.default(SV): Starting
redis.default(O):
~~~

The letters in parentheses are called "log keys" and signify what type of log
message is being shown. This can be useful for log filtering.

They are mostly organized by the part of the Habitat Supervisor code base that
they are running from, so they often are of value to somebody troubleshooting
problems in the Habitat Supervisor source code.

The meanings of the keys are as follows:

| Key | Description |
|-----|-------------|
| CE | Census |
| CFG | Global configuration |
| CS | Create service: When a service is being started |
| ER| Errors |
| HG | Messages from the HTTP gateway |
| MN | Main |
| MR | Manager |
| O | Standard output |
| PH | Package hooks |
| PK | Package |
| PT | Path |
| SC | Service configuration |
| SH | Starting a shell with `hab sup sh` |
| SI | Unix signals |
| SOT | Structured output |
| SR | Service runtime |
| SU | Service updater |
| SV | Supervisor |
| SY | "sys" utility |
| UR | Users utility |
| UT | Utilities |

# Habitat Supervisor Log Key Reference

When running services with the Habitat Supervisor you'll see log output similar
to this:

~~~
redis.default(SR): Initializing
redis.default(SV): Starting
redis.default(O):
~~~

The letters in parentheses are called "log keys" and signify what type of log
message is being shown. This can be useful for log filtering.

They are mostly organized by the part of the Habitat Supervisor code base that
they are running from, so they often are of value to somebody troubleshooting
problems in the Habitat Supervisor source code.

The meanings of the keys are as follows:

| Key | Description |
|-----|-------------|
| CE | Census |
| CFG | Global configuration |
| CS | Create service: When a service is being started |
| ER | Errors |
| FW | Generic file watcher |
| HG | Messages from the HTTP gateway |
| MN | Main |
| MR | Manager |
| O | Standard output |
| PH | Package hooks |
| PK | Package |
| PT | Path |
| PW | Peer file watcher |
| SC | Service configuration |
| SH | Starting a shell with `hab sup sh` |
| SI | Unix signals |
| SOT | Structured output |
| SR | Service runtime |
| SU | Service updater |
| SV | Supervisor |
| SY | "sys" utility |
| UR | Users utility |
| UT | Utilities |

Add new log keys to docs

Add new log keys to docs

Signed-off-by: Krzesimir Nowak <049588669667d6bb20b978e17fc57ff3556ea5dd@kinvolk.io>


<%=@school.name %> is live on Energy Sparks

<%= link_to 'View your school', school_url(@school), class: 'btn btn-primary mb-3 mb-3'%>

<%=@school.name %> is live on Energy Sparks

  You can now use Energy Sparks to see how much electricity and gas your school is using,
  set up alerts to warn you about high energy use and explore our activities and educational
  resources designed to teach your pupils about energy whilst saving money for their school.

  We hope Energy Sparks will empower your pupils, school staff,
  and wider school community to take action to make your school more energy efficient.

<%= link_to 'View your school', school_url(@school), class: 'btn btn-primary mt-3 mb-3'%>

Copy for onboarding activation email

Copy for onboarding activation email


<% provide(:title, "Flight Historian 1.2")%>
<% provide(:meta_description, "Flight Historian version 1.2 change log")%>

  Flight Historian 1.2

  Operators and Codeshares

<%= render partial: "static_pages/flight_historian/version_picker", locals: {menu: @version_menu} %>

27 October 2014

I’ve updated the Flight Log <%= link_to "Flight Log", "https://www.flighthistorian.com/", target: "_blank" %> to version 1.2 by adding codeshares, operators, and fleet numbers to flights.

Not all flights are operated by the airline that advertises it; often, airlines subcontract out flights to other airlines, particularly regional flights. In either case, whether the flight is operated by the advertising airline (i.e., <%= link_to "United", "https://www.flighthistorian.com/operators/UA", target: "_blank" %>) or a different operator (i.e., <%= link_to "ExpressJet", "https://www.flighthistorian.com/operators/EV", target: "_blank" %>), the Show Flight view now displays this. In addition, if the flight was a codeshare (where an airline sold a ticket on a partner’s flight), this is shown too.

Clicking on the operator brings up details on a Show Operator view:

In some cases, I know the fleet number the operator uses for the aircraft, so the bottom of this page contains a list of the known fleet numbers.

Clicking on any fleet number will show details for all flights flown on that operator-fleet number combination.Finally, all of the operators are now listed on the Index Airlines <%= link_to "", "https://www.flighthistorian.com/airlines", target: "_blank" %> view, below the airline list:

…I fly on a lot of regional jets.

<%= link_header "Change Log", 2 %>

Added operating airlines, fleet numbers, and codeshares

Write Flight Historian v1.2 view

Write Flight Historian v1.2 view


  <% if defined? title %>

<%= title %>

  <% end %>

      Status
      Event
      Start at
      Channels

  <%# TODO: I need to allow info only Notifications %>

    <% notifications.each do |notification| %>

        <%= notification.status %>
        <%= notification.event ? (link_to notification.event.title, notification.event) : 'None' %>
        <%= notification.scheduled_start_time %>
        <%= notification.channels %>
        <%= link_to 'Edit', edit_notification_path(notification) %>

    <% end %>

  <% if defined? title %>

<%= title %>

  <% end %>

      Status
      Event
      Start at
      Channels

  <%# TODO: I need to allow info only Notifications %>

    <% notifications.each do |notification| %>

        <%= notification.status %>
        <%= notification.event ? (link_to notification.event.title, notification.event) : 'None' %>
        <%= notification.scheduled_start_time %>
        <%= notification.channels %>
        <%= link_to 'Edit', edit_notification_path(notification) if can? :update, notification %>

    <% end %>

Add Edit permission check to Notifications table


<% content_for :page_title, @edition.title %>
<% content_for :title, "Associated user needs" %>
<% content_for :context, @edition.title %>
<% content_for :back_link do %>
  <%= render "govuk_publishing_components/components/back_link", href: admin_edition_path(@edition) %>
<% end %>

    <%= form_tag admin_update_needs_path(content_id: @document.content_id), method: :patch do %>
      <%= render "components/autocomplete", {
          id: "need_ids",
          name: "need_ids[]",
          label: {
            text: "Select associated user needs",
            bold: true,
            required: true,
          },
          heading_size: "l",
          select: {
            options: [""] + taggable_needs_container,
            multiple: true,
            selected: @document.need_ids,
          },
      } %>

        <%= render "govuk_publishing_components/components/button", {
          text: "Save"
        } %>
    <% end %>

<% content_for :page_title, @edition.title %>
<% content_for :title, "Associated user needs" %>
<% content_for :context, @edition.title %>

    <%= form_tag admin_update_needs_path(content_id: @document.content_id), method: :patch do %>
      <%= render "components/autocomplete", {
          id: "need_ids",
          name: "need_ids[]",
          label: {
            text: "Select associated user needs",
            bold: true,
            required: true,
          },
          heading_size: "l",
          select: {
            options: [""] + taggable_needs_container,
            multiple: true,
            selected: @document.need_ids,
          },
      } %>

        <%= render "govuk_publishing_components/components/button", {
          text: "Save"
        } %>

        <%= link_to("Cancel", [:admin, @edition], class: "govuk-link") %>

    <% end %>

Replace user needs back button with cancel button

In our like for like approach we're using cancel buttons instead of back buttons in the new design system pages.


# Ignoring a Commit

Some code changes don't really require a full build - editing documentation for example. If you want Buildkite to ignore a commit and not build it, simply add `[ci skip]` or `[skip ci]` somewhere in the commit message.
Buildkite won't build this commit or store it in the build history.

In GitHub, it would look something like this:

<%= image "github_example.png" %>

# Ignoring a Commit

Some code changes, such as editing a Readme, may not require a Buildkite build. If you want Buildkite to ignore a commit, add `[ci skip]` or `[skip ci]` anywhere in the commit message.

For example, the following commit message will cause Buildkite to ignore the commit and not create a corresponding build:

```
Fix readme typos [skip ci]
```

Multi-line commit messages are also supported. For example, the following commit message will also cause Buildkite to ignore the commit:

```
Fix readme typos

* Fixed the build badge
* Fixed broken GitHub link

[skip ci]
```

Improve the Ignoring a Commit guide

Improve the Ignoring a Commit guide


<%#
  Views that use this partial must supply the following variables:
  thread
  user
%>

<div id="commontator-thread-<%= thread.id %>-reply" class="reply">
  <% if thread.is_closed? %>

<%= t 'commontator.thread.status.cannot_post' %>

  <% elsif !user %>

<%= t 'commontator.require_login' %>.

  <% else %>
    <% if @commontator_new_comment.nil? %>
      <div id="commontator-thread-<%= thread.id %>-new-comment-link" class="new-comment">
        <%= link_to t('commontator.comment.actions.new'),
            commontator.new_thread_comment_path(thread),
            remote: true %>

    <% end %>

    <div id="commontator-thread-<%= thread.id %>-new-comment" class="new-comment<%=
    @commontator_new_comment.nil? ? ' commontator-hidden' : '' %>">
      <% unless @commontator_new_comment.nil? %>
        <%=
          render partial: 'commontator/comments/form', locals: {
            comment: @commontator_new_comment, thread: thread
          }
        %>
      <% end %>

  <% end %>

<%#
  Views that use this partial must supply the following variables:
  thread
  user
%>

<div id="commontator-thread-<%= thread.id %>-reply" class="reply">
  <% if thread.is_closed? %>

<%= t 'commontator.thread.status.cannot_post' %>

  <% elsif !user %>

<%= t 'commontator.require_login' %>

  <% else %>
    <% if @commontator_new_comment.nil? %>
      <div id="commontator-thread-<%= thread.id %>-new-comment-link" class="new-comment">
        <%= link_to t('commontator.comment.actions.new'),
            commontator.new_thread_comment_path(thread),
            remote: true %>

    <% end %>

    <div id="commontator-thread-<%= thread.id %>-new-comment" class="new-comment<%=
    @commontator_new_comment.nil? ? ' commontator-hidden' : '' %>">
      <% unless @commontator_new_comment.nil? %>
        <%=
          render partial: 'commontator/comments/form', locals: {
            comment: @commontator_new_comment, thread: thread
          }
        %>
      <% end %>

  <% end %>

Fix double . in require_login message

Fix double . in require_login message


Next Difficulty (estimate)

<%= number_with_delimiter(number_with_precision(@coin_info['data']['next_difficulty']['difficulty'], precision: 2), delimiter: ',') %>

<span class='<%= "text-#{@change_level}" %>'><%= number_with_precision(@coin_info['data']['next_difficulty']['perc'], precision: 2) %>% change to current

<%= number_with_delimiter(@coin_info['data']['next_difficulty']['retarget_in'], delimiter: ',') %> blocks until difficulty changes

Next Difficulty (estimate)

<%= number_with_delimiter(number_with_precision(@coin_info['data']['next_difficulty']['difficulty'], precision: 2), delimiter: ',') %>

<span class='<%= "text-#{@change_level}" %>'><%= "#{@coin_info['data']['next_difficulty']['perc'] > 0 ? '+' : ''}#{number_with_precision(@coin_info['data']['next_difficulty']['perc'], precision: 2)}" %>% change to current

<%= number_with_delimiter(@coin_info['data']['next_difficulty']['retarget_in'], delimiter: ',') %> blocks until difficulty changes

Add + to positive difficulty changes.

Add + to positive difficulty changes.


---
title: "Home"
kind: homepage
---

Hi, I'm David.

I build websites and have a ton of fun doing it.

		me@voxeldavid.com
		Twitter
		Github
		Gists

		Blog
		Work
		Site Archive

---
title: Home
kind: homepage
---

Hi, I'm David.

I build websites and have a ton of fun doing it.

		me@voxeldavid.com
		Twitter
		Github
		Gists

		Blog
		Work
		Site Archive

Edit frontmatter of home page

Edit frontmatter of home page


  <% if can?(:answer, question) && !question.poll.voted_in_booth?(current_user) %>
    <% question_answers.each do |question_answer| %>
      <% if already_answered?(question_answer) && !voted_before_sign_in? %>
        <span class="button answered"
              title="<%= t("poll_questions.show.voted", answer: question_answer.title) %>">
          <%= question_answer.title %>

      <% else %>
        <%= button_to answer_question_path(question, answer: question_answer.title),
                      remote: true,
                      title: t("poll_questions.show.vote_answer", answer: question_answer.title),
                      class: "button secondary hollow" do %>
          <%= question_answer.title %>
        <% end %>
      <% end %>
    <% end %>
  <% elsif !user_signed_in? %>
    <% question_answers.order(id: :desc).each do |question_answer| %>
      <%= link_to question_answer.title, new_user_session_path, class: "button secondary hollow" %>
    <% end %>
  <% elsif !current_user.level_two_or_three_verified? %>
    <% question_answers.order(id: :desc).each do |question_answer| %>
      <%= link_to question_answer.title, verification_path, class: "button secondary hollow" %>
    <% end %>
  <% else %>
    <% question_answers.order(id: :desc).each do |question_answer| %>
      <%= question_answer.title %>
    <% end %>
  <% end %>

  <% if can?(:answer, question) && !question.poll.voted_in_booth?(current_user) %>
    <% question_answers.each do |question_answer| %>
      <% if already_answered?(question_answer) && !voted_before_sign_in? %>
        <span class="button answered"
              title="<%= t("poll_questions.show.voted", answer: question_answer.title) %>">
          <%= question_answer.title %>

      <% else %>
        <%= button_to answer_question_path(question, answer: question_answer.title),
                      remote: true,
                      title: t("poll_questions.show.vote_answer", answer: question_answer.title),
                      class: "button secondary hollow" do %>
          <%= question_answer.title %>
        <% end %>
      <% end %>
    <% end %>
  <% elsif !user_signed_in? %>
    <% question_answers.each do |question_answer| %>
      <%= link_to question_answer.title, new_user_session_path, class: "button secondary hollow" %>
    <% end %>
  <% elsif !current_user.level_two_or_three_verified? %>
    <% question_answers.each do |question_answer| %>
      <%= link_to question_answer.title, verification_path, class: "button secondary hollow" %>
    <% end %>
  <% else %>
    <% question_answers.each do |question_answer| %>
      <%= question_answer.title %>
    <% end %>
  <% end %>

Use the same order criteria always

Use the same order criteria always

The relation of question with its questions answers is ordered by default by
`given_order`.


Записаться

<form action="/visit" method="POST" role="form">

    Ваше имя
    <input name="username" type="text" class="form-control"  placeholder="Введите ваше имя">

    Ваш телефон
    <input name="namber_phone" type="text" class="form-control"  placeholder="Введите ваш номер телефона">

    Время визита
    <input name="data_time" type="text" class="form-control"  placeholder="Введите время и дату">

  <button type="submit" class="btn btn-primary">Записаться</button>

</form>

Записаться

<form action="/visit" method="POST" role="form">

Выберать парикмахера из списка:

<select name="pregunta" required>
    <option></option>
    <option value="1">Walter White</option>
    <option value="2">Jessie Pinkman</option>
    <option value="3">Gus Fring</option>
   </select>

    Ваше имя
    <input name="username" type="text" class="form-control"  placeholder="Введите ваше имя">

    Ваш телефон
    <input name="namber_phone" type="text" class="form-control"  placeholder="Введите ваш номер телефона">

    Время визита
    <input name="data_time" type="text" class="form-control"  placeholder="Введите время и дату">

  <button type="submit" class="btn btn-primary">Записаться</button>

</form>

Add POST Form Visit List

Add POST Form Visit List


---
- scm:
    name: tagging-migration-verifier
    scm:
        - git:
            url: git@github.com:alphagov/tagging-migration-verifier.git
            branches:
              - master

- job:
    name: tagging-migration-verifier
    display-name: TaggingMigrationCheck
    project-type: freestyle
    description: "This job checks if taggings are in sync between contentapi and content-store"
    scm:
      - tagging-migration-verifier
    logrotate:
        artifactNumToKeep: 100
    triggers:
        - timed: '0 * * * *' # every hour
    builders:
        - shell: |
            bin/verify_migrated_apps
    publishers:
      - trigger-parameterized-builds:
        - project: Success_Passive_Check
          condition: 'SUCCESS'
          predefined-parameters: |
            NSCA_CHECK_DESCRIPTION=<%= @service_description -%>
            NSCA_OUTPUT=<%= @service_description -%> success
        - project: Failure_Passive_Check
          condition: 'FAILED'
          predefined-parameters: |
            NSCA_CHECK_DESCRIPTION=<%= @service_description -%>
            NSCA_OUTPUT=<%= @service_description -%> failed
    wrappers:
        - ansicolor:
            colormap: xterm

---
- scm:
    name: tagging-migration-verifier
    scm:
        - git:
            url: git@github.com:alphagov/tagging-migration-verifier.git
            branches:
              - master

- job:
    name: tagging-migration-verifier
    display-name: TaggingMigrationCheck
    project-type: freestyle
    description: "This job checks if taggings are in sync between contentapi and content-store"
    scm:
      - tagging-migration-verifier
    logrotate:
        artifactNumToKeep: 100
    triggers:
        - timed: '0 * * * *' # every hour
    builders:
        - shell: |
            bin/verify_migrated_apps
    publishers:
      - trigger-parameterized-builds:
        - project: Success_Passive_Check
          condition: 'SUCCESS'
          predefined-parameters: |
            NSCA_CHECK_DESCRIPTION=<%= @service_description %>
            NSCA_OUTPUT=<%= @service_description %> success
        - project: Failure_Passive_Check
          condition: 'FAILED'
          predefined-parameters: |
            NSCA_CHECK_DESCRIPTION=<%= @service_description %>
            NSCA_OUTPUT=<%= @service_description %> failed
    wrappers:
        - ansicolor:
            colormap: xterm

Remove the removal of white space.

Remove the removal of white space.

The parameters passed to the passive check jobs need to be on separate
lines for it to work properly. The - at the end of an erb statement
strips white space therefore removing the newline.


;
; DO NOT EDIT THIS FILE BY HAND!!
;
; This file is managed by Chef, using the bind-zone cookbook.
;
; All manual changes will be overwritten at next Chef run.
;

$ORIGIN <%= @resource.domain %>.

<%- @records.each do |record| -%>
  <%= record[:name] %>  <%= record[:ttl] %>  IN  <%= record[:type] %>  <%= record[:priority] %>  <%= record[:value] %>
<%- end -%>

Fix erroneous whitespace in db.zone.records.erb


$(document).ready(function(){

$('#vote-area').on("click", function(event) {

    var cookieVal = $.cookie("cookieValue");  //grab the cookie
    if( cookieVal === null ) {   //see if it is null
        $.cookie( 'cookieValue', '0');  //set default value
        cookieVal = 0;  //set the value to zero
    };
    var cookieValue = parseInt(cookieVal,10);  //convert it to number

        cookieValue++;  //increment the value
        console.log(cookieValue);
        $.cookie("cookieValue", cookieValue); //save new value

    if (cookieValue === 10) {
      console.log(cookieValue);
        $.cookie("cookieValue", cookieValue, {expires: 1, path: '/'});

        $('#modal-explain').css('display', 'block');

        event.preventDefault();
        event.stopPropagation();

        $('.close').on("click", function(event) {
          $('#modal-explain').css('display', 'none');
        });
    };
});

});

$(document).ready(function(){
  if($('#login').is(':visible') || $('#login').is(':hidden')) {

      $('#vote-area').on("click", function(event) {

          var cookieVal = $.cookie("cookieValue");  //grab the cookie
          if( cookieVal === null ) {   //see if it is null
              $.cookie( 'cookieValue', '0');  //set default value
              cookieVal = 0;  //set the value to zero
          };
          var cookieValue = parseInt(cookieVal,10);  //convert it to number

              cookieValue++;  //increment the value
              console.log(cookieValue);
              $.cookie("cookieValue", cookieValue); //save new value

          if (cookieValue === 10) {
            console.log(cookieValue);
              $.cookie("cookieValue", cookieValue, {expires: 1, path: '/'});

              $('#modal-explain').css('display', 'block');

              event.stopPropagation();

              $('.close').on("click", function(event) {
                $('#modal-explain').css('display', 'none');
              });
          };
      });
  };
});

Make a working cookies counter.

Make a working cookies counter.


  <%= f.inputs "Contacts" do %>
    <%= f.input :department, :label => "Writing team", :input_html => { :disabled => f.object.persisted?, :class => "input-md-10"} %>
    <%= f.input :fact_checkers, :input_html => { :disabled => f.object.persisted?, :class => "input-md-10"} %>
  <% end %>

  <%= f.inputs "Contacts" do %>
    <%= f.input :fact_checkers, :input_html => { :disabled => f.object.persisted?, :class => "input-md-10"} %>
  <% end %>

Remove the "Writing team" field

Remove the "Writing team" field

This was originally used to assign work to a team but hasn't been used in
years. Additionally, it's being saved and displayed elsewhere as "Department",
so is confusing.


 New Listing

View All Listings

My Donations

My Requests

<% if current_user %>

        <%= link_to new_listing_path do %>

        <%= content_tag(:i, "", :class => "fa fa-plus fa-lg") %>
        New Listing
        <% end %>

        <%= link_to "View All Listings", listings_path %>

        <%= link_to "My Donations", user_donations_path(current_user) %>

        <%= link_to "My Requests", user_requests_path(current_user) %>

<% end %>

Replace stubs in Listing nav menu with live data

 - Link navigation tabs to Listing controller actions
 - Hide nav menu from guest users, default to seeing only Listing#index
 - Add Font Awesome plus-sign icon to New Listing tab to differentiate clear call to action from review tabs


<%= back_link_to admin_valuators_path %>

<%= link_to t("admin.actions.edit"), edit_admin_valuator_path(@valuator), class: "button hollow float-right" %>

<%= @valuator.name %>

    <%= t("admin.valuators.show.email") %>

    <%= @valuator.email %>

    <%= t("admin.valuators.show.description") %>

    <% if @valuator.description.present? %>
      <%= @valuator.description %>
    <% else %>
      <%= t("admin.valuators.show.no_description") %>
    <% end %>

    <%= t("admin.valuators.show.group") %>

    <% if @valuator.valuator_group.present? %>
      <%= @valuator.valuator_group.try(:name) %>
    <% else %>
      <%= t("admin.valuators.show.no_group") %>
    <% end %>

    <%= t("admin.valuators.show.abilities") %>

    <% if valuator_abilities(@valuator).present? %>
      <%= valuator_abilities(@valuator) %>
    <% else %>
      <%= t("admin.valuators.show.no_abilities") %>
    <% end %>

<%= back_link_to admin_valuators_path %>

<%= link_to t("admin.actions.edit"), edit_admin_valuator_path(@valuator), class: "button hollow float-right" %>

<%= @valuator.name %>

    <%= t("admin.valuators.show.email") %>

    <%= @valuator.email %>

    <%= t("admin.valuators.show.description") %>

    <%= @valuator.description.presence || t("admin.valuators.show.no_description") %>

    <%= t("admin.valuators.show.group") %>

    <%= @valuator.valuator_group&.name || t("admin.valuators.show.no_group") %>

    <%= t("admin.valuators.show.abilities") %>

    <%= valuator_abilities(@valuator).presence || t("admin.valuators.show.no_abilities") %>

Use `presence` to simplify code

Use `presence` to simplify code


<% if role.organisations %>
  <div class="organisations-list <%= direction_rtl_class %>" <%= dir_attribute %> <%= lang_attribute %>>
    Organisations:
    <%= role.organisations.map { |organisation| link_to(organisation['title'], sanitize(organisation['base_path']), class: "govuk-link") }.to_sentence %>

<% end %>

<% if role.organisations %>
  <div class="organisations-list <%= direction_rtl_class %>" <%= dir_attribute %> <%= lang_attribute %>>
    Organisations:
    <%= to_sentence(role.organisations.map { |organisation| link_to(organisation['title'], organisation['base_path'], class: "govuk-link") }) %>

<% end %>

Fix raw HTML output for organisations

Fix raw HTML output for organisations

In an attempt to fix a brakeman failure in https://github.com/alphagov/collections/commit/a8fb322737525b9468c89cea84bf53d8e85b1ad4 I did not realised that the organisation would end up rendered as HTML


		<%= simple_form_for(@upload, :html => {:multipart => true, :class => 'form-horizontal' }) do |f| %>

			<%= panel_tag('File', {:icon => 'fa fa-upload', :class => "span8 offset2"}) do %>
				<%= f.association :organization, :label_method => 'coded_name' if current_user.has_role? :admin %>
				<%= f.input :file, :label => 'Spreadsheet' %>
				<%= f.association :file_content_type, :label => 'Spreadsheet content' %>
				<%= f.input :force_update %>

					<%= f.button :submit %>
					<%= submit_tag 'Cancel', :name => 'cancel', :class=>"btn" %>

			<% end %>

		 <% end %>

		<%= simple_form_for(@upload, :html => {:multipart => true, :class => 'form-horizontal' }) do |f| %>

			<%= panel_tag('File', {:icon => 'fa fa-upload', :class => "span8 offset2"}) do %>
				<%= f.input :file, :label => 'Spreadsheet' %>
				<%= f.association :file_content_type, :label => 'Spreadsheet content' %>
				<%= f.input :force_update %>

					<%= f.button :submit %>
					<%= submit_tag 'Cancel', :name => 'cancel', :class=>"btn" %>

			<% end %>

		 <% end %>

Remove org list from upload form

Remove org list from upload form


  Filename: <%= photo.image.filename  %>

  Time: <%= l(photo.taken_at, :format => :long_tz) if(photo.taken_at) %>

  Latitude: <%= photo.latitude_rounded %>

  Longitude: <%= photo.longitude_rounded %>

  Altitude: <%= photo.altitude_feet %><%= "ft" if(photo.altitude_feet) %>

  Direction: <%= photo.image_direction_heading %>

  Filename: <%= photo.image.file.filename  %>

  Time: <%= l(photo.taken_at, :format => :long_tz) if(photo.taken_at) %>

  Latitude: <%= photo.latitude_rounded %>

  Longitude: <%= photo.longitude_rounded %>

  Altitude: <%= photo.altitude_feet %><%= "ft" if(photo.altitude_feet) %>

  Direction: <%= photo.image_direction_heading %>

Fix missing filenames after carrierwave upgrade.


The more descriptive information you provide the better we can serve your needs.

            * required

          <% f.object.primary_terms.each do |term| %>
            <%= render_edit_field_partial(term, f: f) %>
          <% end %>

          <%= render 'form_media', f: f %>
          <% f.object.secondary_terms.each do |term| %>
            <%= render_edit_field_partial(term, f: f) %>
          <% end %>

The more descriptive information you provide the better we can serve your needs.

            * required

          <% f.object.primary_terms.each do |term| %>
            <%= render_edit_field_partial(term, f: f) %>
          <% end %>

          <% f.object.secondary_terms.each do |term| %>
            <%= render_edit_field_partial(term, f: f) %>
          <% end %>
          <%= render 'form_media', f: f %>

Move representitive media section to the bottom of the form


            <form action="/projects" method="GET">

Search Projects

                    <input id="query" name="query" type="text" placeholder="e.g. location, sector, organisation or keyword" value="">

                <input type="submit" value="Search" class="button">
            </form>

            <form action="/search" method="GET">

Search Projects

                    <input id="query" name="query" type="text" placeholder="e.g. location, sector, organisation or keyword" value="">

                <input type="submit" value="Search" class="button">
            </form>

Set search to point to Search module

Set search to point to Search module


<% provide(:title, 'Current Board') %>

<%= yield(:title) %>

    <% @board_members.each do |board_member| %>

          <%= image_tag board_member.photo_url, alt: "Photo of #{ board_member.name }", class: 'img-rounded board-photo img-responsive' %>

Name

<%= board_member.name %>

Board Position

<%= board_member.position %>

Bio

<%= board_member.bio %>

<%= mail_to board_member.email, "Email #{ board_member.name.split(' ')[0] }" %>

    <% end %>

<%= render 'layouts/footer' %>

<% provide(:title, 'Current Board') %>
<% provide(:jumbotron_class, 'jumbotron-about') %>

<%= render 'layouts/jumbotron' %>

    <% @board_members.each do |board_member| %>

          <%= image_tag board_member.photo_url, alt: "Photo of #{ board_member.name }", class: 'img-rounded board-photo img-responsive' %>

Name

<%= board_member.name %>

Board Position

<%= board_member.position %>

Bio

<%= board_member.bio %>

<%= mail_to board_member.email, "Email #{ board_member.name.split(' ')[0] }" %>

    <% end %>

<%= render 'layouts/footer' %>

Add jumbotron partial to Current Board page


<%=t('.projects')%>

          <% current_user.projects.each do |project|%>

              <%= link_to project.title, project, class: "btn btn-default btn-block" %>

          <%end%>

Design(dashboard): Decrease vertical space between 'My Projects' buttons


Log in

<%= devise_error_messages! %>

<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

    <%= f.input :email, required: false, autofocus: true %>
    <%= f.input :password, required: false %>
    <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %>

    <%= f.button :submit, "Log in" %>

<% end %>

<%= render "devise/shared/links" %>

Log in

<%= devise_error_messages! %>

<%= simple_form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>

    <%= f.input :email, required: false, autofocus: true %>
    <%= f.input :password, required: false %>
    <%= f.input :remember_me, as: :boolean if devise_mapping.rememberable? %>

    <%= f.button :submit, "Log in" %>

<% end %>

Don't have an account? <%= link_to "Sign up now!", new_user_registration_path %>

Remove devise links partial from login view


<%= notice %>

Available housing forms

    Name
    Uri

<% @housing_forms.each do |housing_form| %>

    <%= housing_form.name %>
    <%= housing_form.uri %>
    <%= link_to 'Show', housing_form %>
    <%= link_to 'Edit', edit_housing_form_path(housing_form) %>
    <%= link_to 'Destroy', housing_form, method: :delete, data: { confirm: 'Are you sure?' } %>
    <%= button_to 'Add to cart', line_items_path(housing_form_id: housing_form) %>

<% end %>

<%= link_to 'New Housing form', new_housing_form_path %>

<%= notice %>

Available housing forms

<% @housing_forms.each do |housing_form| %>

    <%= housing_form.name %>
    <%= button_to 'Add to cart', line_items_path(housing_form_id: housing_form) %>

<% end %>

Remove clutter from the housing forms views

Housing forms aren't really editable yet in any useful way, so the I'm hiding
the create/show/edit/destroy links from the housing forms index.

Also hiding the URI, because the hypothetical user probably isn't interested in
seeing that on this screen.


<!DOCTYPE html>
<html>
<head>
  <title>Boilerplate</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<%= yield %>

</body>
</html>

<!DOCTYPE html>

  <title>Boilerplate</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>

  <% if notice %>

<%= notice %>

  <% end %>
  <% if alert %>

<%= alert %>

  <% end %>

  <%= yield %>

Add notice and alert to the base layout.

Signed-off-by: Siddharth Kannan <805f056820c7a1cecc4ab591b8a0a604b501a0b7@gmail.com>


<% content_for :head do %>
  <%= stylesheet_link_tag "application", :media => "all" %>
  <%= javascript_include_tag 'application' %>
  <%= csrf_meta_tags %>
<% end %>

<% content_for :page_title, "Specialist Publisher" %>
<% content_for :app_title, "GOV.UK Specialist Publisher" %>

<% content_for :navbar_items do %>

<% end %>

<% content_for :content do %>

  <%= yield %>
  <script>
    $(document).ready(function() {
      <%= yield :document_ready %>
    });
  </script>
<% end %>

<%# use the govuk_admin_foundation layout %>
<%= render :template => 'layouts/govuk_admin_template' %>

<% content_for :head do %>
  <%= stylesheet_link_tag "application", :media => "all" %>
  <%= javascript_include_tag 'application' %>
  <%= csrf_meta_tags %>
<% end %>

<% content_for :page_title, "Specialist Publisher" %>
<% content_for :app_title, "GOV.UK Specialist Publisher" %>

<% content_for :navbar_items do %>
  <% if current_user.gds_editor? %>

          <%= current_format.title.pluralize %>

  <% end %>

  <% formats_user_can_access.each do |key, value| %>

<%= link_to value.title.pluralize, documents_path(key) %>

  <% end %>

  <% if current_user.gds_editor? %>

  <% end %>
<% end %>

<% content_for :content do %>

  <%= yield %>

<% end %>

<%# use the govuk_admin_foundation layout %>
<%= render :template => 'layouts/govuk_admin_template' %>

Add a Finder navigation to the Header

Add a Finder navigation to the Header

If the User has the `gds_editor` permission it will render in a
dropdown, otherwise it will be rendered as a list of nav items.


	<%= simple_form_for(@organization, :html => {:class => 'form-vertical span12' }, :defaults => {:disabled => @disabled }) do |f| %>

			<%= panel_tag('Corporate', {:icon => 'fa fa-book', :class => "span6 form_part"}) do %>
				<%= f.input :name %>
				<%= f.input :short_name %>
				<%= f.association :organization_type %>
				<%= f.association :district %>
				<%= f.input :external_id, :placeholder => "External id..." %>
			<% end %>
			<%= panel_tag('Contact', {:icon => 'fa fa-book', :class => "span6 form_part"}) do %>
				<%= f.input :phone, :as => :tel %>
				<%= f.input :fax, :as => :tel %>
				<%= f.input :address1 %>
				<%= f.input :address2 %>
				<%= f.input :city %>
				<%= f.input :state %>
				<%= f.input :zip %>
				<%= f.input :url, :as => :url %>
			<% end %>

	<% if ! @disabled %>

		<%= f.button :submit %>
		<%= submit_tag 'Cancel', :name => 'cancel', :class=>"btn" %>

	<% end %>
	<% end %>

	<%= simple_form_for(@organization, :html => {:class => 'form-vertical span12' }, :defaults => {:disabled => @disabled }) do |f| %>

			<%= panel_tag('Corporate', {:icon => 'fa fa-book', :class => "span6 form_part"}) do %>
				<%= f.input :name %>
				<%= f.input :short_name %>
				<%= f.association :organization_type %>
				<%= f.association :district %>
				<%= f.input :external_id, :placeholder => "External id..." %>
			<% end %>
			<%= panel_tag('Contact', {:icon => 'fa fa-book', :class => "span6 form_part"}) do %>
				<%= f.input :phone, :as => :tel %>
				<%= f.input :fax, :as => :tel %>
				<%= f.input :address1 %>
				<%= f.input :address2 %>
				<%= f.input :city %>
				<%= f.input :state, :as => :select, :collection => Country['US'].states %>
				<%= f.input :zip %>
				<%= f.input :url, :as => :url %>
			<% end %>

	<% if ! @disabled %>

		<%= f.button :submit %>
		<%= submit_tag 'Cancel', :name => 'cancel', :class=>"btn" %>

	<% end %>
	<% end %>

Swap state input for select box

Swap state input for select box


Users

<% User.where.not(username: "root").each do |user| %>

<%= link_to user.screen, "/users/#{user.username}" %>

  <% about = get_about_on(user) %>
  <% if about != nil %>
    <%= raw(convert_to_markdown(about.body)) %>
  <% end %>
<% end %>

Users

<% User.where.not(username: "root").order(:screen).each do |user| %>

<%= link_to user.screen, "/users/#{user.username}" %>

  <% about = get_about_on(user) %>
  <% if about != nil %>
    <%= raw(convert_to_markdown(about.body)) %>
  <% end %>
<% end %>

Sort users by screen name in about page

Sort users by screen name in about page


[user]
  name = <%= print("Your Name: "); STDOUT.flush; STDIN.gets.chomp %>
  email = <%= print("Your Email: "); STDOUT.flush; STDIN.gets.chomp %>
[color]
  ui = auto
[core]
  excludesfile = <%= ENV['HOME'] %>/.gitignore
  editor = subl -w
[apply]
  whitespace = nowarn
[branch]
  autosetuprebase = always
[grep]
  lineNumber = true
[log]
  date = relative
  decorate = short
[merge]
  ff = false
[github]
  user = <%= print("GitHub Username: "); STDOUT.flush; STDIN.gets.chomp %>
[credential]
  helper = osxkeychain
[help]
  autocorrect = 1
[alias]
  ignore = update-index --assume-unchanged
  unignore = update-index --no-assume-unchanged
  ignored = !git ls-files -v | grep "^[[:lower:]]"
  standup = !"git log --reverse --branches --since=$(if [[ "Mon" == "$(date +%a)" ]]; then echo "last friday"; else echo "yesterday"; fi) --author=$(git config --get user.email) --format=format:'%C(cyan) %ad %C(yellow)%h %Creset %s %Cgreen%d' --date=local"
  lg = !"git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

[user]
  name = <%= print("Your Name: "); STDOUT.flush; STDIN.gets.chomp %>
  email = <%= print("Your Email: "); STDOUT.flush; STDIN.gets.chomp %>
[color]
  ui = auto
[core]
  excludesfile = <%= ENV['HOME'] %>/.gitignore
  editor = atom --wait
[apply]
  whitespace = nowarn
[branch]
  autosetuprebase = always
[grep]
  lineNumber = true
[log]
  date = relative
  decorate = short
[merge]
  ff = false
[github]
  user = <%= print("GitHub Username: "); STDOUT.flush; STDIN.gets.chomp %>
[credential]
  helper = osxkeychain
[help]
  autocorrect = 1
[alias]
  ignore = update-index --assume-unchanged
  unignore = update-index --no-assume-unchanged
  ignored = !git ls-files -v | grep "^[[:lower:]]"
  standup = !"git log --reverse --branches --since=$(if [[ "Mon" == "$(date +%a)" ]]; then echo "last friday"; else echo "yesterday"; fi) --author=$(git config --get user.email) --format=format:'%C(cyan) %ad %C(yellow)%h %Creset %s %Cgreen%d' --date=local"
  lg = !"git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Add atom as default commit editor

Add atom as default commit editor


---
driver_plugin: vagrant
driver_config:
  require_chef_omnibus: true

platforms:
- name: ubuntu-14.04

suites:
- name: default
  run_list:
  - recipe[<%= cookbook_name %>]

---
driver_plugin: vagrant

platforms:
- name: ubuntu-14.04

suites:
- name: default
  run_list:
  - recipe[<%= cookbook_name %>]

Remove parameter, because this is set by default


state_file: /store/planet/replication/changesets/state.yaml
db: host=<%= node[:web][:database_host] %> dbname=openstreetmap user=planetdiff password=<%= @password %>
data_dir: /store/planet/replication/changesets
lock_file: /run/lock/replication/changesets.lock

state_file: /store/planet/replication/changesets/state.yaml
db: host=<%= node[:web][:database_host] %> dbname=openstreetmap user=planetdiff password=<%= @password %>
data_dir: /store/planet/replication/changesets
lock_file: /run/replication/changesets.lock

Correct path to lock directory

Correct path to lock directory

Closes #368


<%= error_messages_for :user %>

  Fill out the form below with your details so we can get you started.

<% form_for :user, :url => users_path do |f| -%>

    <%= f.label :login %>
    <%= f.text_field :login %>

    <%= f.label :email %>
    <%= f.text_field :email %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>

  <% if just_installed? %>
    <% Refinery::Plugins.registered.titles.each do |plugin| %>
      <%= hidden_field_tag 'user[plugins][]', plugin, :id => "plugins_#{plugin.downcase.gsub(" ", "_")}"  %>
    <% end %>
  <% end %>

<%= submit_tag 'Sign up' %>

<% end -%>

<%= error_messages_for :user %>

  Fill out the form below with your details so we can get you started.

<% form_for :user, :url => users_path do |f| -%>

    <%= f.label :login %>
    <%= f.text_field :login %>

    <%= f.label :email %>
    <%= f.text_field :email %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>

  <% if just_installed? %>
    <% @available_plugins = Refinery::Plugins.registered.in_menu.titles.sort.each do |plugin| -%>
      <%= hidden_field_tag 'user[plugins][]', plugin, :id => "plugins_#{plugin.downcase.gsub(" ", "_")}" %>
    <% end -%>
  <% end -%>

<%= submit_tag 'Sign up' %>

<% end -%>

Improve positioning of plugins on initial user create


---
- scm:
    name: govuk-saas-config-repo
    scm:
        - git:
            url: git@github.com:alphagov/govuk-saas-config.git
            branches:
              - master

- job:
    name: configure-github-repos
    display-name: Configure GitHub repos
    project-type: freestyle
    description: "Configures GitHub repos with correct settings, branch protection and webhooks"
    scm:
      - govuk-saas-config-repo
    logrotate:
        numToKeep: 250
    triggers:
        - timed: '0 8 * * *' # 8PM every day
    builders:
        - shell: |
            cd github
            bundle install --path "${HOME}/bundles/${JOB_NAME}" --deployment
            bundle exec rake configure_repos
    wrappers:
      - ansicolor:
          colormap: xterm
      - inject-passwords:
          global: false
          mask-password-params: true
          job-passwords:
            - name: GITHUB_TOKEN
              password:
                '<%= @github_token %>'

---
- scm:
    name: govuk-saas-config-repo
    scm:
        - git:
            url: git@github.com:alphagov/govuk-saas-config.git
            branches:
              - master

- job:
    name: configure-github-repos
    display-name: Configure GitHub repos
    project-type: freestyle
    description: "Configures GitHub repos with correct settings, branch protection and webhooks"
    scm:
      - govuk-saas-config-repo
    logrotate:
        numToKeep: 250
    triggers:
        - timed: '0 8 * * *' # 8PM every day
    builders:
        - shell: |
            bundle install --path "${HOME}/bundles/${JOB_NAME}" --deployment
            bundle exec rake github:configure_repos
    wrappers:
      - ansicolor:
          colormap: xterm
      - inject-passwords:
          global: false
          mask-password-params: true
          job-passwords:
            - name: GITHUB_TOKEN
              password:
                '<%= @github_token %>'

Update script to run govuk-saas-config for GitHub

This was changed in
https://github.com/alphagov/govuk-saas-config/pull/7.


<!DOCTYPE html>

  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>

Dear <%= @to_name %>:

Your dataset “<%= @title %>”
  (<%= link_to(@identifier_uri, @identifier_uri)%>)
  has been successfully updated. There may be a brief delay for processing
  before the dataset is available.

<% if @embargo_date %>
  The public will not be able to download this dataset until the embargo you set on it
  expires on <%= @embargo_date.strftime("%B %e, %Y") %>.
<% end %>

  To see the status of your dataset, visit your
  <%= link_to 'My Datasets', url_for(host: @host, protocol: 'https', controller: 'stash_engine/dashboard', action: 'show') %>
  page. If you have questions or concerns, please visit the
  <%= link_to 'help page', url_for(host: @host, protocol: 'https', controller: 'stash_engine/pages', action: 'help') %>.

Please do not reply to this email.

<!DOCTYPE html>

  <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>

Dear <%= @to_name %>:

Your dataset “<%= @title %>”
  (<%= link_to(@identifier_uri, @identifier_uri)%>)
  has been successfully submitted. There may be a brief delay for processing
  before the dataset is available.

<% if @embargo_date %>
  The public will not be able to download this dataset until the embargo you set on it
  expires on <%= @embargo_date.strftime("%B %e, %Y") %>.
<% end %>

  To see the status of your dataset, visit your
  <%= link_to 'My Datasets', url_for(host: @host, protocol: 'https', controller: 'stash_engine/dashboard', action: 'show') %>
  page. If you have questions or concerns, please visit the
  <%= link_to 'help page', url_for(host: @host, protocol: 'https', controller: 'stash_engine/pages', action: 'help') %>.

Please do not reply to this email.

Fix wording to be generic for creates/updates


---
layout: dictionary_layout
title: Dictionary
source_url: https://github.com/alphagov/govuk-developers/blob/master/source/dictionary.html.md.erb
edit_url: https://github.com/alphagov/govuk-developers/edit/master/source/dictionary.html.md.erb
---

(Originally from [the Wiki](https://gov-uk.atlassian.net/wiki/display/TECH/Publishing+Platform))

<% data.dictionary.each do |entry| %>

    <h2 id=<%="#{entry.word.parameterize}"%>-definition>
      <%= entry.word %>

    Synonyms: <%= entry.synonyms %>

<%= entry.description %>

<% end %>

---
layout: dictionary_layout
title: Dictionary
source_url: https://github.com/alphagov/govuk-developer-docs/blob/master/data/dictionary.yml
edit_url: https://github.com/alphagov/govuk-developer-docs/edit/master/data/dictionary.yml
---

(Originally from [the Wiki](https://gov-uk.atlassian.net/wiki/display/TECH/Publishing+Platform))

<% data.dictionary.each do |entry| %>

    <h2 id=<%="#{entry.word.parameterize}"%>-definition>
      <%= entry.word %>

    Synonyms: <%= entry.synonyms %>

<%= entry.description %>

<% end %>

Change the urls for viewing and editing the dictionary source

These should point at the YAML file that contains the dictionary
content instead of the source file for the dictionary page.


<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', <%= settings.google_analytics_id %> ]);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>

<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', '<%= settings.google_analytics_id %>' ]);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>

Fix Google Analytics site key

Fix Google Analytics site key


# This file was generated by Chef
# Do NOT modify this file by hand.

[<%= @config.repo_name %>]
<% %w{ type enabled autorefresh gpgcheck gpgkey baseurl mirrorlist path priority keeppackages mode refresh_cache }.each do |prop| -%>
<%  next if @config.send(prop.to_sym).nil? -%>
<%= prop %>=<%=
       case @config.send(prop.to_sym)
       when TrueClass
         '1'
       when FalseClass
         '0'
       else
         @config.send(prop.to_sym)
       end %>
<% end -%>
name=<%= @config.description || @config.repo_name %>

# This file was generated by Chef Infra
# Do NOT modify this file by hand.

[<%= @config.repo_name %>]
<% %w{ type enabled autorefresh gpgcheck gpgkey baseurl mirrorlist path priority keeppackages mode refresh_cache }.each do |prop| -%>
<%  next if @config.send(prop.to_sym).nil? || (@config.send(prop.to_sym).is_a?(Array) && @config.send(prop.to_sym).empty?) -%>
<%= prop %>=<%=
       case @config.send(prop.to_sym)
       when TrueClass
         '1'
       when FalseClass
         '0'
       when Array
         @config.send(prop.to_sym).join("\n       ")
       else
         @config.send(prop.to_sym)
       end %>
<% end -%>
name=<%= @config.description || @config.repo_name %>

Handle arrays in the zypper repo template

Signed-off-by: Tim Smith <764ef62106582a09ed09dfa0b6bff7c05fd7d1e4@chef.io>


---
- scm:
    name: smokey_Smokey_Deploy
    scm:
        - git:
            url: git@github.com:alphagov/smokey.git
            branches:
              - main

- job:
    name: Smokey_Deploy
    display-name: Smokey_Deploy
    project-type: freestyle
    properties:
        - build-discarder:
            days-to-keep: 30
            artifact-num-to-keep: 5
        - github:
            url: https://github.com/alphagov/smokey/
    scm:
      - smokey_Smokey_Deploy
    builders:
        - shell: |
            export DEPLOY_TO=$(govuk_node_list -c monitoring)
            sh -x deploy.sh
        - trigger-builds:
            - project: Deploy_Smokey_Downstream
    triggers:
        - timed: |
            TZ=Europe/London
            H 9 * * *

Remove scheduled daily deploy of Smokey

Remove scheduled daily deploy of Smokey

We've now made it so that merging a Smokey PR will trigger a deploy of Smokey
so we don't need this anymore.


About

    <% %i(
      first_name
      middle_name
      last_name
      cell_phone
      home_phone
      work_phone
      email
    ).each do |person_attribute| %>
      <%= builder.text_field person_attribute %>
    <% end %>
    <%= builder.text_field :ssn, label: "Social Security Number" %>

Address

    <%= builder.fields_for :residence do |residence_builder| %>
      <%= residence_builder.text_field :street, label: "Street Address" %>
      <%= residence_builder.text_field :city %>
      <%= residence_builder.text_field :state %>
      <%= residence_builder.text_field :zip, label: "Zip Code" %>
    <% end %>

Demographic

    <%= builder.text_field :dob, label: "Date of Birth" %>
    <% %i(
      gender
      race
      citizenship
      nationality
      student_status
      marital_status
      occupation
    ).each do |person_attribute| %>
      <%= builder.text_field person_attribute %>
    <% end %>

<%= builder.check_box :_destroy %>
<%= builder.label :_destroy, "Remove person" %>

<%= builder.check_box :_destroy, label: "Remove person" %>

About

    <% %i(
      first_name
      middle_name
      last_name
      cell_phone
      home_phone
      work_phone
      email
    ).each do |person_attribute| %>
      <%= builder.text_field person_attribute %>
    <% end %>
    <%= builder.text_field :ssn, label: "Social Security Number" %>

Address

    <%= builder.fields_for :residence do |residence_builder| %>
      <%= residence_builder.text_field :street, label: "Street Address" %>
      <%= residence_builder.text_field :city %>
      <%= residence_builder.text_field :state %>
      <%= residence_builder.text_field :zip, label: "Zip Code" %>
    <% end %>

Demographic

    <%= builder.text_field :dob, label: "Date of Birth" %>
    <% %i(
      gender
      race
      citizenship
      nationality
      student_status
      marital_status
      occupation
    ).each do |person_attribute| %>
      <%= builder.text_field person_attribute %>
    <% end %>

Move "Remove person" checkbox to the top of each person

Fixes #54


<%= form_tag admin_topic_search_path, method: :get, remote: params[:controller] == 'topics', class: 'admin-search submit-loader form-inline form-horizontal', id: 'search-form' do %>

      <%= text_field_tag('q', nil, placeholder: t(:search, default: 'Search'), value: params[:q], class: 'form-control search-field', style: "width: 100%;" )%>

        <%= text_field_tag :start_date, nil, class: 'form-control' %>

        <%= text_field_tag :end_date, nil, class: 'form-control' %>

      <%= submit_tag t('search', default: 'Search'), class: 'btn btn-default' %>

<% end %>

Fix breakpoints on search form

Fix breakpoints on search form


<%= link_to admin_poll_officer_assignments_path(@poll) do %>

  <%= @poll.name %>
<% end %>

<%= @officer.name %> - <%= @officer.email %>

<% if @officer_assignments.empty? %>

    <%= t("admin.poll_officer_assignments.by_officer.no_assignments") %>

<% else %>

<%= t("admin.poll_officer_assignments.by_officer.assignments") %>

        <%= t("admin.poll_officer_assignments.by_officer.date") %>
        <%= t("admin.poll_officer_assignments.by_officer.booth") %>

      <% @officer_assignments.each do |officer_assignment| %>
        <tr id="<%= dom_id officer_assignment %>">
          <%= officer_assignment.final? ? t('polls.final_date') : l(officer_assignment.date.to_date) %>
          <%= booth_name_with_location(officer_assignment.booth_assignment.booth) %>

      <% end %>

<% end %>

<%= link_to admin_poll_officer_assignments_path(@poll) do %>

  <%= @poll.name %>
<% end %>

<%= @officer.name %> - <%= @officer.email %>

<% if @officer_assignments.empty? %>

    <%= t("admin.poll_officer_assignments.by_officer.no_assignments") %>

<% else %>

<%= t("admin.poll_officer_assignments.by_officer.assignments") %>

        <%= t("admin.poll_officer_assignments.by_officer.date") %>
        <%= t("admin.poll_officer_assignments.by_officer.booth") %>

      <% @officer_assignments.each do |officer_assignment| %>
        <tr id="<%= dom_id officer_assignment %>">
          <%= l(officer_assignment.date.to_date)%> <%= content_tag :strong, t('polls.final_date') if officer_assignment.final %>
          <%= booth_name_with_location(officer_assignment.booth_assignment.booth) %>

      <% end %>

<% end %>

Add date on officer assignment list for final shifts


    <%= f.field_container :quantity do %>
      <%= f.label :quantity, t(:quantity) %>
      <%= f.text_field :quantity, :class => 'fullwidth' %>
    <% end %>
    <%= f.field_container :action do %>
      <%= f.label :action, t(:action) %>
      <%= f.select :action, options_for_select(allowed_actions) %>
    <% end %>
    <%= f.field_container :stock_item_id do %>
      <%= f.label :stock_item_id, t(:stock_item_id) %>
      <%= collection_select 'stock_movement', 'stock_item_id', @stock_location.stock_items, :id, :variant_name,
        { selected: @stock_movement.stock_item_id }, :class => 'select2 fullwidth' %>
    <% end %>

    <%= f.field_container :quantity do %>
      <%= f.label :quantity, t(:quantity) %>
      <%= f.text_field :quantity, :class => 'fullwidth' %>
    <% end %>
    <%= f.field_container :action do %>
      <%= f.label :action, t(:action) %>
      <%= collection_select 'stock_movement', 'action', allowed_actions, :to_s, :to_s,
        { selected: @stock_movement.action }, class: 'select2 fullwidth' %>
    <% end %>
    <%= f.field_container :stock_item_id do %>
      <%= f.label :stock_item_id, t(:stock_item_id) %>
      <%= collection_select 'stock_movement', 'stock_item_id', @stock_location.stock_items, :id, :variant_name,
        { selected: @stock_movement.stock_item_id }, class: 'select2 fullwidth' %>
    <% end %>

Use select2 for all stock movement dropdowns


<%= sticker.variant.name %>

    <%= sticker.variant.sku %>
    <%= sticker.variant.display_price %>

    <img src="<%= sticker.barcode_path %>" height="40" width="132"/>

<%= sticker.variant.name.truncate(27,omission: '') %>

    <%= sticker.variant.sku %>
    <%= sticker.variant.display_price %>

    <img src="<%= sticker.barcode_path %>" height="40" width="132"/>

Fix text and stickers for apli ref 01286


Set `USER` for munged to avoid failing on el6

The init script provided with munge-0.5.10-1.el6 sets the `USER=daemon`
environment variable and subsequently loads the variables in sysconfig so we can
use this to userride the default value.


# Puma configuration for: <% c = Capistrano::BaseHelper::get_capistrano_instance %>
# <%= "#{c.fetch(:application)} running as #{c.fetch(:user)} in environment #{Capistrano::BaseHelper.environment}" %>
workers <%= c.fetch(:puma_workers) %>
threads <%= c.fetch(:puma_min_threads) %>, <%= c.fetch(:puma_max_threads) %>
bind '<%= c.fetch(:puma_socket_url) %>'
pidfile '<%= c.fetch(:puma_pid_file) %>'
state_path '<%= c.fetch(:puma_state_file) %>'
environment '<%= "#{Capistrano::BaseHelper.environment}" %>'
<%= "activate_control_app '#{c.fetch(:puma_control_url)}'" if c.fetch(:puma_activate_control_app) %>

# Must preload application in case there are errors, if not, infinite restarts will happen
preload_app!

# TODO - fix restart block!
# <%= "on_restart do"              if c.fetch(:puma_on_restart_active) %>
# <%= "  puts \"Restarting puma\"" if c.fetch(:puma_on_restart_active) %>
# <%= "end"                        if c.fetch(:puma_on_restart_active) %>

# Puma configuration for: <% c = Capistrano::BaseHelper::get_capistrano_instance %>
# <%= "#{c.fetch(:application)} running as #{c.fetch(:user)} in environment #{Capistrano::BaseHelper.environment}" %>
workers <%= c.fetch(:puma_workers) %>
threads <%= c.fetch(:puma_min_threads) %>, <%= c.fetch(:puma_max_threads) %>
bind '<%= c.fetch(:puma_socket_url) %>'
pidfile '<%= c.fetch(:puma_pid_file) %>'
state_path '<%= c.fetch(:puma_state_file) %>'
environment '<%= "#{Capistrano::BaseHelper.environment}" %>'
<%= "activate_control_app '#{c.fetch(:puma_control_url)}'" if c.fetch(:puma_activate_control_app) %>

# Must preload application in case there are errors, if not, infinite restarts will happen
preload_app!

directory <%= File.join(c.fetch(:deploy_to), "current") %>

# TODO - fix restart block!
# <%= "on_restart do"              if c.fetch(:puma_on_restart_active) %>
# <%= "  puts \"Restarting puma\"" if c.fetch(:puma_on_restart_active) %>
# <%= "end"                        if c.fetch(:puma_on_restart_active) %>

Add directory to puma config

Add directory to puma config


<!DOCTYPE html>

    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />

<%= @guide.title %>

<%= @action.friendly_description %>

    <a href="<%= "#{ExternalServices.front_end_host}/#{@action.edition.container.slug}?edition=#{@action.edition.container.slug}" %>">Preview it now

<!DOCTYPE html>

    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />

<%= @guide.title %>

<%= @action.friendly_description %> by <%= @action.requester %>

    <% if @action.friendly_description == 'Published.' %>
      <a href="<%= "#{ExternalServices.front_end_host}/#{@action.edition.container.slug}" %>">View it live
    <% else %>
      <a href="<%= "#{ExternalServices.front_end_host}/#{@action.edition.container.slug}?edition=#{@action.edition.version_number}" %>">Preview it
    <% end %>

Fix links in workflow emails. Include names of people editing/publishing.


define command {
  command_name check_whitehall_overdue
  command_line /usr/lib/nagios/plugins/check_http_timeout_noncrit -S -H <%= @whitehall_hostname %> -u '<%= @whitehall_overdue_url %>' -a <%= @http_username %>:<%= @http_password %> -s '{"overdue":0}'
}

define command {
  command_name check_whitehall_overdue
  command_line /usr/lib/nagios/plugins/check_http_timeout_noncrit --useragent="check_http_timeout_noncrit/whitehall_overdue" -S -H <%= @whitehall_hostname %> -u '<%= @whitehall_overdue_url %>' -a <%= @http_username %>:<%= @http_password %> -s '{"overdue":0}'
}

Add the user agent to the Whitehall overdue check

Otherwise, I believe the requests are made with "Ruby" as the user
agent, which is a bit vague.


Resend confirmation instructions

<%= form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f| %>
  <%= devise_error_messages! %>

<%= f.label :email %>

  <%= f.email_field :email %>

<%= f.submit "Resend confirmation instructions" %>

<% end %>

<%= render "devise/shared/links" %>

Confirmation token is invalid

 Either the confirmation token is invalid or your account has already been activated.

Handle confirmation token is invalid error

- Handle confirmation token is invalid error.


<%= render "shared/back_to_shipments" %>

  <%= @annual_report_upload.summary %>

  <%=
    link_to t('download_changes_history'),
    '',
    class: 'green-link-underlined'
  %>

Changes History

<%= render partial: 'shared/shipments_table', locals: { changesHistory: true } %>

<%= render "shared/back_to_shipments" %>

  <%= @annual_report_upload.summary %>

  <%=
    link_to t('download_changes_history'),
    changes_history_pdf_path(@annual_report_upload, format: :pdf),
    class: 'green-link-underlined'
  %>

Changes History

<%= render partial: 'shared/shipments_table', locals: { changesHistory: true } %>

Add link to download changes history

Add link to download changes history


---
layout: inner
sidebar_current: "about-security"
page_title: "Security"
description: |-
  Vagrant takes security very seriously. Please responsibly disclose any security vulnerabilities found and we'll handle it quickly.
---

Vagrant Security

  We understand that many users place a high level of trust in HashiCorp
  and the tools we build. We apply best practices and focus on security to
  make sure we can maintain the trust of the community.

  We deeply appreciate any effort to disclose vulnerabilities responsibly.

  If you would like to report a vulnerability, please see the HashiCorp security
  page, which has the proper email to communicate with as well as our
  PGP key. Please do not create a GitHub issue for security
  concerns.

  If you need to report a non-security related bug, please open and issue
  on the Vagrant
  GitHub repository.

Fix broken link to HashiCorp security page


<%= form_for([@character, @character.char_attributes.build]) do |f| %>

      <%= f.select(:base_attribute_id) do %>
        <% BaseAttribute.all.each do |base_attribute| -%>
          <% if base_attribute.id > 11 %>
            <%= content_tag(:option, base_attribute.name, value: base_attribute.id) %>
          <% end %>
        <% end %>
      <% end %>

        <%= f.label "Base" %>

        <%= f.text_field :value_base %>

        <%= f.label "Augmented" %>

        <%= f.text_field :value_modified %>

      <%= f.submit "Add Attribute", class: "btn btn-xs btn-default col-md-6 col-md-offset-3 " %>

<% end %>

<%= form_for([@character, @character.char_attributes.build]) do |f| %>

      <%= f.select(:base_attribute_id) do %>
        <% BaseAttribute.all.each do |base_attribute| -%>
          <% if base_attribute.id > 11 %>
            <%= content_tag(:option, base_attribute.name, value: base_attribute.id) %>
          <% end %>
        <% end %>
      <% end %>

        <%= f.label "Base" %>

        <%= f.text_field :value_base %>

        <%= f.label "Augmented" %>

        <%= f.text_field :value_modified %>

      <%= f.submit "Add", class: "btn btn-xs btn-default col-md-6 col-md-offset-3 " %>

<% end %>

Add attribute button has better text now


<%= link_to("V") %>

<%= @idea.title %>

<%= @idea.description %>

<%= link_to("Yes and!", new_comment_path(commentable_type: "Idea", commentable_id: @idea.id), remote: true, id: "idea_reply") %>

<%= link_to(@idea.creator.username, user_path(@idea.creator)) %>

  <% @idea.comments.each do |comment| %>

<%= comment.text %> - <%= link_to("Yes and!", new_comment_path(commentable_type: "Comment", commentable_id: comment.id), remote: true, class: "comment_reply") %>

  <% end %>

<%= button_to("Vote", votes_path) %>

<%= @idea.title %>

<%= @idea.description %>

<%= link_to("Yes and!", new_comment_path(commentable_type: "Idea", commentable_id: @idea.id), remote: true, id: "idea_reply") %>

<%= link_to(@idea.creator.username, user_path(@idea.creator)) %>

  <% @idea.comments.each do |comment| %>

<%= comment.text %> - <%= link_to("Yes and!", new_comment_path(commentable_type: "Comment", commentable_id: comment.id), remote: true, class: "comment_reply") %>

  <% end %>

Add DOM element for vote creation

Add DOM element for vote creation


Add directive to specify pid-file in main mysql config file


<% text_for :title do %>
  Find out what you can do if you’re struggling because of coronavirus (COVID-19)
<% end %>

<% govspeak_for :body do %>
  Use this service to find out what help and advice you can get from the government and other organisations. You can use it for yourself or someone else.

  You can find support with:

  * what to do if you’re feeling unsafe where you live, or if you’re worried about someone else
  * paying bills, rent, or your mortgage
  * getting food
  * being made redundant or unemployed, or not having any work
  * what to do if you’re worried about going in to work
  * having somewhere to live
  * mental health and wellbeing, including information for children

  If you need medical help, [go to NHS 111 online](https://www.nhs.uk/conditions/coronavirus-covid-19/check-if-you-have-coronavirus-symptoms/).

  You will not get direct support from the government or organisations through this service.
<% end %>

<% text_for :title do %>
  Find out what support you can get if you’re affected by coronavirus
<% end %>

<% text_for :meta_description do %>
  Find advice and support about redundancy and your rights, being out of work, paying rent or bills, and mental health.
<% end %>

<% govspeak_for :body do %>
  Use this service to find out what help and advice you can get from the government and other organisations. You can use it for yourself or someone else.

  You can find support with:

  * what to do if you’re feeling unsafe where you live, or if you’re worried about someone else
  * paying bills, rent, or your mortgage
  * getting food
  * being made redundant or unemployed, or not having any work
  * what to do if you’re worried about going in to work
  * having somewhere to live
  * mental health and wellbeing, including information for children

  ^If you need medical help, [go to NHS 111 online](https://www.nhs.uk/conditions/coronavirus-covid-19/check-if-you-have-coronavirus-symptoms/).

  You will not get direct support from the government or organisations through this service.
<% end %>

Update content on coronavirus find support start page

This adds a search description and fixes formatting for NHS callout.


/* DO NOT EDIT: File is auto-generated */
package <%= to_package(client.qualified_token_name) %>;

@javax.annotation.Generated( "Domgen" )
@SuppressWarnings( { "UnusedDeclaration", "JavaDoc" } )
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings( { "UWF_UNWRITTEN_FIELD" } )
@jsinterop.annotations.JsType( isNative = true, namespace = jsinterop.annotations.JsPackage.GLOBAL, name = "Object" )
public class <%= client.token_name %>
{
  private String sub;
<% client.claims.select{|claim| claim.config['claim.name'] && claim.config['id.token.claim'].to_s == 'true'}.each do |claim| -%>
  private <%= claim.js_type %> <%= claim.config['claim.name'] %>;
<% end -%>

  protected <%= client.token_name %>()
  {
  }

  @jsinterop.annotations.JsOverlay
  public final String getId()
  {
    return sub;
  };
<% client.claims.select{|claim| claim.config['claim.name'] && claim.config['access.token.claim'].to_s == 'true'}.each do |claim| -%>

  @jsinterop.annotations.JsOverlay
  public final <%= claim.js_type %> get<%= Reality::Naming.pascal_case(claim.name.to_s.gsub(' ','_')) %>()
  {
    return <%= claim.config['claim.name'] %>;
  }
<% end -%>
}

/* DO NOT EDIT: File is auto-generated */
package <%= to_package(client.qualified_token_name) %>;

@javax.annotation.Generated( "Domgen" )
@SuppressWarnings( { "UnusedDeclaration", "JavaDoc" } )
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings( { "UWF_UNWRITTEN_FIELD" } )
@jsinterop.annotations.JsType( isNative = true, namespace = jsinterop.annotations.JsPackage.GLOBAL, name = "Object" )
public class <%= client.token_name %>
{
  private String sub;
<% client.claims.select{|claim| claim.config['claim.name'] && claim.config['access.token.claim'].to_s == 'true'}.each do |claim| -%>
  private <%= claim.js_type %> <%= claim.config['claim.name'] %>;
<% end -%>

  protected <%= client.token_name %>()
  {
  }

  @jsinterop.annotations.JsOverlay
  public final String getId()
  {
    return sub;
  };
<% client.claims.select{|claim| claim.config['claim.name'] && claim.config['access.token.claim'].to_s == 'true'}.each do |claim| -%>

  @jsinterop.annotations.JsOverlay
  public final <%= claim.js_type %> get<%= Reality::Naming.pascal_case(claim.name.to_s.gsub(' ','_')) %>()
  {
    return <%= claim.config['claim.name'] %>;
  }
<% end -%>
}

Make sure the correct fields are created for claims that are available on access token


upstream <%= app %> {
  <% ports.each do |port| %>
  server localhost:<%= port %> fail_timeout=0;
  <% end %>
}

server {
  access_log <%= log %>/<%= app %>-nginx-access.log combined buffer=0k;
  error_log  <%= log %>/<%= app %>-nginx-error.log;

  listen 80;
  server_name <%= app %>.<%= ENV['BASE_DOMAIN'] %> <%= (ENV['ADDITIONAL_DOMAINS'] || '').split(',').join(' ') %>;

  root <%= engine.root %>/public;

  gzip             on;
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  gzip_types       text/javascript text/css;
  gzip_disable     "MSIE [1-6]\."

  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    proxy_pass http://<%= app %>;
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root <%= engine.root %>/public;
  }
}

upstream <%= app %> {
  <% ports.each do |port| %>
  server localhost:<%= port %> fail_timeout=0;
  <% end %>
}

server {
  access_log <%= log %>/<%= app %>-nginx-access.log combined buffer=0k;
  error_log  <%= log %>/<%= app %>-nginx-error.log;

  listen 80;
  server_name <%= app %>.<%= ENV['BASE_DOMAIN'] %> <%= (ENV['ADDITIONAL_DOMAINS'] || '').split(',').join(' ') %>;

  root <%= engine.root %>/public;

  <% if ENV['GZIP_COMPRESSION'] %>
  gzip             on;
  gzip_min_length  1000;
  gzip_proxied     expired no-cache no-store private auth;
  <% if ENV['GZIP_COMPRESSION_TYPES' %>
  gzip_types       <%= ENV['GZIP_COMPRESSION_TYPES'] %>;
  <% end %>
  gzip_disable     "MSIE [1-6]\."
  <% end %>

  try_files $uri/index.html $uri.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;

    proxy_pass http://<%= app %>;
  }

  error_page 500 502 503 504 /500.html;
  location = /500.html {
    root <%= engine.root %>/public;
  }
}

Make gzip compression optional, allow custom gzip compression types


Authenticate with Stack Exchange

Associate your metasmoke account with your Stack Exchange account to provide feedback through the API.

<% if current_user.stack_exchange_account_id.nil? %>
  <%= link_to "Authenticate", identify_auth_url, class: "btn btn-success" %>
<% else %>

(you have already authenticated)

  <% if current_user.has_role? :flagger %>

        Warning: Undo (this one) runs this service.
        Due to how the API operates, Undo could, theoretically, perform any action on your account. He won't, and if there's a known breach
        we'll revoke all our access tokens, but we're human. By clicking below, you explicitly acknowledge that you're signing up for the following:

a service run by dogs and humans,

who are all volunteers,

with a budget of about four dollars a month

      <%= link_to "Authenticate w/ Write Access", write_auth_url, class: "btn btn-danger" %>

  <% end %>
<% end %>

Authenticate with Stack Exchange

Associate your metasmoke account with your Stack Exchange account to provide feedback through the API.

<% if current_user.stack_exchange_account_id.nil? %>
  <%= link_to "Authenticate", identify_auth_url, class: "btn btn-success" %>
<% else %>

You have already authenticated. You do not need to do so again.

However, you can authenticate again (e.g. if you are experiencing problems).

  <% if current_user.has_role? :flagger %>

        Warning: Undo (this one) runs this service.
        Due to how the API operates, Undo could, theoretically, perform any action on your account. He won't, and if there's a known breach
        we'll revoke all our access tokens, but we're human. By clicking below, you explicitly acknowledge that you're signing up for the following:

a service run by dogs and humans,

who are all volunteers,

with a budget of about four dollars a month

      <%= link_to "Authenticate w/ Write Access", write_auth_url, class: "btn btn-danger" %>

  <% end %>
<% end %>

Emphasize that the user is already authenticated.


<% breadcrumb.add @model.description, edit_backend_snippet_path(@model) %>
<% breadcrumb.add t('b.edit') %>
<%= render 'backend/breadcrumbs' %>

<%= render 'backend/snippets/tabs', active: :general %>
<%= render 'backend/snippets/form', identifier: false %>

<% breadcrumb.add @model.description, edit_backend_snippet_path(@model) %>
<% breadcrumb.add t('b.edit') %>
<%= render 'backend/breadcrumbs' %>

<%= render 'backend/snippets/tabs', active: :general %>
<%= render 'backend/snippets/form' %>

Fix remaining issue from hiding the identifier for snippets.


    <%= link_to(image_tag('logo.png', :alt => t('site.name')), root_path, :class => "brand inline-block"); %>

<%= link_to(t('site.name'), root_path, :class => "brand"); %>

      <input type="search" name="search" id="global_search_input">

    <%= link_to(image_tag('logo.png', :alt => t('site.name')), root_path, :class => "brand inline-block"); %>

<%= link_to(t('site.name'), root_path, :class => "brand"); %>

      <%= render :partial => 'layouts/search', :locals => { :sizeFieldSearch => "input-large" } %>

Fix search when signed out

Fix search when signed out


  <% if @logged_in_as %>
    <%= link_to "Post new article", :new_article, class: "button new" %>
  <% end %>
  <%= render "shared/language_selector" %>
  <%= form_tag({action: :search}, method: :get, class: "select_user") do %>
    <%= select_tag :author, options_for_select(["Select Author"].concat(User.all.map(&:screen))), method: :get, onchange: "this.form.submit()" %>
  <% end %>

<% if @articles.present? %>
  <% @articles.each do |article| %>
    <% if !article.is_draft %>
      <%= render "shared/article_description", article: article %>
    <% end %>
  <% end %>

<% else %>

No article found!

<% end %>

  <% if @logged_in_as %>
    <%= link_to "Post new article", :new_article, class: "button new" %>
  <% end %>
  <%= render "shared/language_selector" %>
  <%= form_tag({action: :search}, method: :get, class: "select_user") do %>
    <%= select_tag :author, options_for_select(["Select Author"].concat(User.where.not(username: "root").map(&:screen))), method: :get, onchange: "this.form.submit()" %>
  <% end %>

<% if @articles.present? %>
  <% @articles.each do |article| %>
    <% if !article.is_draft %>
      <%= render "shared/article_description", article: article %>
    <% end %>
  <% end %>

<% else %>

No article found!

<% end %>

Fix bug where screen of root is shown in menu


  <% if Comfy::Cms::Site.first&.pages&.root %>
    <% Comfy::Cms::Site.first.pages.root.children.published.each do |page| %>

      <%= link_to page.label, page.url(:relative) %>
        <% if page.children.any? %>

            <% page.children.each do |children| %>

<%= link_to children.label, children.url(:relative) %>

            <% end %>

        <% end %>

    <% end %>
  <% end %>

Make sure users can log in if there’s no site created


<!DOCTYPE html>
<html>
  <head>
    <title>fastlane CI</title>
    <link rel="stylesheet" href="/material.min.css">
    <script src="/material.min.js"></script>
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <!--
    <%= erb :"../../partials/notification_banner" %>
    -->
    <%= yield %>
  </body>
</html>

<!-- Modal display script -->
<script>
  var dialog = document.querySelector('dialog');
  if (! dialog.showModal) dialogPolyfill.registerDialog(dialog);

  <% if message %>
    dialog.showModal();
  <% end %>

  dialog.querySelector('.close').addEventListener('click', function() {
    dialog.close();
  });
</script>

<!DOCTYPE html>
<html>
  <head>
    <title>fastlane CI</title>
    <link rel="stylesheet" href="/material.min.css">
    <script src="/material.min.js"></script>
    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <!--
    <%= erb :"../../partials/notification_banner" %>
    -->
    <%= yield %>
  </body>
</html>

<!-- Modal display script -->
<script>
  var dialog = document.querySelector('dialog');
  if (dialog) {
    if (!dialog.showModal) dialogPolyfill.registerDialog(dialog);

    <% if message %>
      dialog.showModal();
    <% end %>

    dialog.querySelector('.close').addEventListener('click', function() {
      dialog.close();
    });
  }
</script>

Fix JavaScript error of undefined `dialog` variable

Fixes https://github.com/fastlane/ci/issues/507


Results:

<%= page_entries_info(@users, :model => "Candidate")%>

<% @users.each do |user| %>

  Name: <%= user.prefix == 'N/A' ? '' : user.prefix %> <%= user.first_name %> <%= user.last_name %>

  Years of Experience:  <%= user.years %>

  Licenses Held: <%= user.licenses.map do |lic| lic.name end.to_sentence %>

  Registered for 2019 Job Fair: <% if user.register2019 == "both" || user.register2019 == "jobfaironly" %>Yes<% else %>No<%end%>

  Location Preference: <%= user.location_pref ? user.location_pref.to_sentence : '' %>

  <a href="/users/<%= user.id %>">Profile

<% end %>

<% if User.find(session[:user_id]).access == "admin" || User.find(session[:user_id]).access == "school"%>
  <%= form_tag(users_search_path(params.merge(format: 'csv'))) do %>
  <%= submit_tag 'Generate CSV', class: "btn btn-info export"%>
  <% end %>
<% end %>

<%= will_paginate @users %>

Results:

<%= page_entries_info(@users, :model => "Candidate")%>

<% @users.each do |user| %>

  Name: <%= user.prefix == 'N/A' ? '' : user.prefix %> <%= user.first_name %> <%= user.last_name %>

  Years of Experience:  <%= user.years %>

  Licenses Held: <%= user.licenses.map do |lic| lic.name end.to_sentence %>

  Endorsements: <%= user.endorsements.map do |endo| endo.name end.to_sentence %>

  Registered for 2019 Job Fair: <% if user.register2019 == "both" || user.register2019 == "jobfaironly" %>Yes<% else %>No<%end%>

  Location Preference: <%= user.location_pref ? user.location_pref.to_sentence : '' %>

  <a href="/users/<%= user.id %>">Profile

<% end %>

<% if User.find(session[:user_id]).access == "admin" || User.find(session[:user_id]).access == "school"%>
  <%= form_tag(users_search_path(params.merge(format: 'csv'))) do %>
  <%= submit_tag 'Generate CSV', class: "btn btn-info export"%>
  <% end %>
<% end %>

<%= will_paginate @users %>

Add endorsements to search results

Add endorsements to search results


Togetherness: The Definition

  <% if current_user %>
    Logout | <a href="/users/<%= session[:user_id] %>">View My Profile | Set New Goal | My Friends
  <% else %>
    Login | Create Account
  <% end %>

Add 'Togetherness' to The Definition link


Fix usage of t Handlebar helper within variants/_autocomplete


<% form_tag :controller => 'review_mapping',
            :action => 'assign_metareviewer_dynamically',
            :assignment_id => assignment.id,
            :metareviewer_id => session[:user].id do %>
  <input type='submit' value='Request a new review to metareview'/>
<% end %>

<% form_tag :controller => 'review_mapping',
            :action => 'assign_metareviewer_dynamically',
            :assignment_id => assignment.id,
            :metareviewer_id => session[:user].id do %>
  <input type='submit' value='Request a new metareview to perform'/>
<% end %>

Rewrite the metareview button according to feedback received in the last meeting


<%= form_tag(batch_edits_path, :method => :put, :class=> "batch-select-all hidden", "data-behavior" => 'batch-select-all') do -%>
    <%= hidden_field_tag('update_type', 'delete_all') %>
  <%= submit_tag("Delete Selected", :class=>'batch-all-button btn btn-primary submits-batches', :data => { :confirm => "Deleting a file from #{t('sufia.product_name')} is permanent. Click OK to delete this file from #{t('sufia.product_name')}, or Cancel to cancel this operation"}) %>
<% end %>

<%= form_tag(batch_edits_path, :method => :delete, :class=> "batch-select-all hidden", "data-behavior" => 'batch-select-all') do -%>
    <%= hidden_field_tag('update_type', 'delete_all') %>
  <%= submit_tag("Delete Selected", :class=>'batch-all-button btn btn-primary submits-batches', :data => { :confirm => "Deleting a file from #{t('sufia.product_name')} is permanent. Click OK to delete this file from #{t('sufia.product_name')}, or Cancel to cancel this operation"}) %>
<% end %>

Delete all needs a delete HTTP method

Delete all needs a delete HTTP method


<%= link_to 'Browse', catalog_index_path(search_field: 'all_fields', utf8: '✓', q: '') %>

<%= render_search_bar %>

          <% if can? :create, MediaObject %>

<%= link_to 'Create', new_media_object_path %>

          <% end %>

          <% if can? :manage, Admin::Group %>

<%= link_to 'Manage Policy',
              admin_index_path,
              html: {target: '_admin'} %>
          <% end %>

<%= link_to 'Browse', catalog_index_path(search_field: 'all_fields', utf8: '✓', q: '') %>

<%= render_search_bar %>

          <% if can? :create, MediaObject %>

<%= link_to 'Create', new_media_object_path %>

          <% end %>

          <% if can? :manage, Admin::Group %>

<%= link_to 'Manage Groups',
              admin_index_path,
              html: {target: '_admin'} %>
          <% end %>

Rename Manage Policy to Manage Groups

Rename Manage Policy to Manage Groups


Bump Yeast to pull in sfgb colour

Bump Yeast to pull in sfgb colour


define command {
  command_name check_graphite_metric
  command_line <%= @check_graphite_command %> -H http://graphite.cluster/render -U '<%= @http_username %>' -P '<%= @http_password %>' -M '$ARG1$' -w $ARG2$ -c $ARG3$
}

define command {
  command_name check_graphite_metric
  command_line <%= @check_graphite_command %> -H <%= @graphite_url %>/render -U '<%= @http_username %>' -P '<%= @http_password %>' -M '$ARG1$' -w $ARG2$ -c $ARG3$
}

Update graphite URL on AWS

Update graphite URL on AWS


# Scheduler Runner unit file
# Managed by puppet class profile::swh::deploy::scheduler
# Changes will be overwritten

[Unit]
Description=Software Heritage scheduler runner
Requires=network.target rabbitmq-server.service
After=network.target rabbitmq-server.service

[Service]
User=<%= @user %>
Group=<%= @group %>
Type=simple
ExecStart=/bin/sh -c 'while true; do echo running pending tasks at `/bin/date`...; /usr/bin/swh-scheduler --config-file <%= @config_file %> --log-level <%= @runner_log_level %> runner --period 0; sleep 10; done'
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

# Scheduler Runner unit file
# Managed by puppet class profile::swh::deploy::scheduler
# Changes will be overwritten

[Unit]
Description=Software Heritage scheduler runner
Requires=network.target rabbitmq-server.service
After=network.target rabbitmq-server.service

[Service]
User=<%= @user %>
Group=<%= @group %>
Type=simple
ExecStart=/usr/bin/swh-scheduler --config-file <%= @config_file %> --log-level <%= @runner_log_level %> runner --period 10
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Revert "swh-scheduler-runner: Transitory change to avoid the kombu issue"

This reverts commit 6ff4cdd30d33351374214eb27a95fafb6258b2e9.

kombu package updated to version 4.3.0-1~swh1~bpo9+1 (holding the fix)

Related T1491


# Dropped off by Chef, thanks!
<%= @ssh_keys %>

# Dropped off by Chef, thanks!
<% key_list = @ssh_keys.kind_of?(Array) ? @ssh_keys : [ @ssh_keys ] %>
<% key_list.each do |key| %>
<%= key %>
<% end %>

Support a string for a single key or an array.


<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= content_for?(:title) ? yield(:title) + " — Villeme" : "Villeme" %></title>

<!-- Open Graph para Facebook -->
<%= render 'layouts/share_rules' %>

<%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', :media => 'all' %>

<!-- Used for tests with Riotjs in Poltergeist -->
<%= javascript_include_tag 'es5/es5-shim', if: Rails.env.test? or Rails.env.development? %>

<!-- Favicon -->
<link rel="icon" type="image/png" href="/images/favicon.png" />

<!-- Fix the pushState from facebook login -->
<script type="text/javascript">
    if (window.location.hash && window.location.hash == '#_=_') {
        if (window.history && history.pushState) {
            window.history.pushState("", document.title, window.location.pathname);
        } else {
            // Prevent scrolling by storing the page's current scroll offset
            var scroll = {
                top: document.body.scrollTop,
                left: document.body.scrollLeft
            };
            window.location.hash = '';
            // Restore the scroll offset, should be flicker free
            document.body.scrollTop = scroll.top;
            document.body.scrollLeft = scroll.left;
        }
    }
</script>

Fix the pushState from Facebook login

Fix the pushState from Facebook login


    <%= render "badge_selector" %>
    <%= render "topbar" %>

    <% if @collection %>
      <%= render :partial => "stats" %>

            This page shows an evaluation of the documentation of <a target="_blank" class="github-link" href="<%= @project.source_code_url %>"><%= @project.name %>.

            Each class, module, method, etc. is given a grade based on how complete the docs are.

            The bar above shows the distribution of these grades.

          <% @collection.each do |grade_list| %>
            <%= render "shared/grade_list_table", :grade_list => grade_list %>
          <% end %>

    <% end %>

Add promo text to HTML source of project pages