aboutsummaryrefslogtreecommitdiff
path: root/app/views
diff options
context:
space:
mode:
Diffstat (limited to 'app/views')
-rw-r--r--app/views/about/changelog.html.md9
-rw-r--r--app/views/about/feedback.html.erb64
-rw-r--r--app/views/about/feeds.html.erb23
-rw-r--r--app/views/about/help.html.erb11
-rw-r--r--app/views/about/index.html.erb23
-rw-r--r--app/views/about/legacy.atom.builder18
-rw-r--r--app/views/arches/index.html.erb36
-rw-r--r--app/views/arches/keyworded.html.erb23
-rw-r--r--app/views/arches/show.html.erb0
-rw-r--r--app/views/arches/stable.html.erb23
-rw-r--r--app/views/categories/_category_header.html.erb21
-rw-r--r--app/views/categories/_package_line.html.erb4
-rw-r--r--app/views/categories/index.html.erb52
-rw-r--r--app/views/categories/index.json.jbuilder5
-rw-r--r--app/views/categories/show.html.erb28
-rw-r--r--app/views/categories/show.json.jbuilder10
-rw-r--r--app/views/feedback_mailer/feedback_email.text.erb5
-rw-r--r--app/views/feeds/changes.atom.builder60
-rw-r--r--app/views/index/_package.html.erb8
-rw-r--r--app/views/index/index.html.erb53
-rw-r--r--app/views/layouts/application.html.erb153
-rw-r--r--app/views/layouts/mailer.html.erb5
-rw-r--r--app/views/layouts/mailer.text.erb1
-rw-r--r--app/views/packages/_changed_package.html.erb71
-rw-r--r--app/views/packages/_changelog.html.erb19
-rw-r--r--app/views/packages/_changelog_entry.html.erb31
-rw-r--r--app/views/packages/_herd.html.erb1
-rw-r--r--app/views/packages/_keyword_legend.html.erb17
-rw-r--r--app/views/packages/_maintainer.html.erb1
-rw-r--r--app/views/packages/_maintainer_needed_notice.html.erb7
-rw-r--r--app/views/packages/_maintainer_spacer.html.erb1
-rw-r--r--app/views/packages/_mask.html.erb30
-rw-r--r--app/views/packages/_masks.html.erb10
-rw-r--r--app/views/packages/_metadata.html.erb87
-rw-r--r--app/views/packages/_metadata_use.html.erb14
-rw-r--r--app/views/packages/_package_header.html.erb31
-rw-r--r--app/views/packages/_package_result_row.html.erb4
-rw-r--r--app/views/packages/_removal_notice.html.erb5
-rw-r--r--app/views/packages/_resources.html.erb35
-rw-r--r--app/views/packages/_useflag.html.erb5
-rw-r--r--app/views/packages/_version_card.html.erb14
-rw-r--r--app/views/packages/_version_row.html.erb12
-rw-r--r--app/views/packages/_versions.html.erb38
-rw-r--r--app/views/packages/added.html.erb23
-rw-r--r--app/views/packages/changelog.html.erb12
-rw-r--r--app/views/packages/changelog.json.jbuilder1
-rw-r--r--app/views/packages/keyworded.html.erb23
-rw-r--r--app/views/packages/resolve.json.jbuilder4
-rw-r--r--app/views/packages/search.html.erb38
-rw-r--r--app/views/packages/show.html.erb28
-rw-r--r--app/views/packages/show.json.jbuilder43
-rw-r--r--app/views/packages/stable.html.erb23
-rw-r--r--app/views/packages/suggest.json.jbuilder1
-rw-r--r--app/views/packages/updated.html.erb23
-rw-r--r--app/views/useflags/_useflag_header.html.erb5
-rw-r--r--app/views/useflags/_useflag_result_row.html.erb4
-rw-r--r--app/views/useflags/index.html.erb45
-rw-r--r--app/views/useflags/popular.json.jbuilder10
-rw-r--r--app/views/useflags/search.html.erb16
-rw-r--r--app/views/useflags/show.html.erb61
-rw-r--r--app/views/useflags/show_use_expand.html.erb57
-rw-r--r--app/views/useflags/suggest.json.jbuilder1
62 files changed, 1486 insertions, 0 deletions
diff --git a/app/views/about/changelog.html.md b/app/views/about/changelog.html.md
new file mode 100644
index 0000000..070d979
--- /dev/null
+++ b/app/views/about/changelog.html.md
@@ -0,0 +1,9 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><a href="/about"><%= t :about %></a></li>
+ <li class="active"><%= t :changelog %></li>
+</ol>
+
+# <%= t :changelog %>
+
+<%= kk_changelog %>
diff --git a/app/views/about/feedback.html.erb b/app/views/about/feedback.html.erb
new file mode 100644
index 0000000..4a1f1f3
--- /dev/null
+++ b/app/views/about/feedback.html.erb
@@ -0,0 +1,64 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><a href="/about"><%= t :about %></a></li>
+ <li class="active"><%= t :feedback %></li>
+</ol>
+
+<h1>Feedback</h1>
+
+<p class="lead">
+ Thanks for checking out the new packages.gentoo.org!
+</p>
+<p>
+ This site is currently in an <abbr title="minimum viable product">MVP</abbr> state and will be extended further to provide more useful features.
+ To help us prioritize new features and learn about your use case for the site, please share your ideas below.
+ <br><br>
+</p>
+
+<div class="row">
+ <div class="col-md-8">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Send Feedback</h3>
+ </div>
+ <div class="panel-body">
+ <form class="form-horizontal" method="post" action="/about/feedback">
+ <div class="form-group">
+ <label for="feedback" class="col-sm-2 control-label">Your Feedback:</label>
+ <div class="col-sm-10">
+ <textarea name="feedback" id="feedback" class="form-control" rows="10" placeholder="Please be sure to explain issues in detail and with exact URL references."></textarea>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="contact" class="col-sm-2 control-label">Contact (optional):</label>
+ <div class="col-sm-10">
+ <input type="text" name="contact" class="form-control" id="contact" placeholder="How can we reach you to follow up on your feedback?">
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="col-sm-offset-2 col-sm-10">
+ <button type="submit" class="btn btn-default">Send</button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-4">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Other ways to get in touch</h3>
+ </div>
+ <div class="list-group">
+ <a href="mailto:gpackages@gentoo.org" class="list-group-item">
+ <span class="fa fa-fw fa-envelope"></span>
+ E-Mail: gpackages@gentoo.org
+ </a>
+ <a href="irc://irc.gentoo.org/gentoo-www" class="list-group-item">
+ <span class="fa fa-fw fa-comments-o"></span>
+ IRC: #gentoo-www
+ </a>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/app/views/about/feeds.html.erb b/app/views/about/feeds.html.erb
new file mode 100644
index 0000000..5a9c1cd
--- /dev/null
+++ b/app/views/about/feeds.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><a href="/about"><%= t :about %></a></li>
+ <li class="active"><%= t :update_feeds %></li>
+</ol>
+
+<h1><%= t :update_feeds %></h1>
+
+<p>
+ You can find Atom feeds here:
+</p>
+
+<ul>
+ <li>
+ For all packages: Right column on the <a href="/categories">category listing</a>.
+ </li>
+ <li>
+ For specific architectures: In the <a href="/arches">architectures section</a>.
+ </li>
+ <li>
+ For specific packages: In the <em>Resources</em> box on the respective package pages.
+ </li>
+</ul>
diff --git a/app/views/about/help.html.erb b/app/views/about/help.html.erb
new file mode 100644
index 0000000..77ddf5b
--- /dev/null
+++ b/app/views/about/help.html.erb
@@ -0,0 +1,11 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><a href="/about"><%= t :about %></a></li>
+ <li class="active"><%= t :help %></li>
+</ol>
+
+<h1><%= t :help %></h1>
+
+<h2 id="keyword-legend"><%= t :keyword_table_legend %></h2>
+
+<%= render partial: 'packages/keyword_legend' %>
diff --git a/app/views/about/index.html.erb b/app/views/about/index.html.erb
new file mode 100644
index 0000000..5d9ed0f
--- /dev/null
+++ b/app/views/about/index.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li class="active"><%= t :about %></li>
+</ol>
+
+<h1>About packages.gentoo.org</h1>
+
+<p>Welcome to the new packages.gentoo.org!</p>
+
+<p>
+ This section will be extended with further information as the site continues to develop.
+ Feel free to <a href="/about/feedback">get in touch</a> if you have any questions that are not answered on this page.
+</p>
+
+<h2>FAQ</h2>
+
+<dl>
+ <dt>How often is the site updated?</dt>
+ <dd>
+ Updates are scheduled <strong>every 10 minutes</strong> and are processed using delayed jobs.
+ You can find the last time an import task was started in the footer.
+ </dd>
+</dl>
diff --git a/app/views/about/legacy.atom.builder b/app/views/about/legacy.atom.builder
new file mode 100644
index 0000000..91c0928
--- /dev/null
+++ b/app/views/about/legacy.atom.builder
@@ -0,0 +1,18 @@
+atom_feed(id: atom_id(@feed_type, 'feed')) do |feed|
+ feed.title @feed_title
+ feed.updated Time.now
+
+ feed.entry('', id: atom_id(@feed_type, 'deprecated'), url: about_feeds_url) do |entry|
+ entry.title 'This feed is deprecated'
+ entry.content <<END_CONTENT.strip
+This is a legacy feed from the previous version of packages.gentoo.org
+
+With our recent site relaunch, the feed setup has changed as well.
+To continue receiving updates about Gentoo packages, please visit the Feeds section of our new packages website at:
+
+ https://packages.gentoo.org/about/feeds
+
+Thank you for your interest in our packages site.
+END_CONTENT
+ end
+end
diff --git a/app/views/arches/index.html.erb b/app/views/arches/index.html.erb
new file mode 100644
index 0000000..8684eb1
--- /dev/null
+++ b/app/views/arches/index.html.erb
@@ -0,0 +1,36 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li class="active"><%= t :architectures %></li>
+</ol>
+
+<h1><%= t :architectures %></h1>
+
+<p><%= t :arches_intro %></p>
+
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :architectures %></h3>
+ </div>
+ <div class="table-responsive">
+ <table class="table table-striped">
+ <col>
+ <col style="width: 20em;">
+ <col style="width: 20em;">
+ <tbody>
+ <% ::KKULEOMI_ARCHES.sort.each do |arch| %>
+ <tr>
+ <th class="kk-nobreak-cell"><%= arch %></th>
+ <td>
+ <%= link_to t(:keyworded_packages), keyworded_arch_path(id: arch) %>
+ <%= feed_icon keyworded_arch_path(id: arch, format: :atom) %>
+ </td>
+ <td>
+ <%= link_to t(:stable_packages), stable_arch_path(id: arch) %>
+ <%= feed_icon stable_arch_path(id: arch, format: :atom) %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+ </div>
+</div>
diff --git a/app/views/arches/keyworded.html.erb b/app/views/arches/keyworded.html.erb
new file mode 100644
index 0000000..b7ae03d
--- /dev/null
+++ b/app/views/arches/keyworded.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:architectures), arches_path %></li>
+ <li class="active"><%= t :keyworded_packages %></li>
+</ol>
+
+<h1>
+ <%= t :keyworded_packages %> (<%= @arch %>)
+ <%= feed_icon keyworded_arch_path(id: @arch, format: :atom) %>
+</h1>
+
+<% cache("keyworded-full-#{@arch}-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'packages/changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(keyworded_arch_url(id: @arch, format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/arches/show.html.erb b/app/views/arches/show.html.erb
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/app/views/arches/show.html.erb
diff --git a/app/views/arches/stable.html.erb b/app/views/arches/stable.html.erb
new file mode 100644
index 0000000..b1a4548
--- /dev/null
+++ b/app/views/arches/stable.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:architectures), arches_path %></li>
+ <li class="active"><%= t :stable_packages %></li>
+</ol>
+
+<h1>
+ <%= t :stable_packages %> (<%= @arch %>)
+ <%= feed_icon stable_arch_path(id: @arch, format: :atom) %>
+</h1>
+
+<% cache("stable-full-#{@arch}-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'packages/changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(stable_arch_url(id: @arch, format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/categories/_category_header.html.erb b/app/views/categories/_category_header.html.erb
new file mode 100644
index 0000000..b52cecf
--- /dev/null
+++ b/app/views/categories/_category_header.html.erb
@@ -0,0 +1,21 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li class="active"><%= category.name %></li>
+</ol>
+
+<div class="row">
+ <div class="col-md-4">
+ <h1 class="stick-top">
+ <span class="fa fa-fw fa-cubes"></span>
+ <%= category.name %>
+ </h1>
+ </div>
+ <div class="col-md-8">
+ <p class="lead" style="margin: 0;">
+ <%= category.description %>
+ </p>
+ </div>
+</div>
+
+<hr> \ No newline at end of file
diff --git a/app/views/categories/_package_line.html.erb b/app/views/categories/_package_line.html.erb
new file mode 100644
index 0000000..7ac4a43
--- /dev/null
+++ b/app/views/categories/_package_line.html.erb
@@ -0,0 +1,4 @@
+<tr>
+ <th class="kk-nobreak-cell"><%= link_to package.name, slf(package_path(package.atom)) %></th>
+ <td><%= package.description %></td>
+</tr>
diff --git a/app/views/categories/index.html.erb b/app/views/categories/index.html.erb
new file mode 100644
index 0000000..9c19c9c
--- /dev/null
+++ b/app/views/categories/index.html.erb
@@ -0,0 +1,52 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li class="active"><%= t :packages %></li>
+</ol>
+
+<h1><%= t :packages %></h1>
+
+<div class="row">
+ <div class="col-md-9">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :browse_categories %></h3>
+ </div>
+ <div class="panel-body">
+ <ul class="kk-col-list kk-4col-list kk-category-listing">
+ <%- prev_letter = 'z' -%>
+ <% @categories.each do |category| %>
+ <%- unless category.name[0].upcase == prev_letter ; prev_letter = category.name[0].upcase -%>
+ <li class="kk-col-list-header"><span class="kk-group-header"><%= prev_letter %></span></li>
+ <%- end -%>
+ <li><%= link_to_category category %></li>
+ <% end %>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="col-md-3">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :update_feeds %></h3>
+ </div>
+ <div class="list-group">
+ <a href="<%= added_packages_path %>" class="list-group-item">
+ <span class="fa fa-fw fa-history"></span>
+ <%= t :added_packages %>
+ </a>
+ <a href="<%= updated_packages_path %>" class="list-group-item">
+ <span class="fa fa-fw fa-asterisk"></span>
+ <%= t :updated_packages %>
+ </a>
+ <a href="<%= stable_packages_path %>" class="list-group-item">
+ <span class="fa fa-fw fa-check-circle-o"></span>
+ <%= t :stable_packages %>
+ </a>
+ <a href="<%= keyworded_packages_path %>" class="list-group-item">
+ <span class="fa fa-fw fa-circle-o"></span>
+ <%= t :keyworded_packages %>
+ </a>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/app/views/categories/index.json.jbuilder b/app/views/categories/index.json.jbuilder
new file mode 100644
index 0000000..12cc02e
--- /dev/null
+++ b/app/views/categories/index.json.jbuilder
@@ -0,0 +1,5 @@
+json.array!(@categories) do |category|
+ json.extract! category, :name
+ json.extract! category, :description
+ json.url category_url(category, format: :json)
+end
diff --git a/app/views/categories/show.html.erb b/app/views/categories/show.html.erb
new file mode 100644
index 0000000..41cceef
--- /dev/null
+++ b/app/views/categories/show.html.erb
@@ -0,0 +1,28 @@
+<%= render partial: 'category_header', object: @category, as: 'category' %>
+
+<div class="row">
+ <div class="col-md-9">
+ <!--<p>
+ <input type="text" class="form-control form-control-xl" placeholder="Search packages in <%= @category.name %>">
+ </p>-->
+
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">All packages</h3>
+ </div>
+ <table class="table">
+ <%= render partial: 'package_line', collection: @packages, as: 'package' %>
+ </table>
+ </div>
+ </div>
+ <div class="col-md-3">
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Statistics</h3>
+ </div>
+ <div class="panel-body">
+ <%= @packages.count %> <%= t :packages %>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/app/views/categories/show.json.jbuilder b/app/views/categories/show.json.jbuilder
new file mode 100644
index 0000000..fcf3811
--- /dev/null
+++ b/app/views/categories/show.json.jbuilder
@@ -0,0 +1,10 @@
+json.extract! @category, :name
+json.href slf category_url(id: @category.name)
+
+json.packages @packages do |package|
+ json.name package.name
+ json.description package.description
+ json.href slf(package_url(id: package.atom))
+end
+
+json.extract! @category, :updated_at \ No newline at end of file
diff --git a/app/views/feedback_mailer/feedback_email.text.erb b/app/views/feedback_mailer/feedback_email.text.erb
new file mode 100644
index 0000000..40b0b98
--- /dev/null
+++ b/app/views/feedback_mailer/feedback_email.text.erb
@@ -0,0 +1,5 @@
+Feedback:
+-------------------------------------------------------------------------------
+<%= @feedback %>
+-------------------------------------------------------------------------------
+Contact: <%= @contact %>
diff --git a/app/views/feeds/changes.atom.builder b/app/views/feeds/changes.atom.builder
new file mode 100644
index 0000000..5991f45
--- /dev/null
+++ b/app/views/feeds/changes.atom.builder
@@ -0,0 +1,60 @@
+@feed_id ||= nil
+
+atom_feed(id: atom_id(@feed_type, @feed_id, 'feed')) do |feed|
+ feed.title @feed_title
+ feed.updated !@changes.empty? ? @changes.first.created_at : Time.now
+
+ feed.author do |author|
+ author.name 'Gentoo Packages Database'
+ end
+
+ @changes.each do |change|
+ atom = cp_to_atom change.category, change.package
+ package = Package.find_by :atom, atom
+ if package.nil?
+ logger.warn "Package for change (#{change}) nil!"
+ next
+ end
+
+ id = atom
+ id += '-%s' % change.version if change[:version]
+ id += '-%s' % change.arches.join(',') if change[:arches]
+
+ feed.entry(
+ change,
+ id: atom_id(@feed_type, @feed_id, id),
+ url: absolute_link_to_package(atom)) do |entry|
+ entry.updated change.created_at.to_datetime.rfc3339
+
+ case @feed_type
+ when :added
+ entry.title(t :feed_added_title,
+ atom: atom,
+ description: package.description)
+ entry.content(t :feed_added_content,
+ atom: atom,
+ arches: package.latest_version.keywords.join(', '))
+ when :updated
+ entry.title(t :feed_updated_title,
+ atom: atom_add_version(atom, change.version),
+ description: package.description)
+ entry.content(t :feed_updated_content,
+ atom: change.version)
+ when :stable
+ entry.title(t :feed_stable_title,
+ atom: atom_add_version(atom, change.version),
+ description: package.description)
+ entry.content(t :feed_stable_content,
+ atom: atom,
+ arches: change.arches.join(', '))
+ when :keyworded
+ entry.title(t :feed_keyworded_title,
+ atom: atom_add_version(atom, change.version),
+ description: package.description)
+ entry.content(t :feed_keyworded_content,
+ atom: atom,
+ arches: change.arches.join(', '))
+ end
+ end
+ end
+end
diff --git a/app/views/index/_package.html.erb b/app/views/index/_package.html.erb
new file mode 100644
index 0000000..431142a
--- /dev/null
+++ b/app/views/index/_package.html.erb
@@ -0,0 +1,8 @@
+<tr>
+ <td>
+ <a href="<%= slf(package_path(cp_to_atom(change.category, change.package))) %>">
+ <span class="text-muted"><%= change.category %></span>/<strong><%= change.package %><%= "-#{change.version}" if change[:version] %></strong>
+ </a>
+ </td>
+ <td><%= Package.find_by(:atom, cp_to_atom(change.category, change.package)).description %></td>
+</tr> \ No newline at end of file
diff --git a/app/views/index/index.html.erb b/app/views/index/index.html.erb
new file mode 100644
index 0000000..890a5f3
--- /dev/null
+++ b/app/views/index/index.html.erb
@@ -0,0 +1,53 @@
+<div class="jumbotron">
+ <h2 class="site-welcome stick-top">Welcome to the Home of <span class="text-primary"><%= number_with_delimiter Package.count %></span> Gentoo Packages</h2>
+
+ <form action="<%= search_packages_path %>" method="get">
+ <div class="typeahead-container">
+ <div class="typeahead-field">
+ <span class="typeahead-query">
+ <input id="q" name="q" type="search" autocomplete="off" placeholder="<%= t :find_packages %>" aria-label="<%= t :find_packages %>" autofocus>
+ </span>
+ <span class="typeahead-button">
+ <button type="submit" title="<%= t :find %>" aria-label="<%= t :find %>">
+ <span class="typeahead-search-icon"></span><span class="sr-only"><%= t :find %></span>
+ </button>
+ </span>
+ </div>
+ </div>
+ </form>
+</div>
+
+<% cache("added-#{@new_packages.hash}") do %>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">
+ <span class="fa fa-fw fa-history"></span>
+ <%= link_to t(:added_packages), added_packages_path %>
+ </h3>
+ </div>
+ <div class="table-responsive">
+ <table class="table table-striped">
+ <%= render partial: 'package', collection: @new_packages, as: 'change' %>
+ </table>
+ </div>
+</div>
+<% end %>
+
+<% cache("updated-#{@version_bumps.hash}") do %>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">
+ <span class="fa fa-fw fa-asterisk"></span>
+ <%= link_to t(:updated_packages), updated_packages_path %>
+ </h3>
+ </div>
+ <ul class="list-group">
+ <% @version_bumps.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'packages/changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+</div>
+<% end %>
+
+<%= javascript_include_tag 'index/typeahead.js' %>
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
new file mode 100644
index 0000000..72fb8fa
--- /dev/null
+++ b/app/views/layouts/application.html.erb
@@ -0,0 +1,153 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title><%= "#{@title} – " if @title %>Gentoo Packages</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="theme-color" content="#54487a">
+ <meta name="description" content="<%= "#{@description} in the " if @description %>Gentoo Packages Database">
+ <link href="https://assets.gentoo.org/tyrian/bootstrap.min.css" rel="stylesheet" media="screen">
+ <link href="https://assets.gentoo.org/tyrian/tyrian.min.css" rel="stylesheet" media="screen">
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
+ <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
+ <script src="https://assets.gentoo.org/tyrian/bootstrap.min.js"></script>
+ <link rel="icon" href="https://www.gentoo.org/favicon.ico" type="image/x-icon">
+ <% if content_for? :head -%>
+ <%= yield :head %>
+ <% end -%>
+</head>
+<body class="kk">
+<header>
+ <div class="site-title">
+ <div class="container">
+ <div class="row">
+ <div class="site-title-buttons">
+ <div class="btn-group btn-group-sm">
+ <a href="https://get.gentoo.org/" role="button" class="btn get-gentoo"><span class="fa fa-fw fa-download"></span> <strong>Get Gentoo!</strong></a>
+ <div class="btn-group btn-group-sm">
+ <a class="btn gentoo-org-sites dropdown-toggle" data-toggle="dropdown" data-target="#" href="#">
+ <span class="fa fa-fw fa-map-o"></span> <span class="hidden-xs">gentoo.org sites</span> <span class="caret"></span>
+ </a>
+ <ul class="dropdown-menu dropdown-menu-right">
+ <li><a href="https://www.gentoo.org/" title="Main Gentoo website"><span class="fa fa-home fa-fw"></span> gentoo.org</a></li>
+ <li><a href="https://wiki.gentoo.org/" title="Find and contribute documentation"><span class="fa fa-file-text-o fa-fw"></span> Wiki</a></li>
+ <li><a href="https://bugs.gentoo.org/" title="Report issues and find common issues"><span class="fa fa-bug fa-fw"></span> Bugs</a></li>
+ <li><a href="https://forums.gentoo.org/" title="Discuss with the community"><span class="fa fa-comments-o fa-fw"></span> Forums</a></li>
+ <li><a href="https://packages.gentoo.org/" title="Find software for your Gentoo"><span class="fa fa-hdd-o fa-fw"></span> Packages</a></li>
+ <li class="divider"></li>
+ <li><a href="https://planet.gentoo.org/" title="Find out what's going on in the developer community"><span class="fa fa-rss fa-fw"></span> Planet</a></li>
+ <li><a href="https://archives.gentoo.org/" title="Read up on past discussions"><span class="fa fa-archive fa-fw"></span> Archives</a></li>
+ <li><a href="https://sources.gentoo.org/" title="Browse our source code"><span class="fa fa-code fa-fw"></span> Sources</a></li>
+ <li class="divider"></li>
+ <li><a href="https://infra-status.gentoo.org/" title="Get updates on the services provided by Gentoo"><span class="fa fa-server fa-fw"></span> Infra Status</a></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="logo">
+ <a href="/" title="Back to the homepage" class="site-logo">
+ <object data="https://assets.gentoo.org/tyrian/site-logo.svg" type="image/svg+xml">
+ <img src="https://assets.gentoo.org/tyrian/site-logo.png" alt="Gentoo Linux Logo">
+ </object>
+ </a>
+ <span class="site-label">Packages</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ <nav class="tyrian-navbar" role="navigation">
+ <div class="container">
+ <div class="row">
+ <div class="navbar-header">
+ <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-main-collapse">
+ <span class="sr-only">Toggle navigation</span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </button>
+ </div>
+ <div class="collapse navbar-collapse navbar-main-collapse">
+ <ul class="nav navbar-nav">
+ <li class="<%= 'active' if @nav == :index %>"><%= link_to t(:home), '/' %></li>
+ <li class="<%= 'active' if @nav == :packages %>"><%= link_to t(:packages), categories_path %></li>
+ <li class="<%= 'active' if @nav == :use %>"><%= link_to t(:use_flags), useflags_path %></li>
+ <li class="<%= 'active' if @nav == :arches %>"><%= link_to t(:architectures), arches_path %></li>
+ <li class="<%= 'active' if @nav == :about %>"><%= link_to t(:about), about_path %></li>
+ </ul>
+ <% unless @nav == :index %>
+ <form class="navbar-form navbar-right" role="search" action="<%= search_packages_path %>" method="get">
+ <div class="form-group">
+ <input type="text" class="form-control" placeholder="Find Packages" name="q">
+ </div>
+ </form>
+ <% end %>
+ </div>
+ </div>
+ </div>
+ </nav>
+</header>
+
+<div class="container">
+ <div class="row">
+ <div class="col-xs-12">
+ <%= yield %>
+ </div>
+ </div>
+</div>
+
+<footer>
+ <div class="container">
+ <div class="row">
+ <div class="col-xs-12 col-md-offset-2 col-md-7">
+ <h3 class="footerhead"><%= t :app_name %></h3>
+ <div class="row">
+ <div class="col-xs-12 col-md-4">
+ <span class="kk-group-header"><%= t :data_current_as_of %></span><br><%= last_import_start ? i18n_date(last_import_start) : 'unknown' %>
+ </div>
+ <div class="col-xs-12 col-md-4">
+ </div>
+ <div class="col-xs-12 col-md-4">
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-12 col-md-3">
+ <h3 class="footerhead">Questions or comments?</h3>
+ Please feel free to <a href="https://www.gentoo.org/inside-gentoo/contact/">contact us</a>.
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-xs-2 col-sm-3 col-md-2">
+ <ul class="footerlinks three-icons">
+ <li><a href="https://twitter.com/gentoo" title="@Gentoo on Twitter"><span class="fa fa-twitter fa-fw"></span></a></li>
+ <li><a href="https://plus.google.com/+Gentoo" title="+Gentoo on Google+"><span class="fa fa-google-plus fa-fw"></span></a></li>
+ <li><a href="https://www.facebook.com/gentoo.org" title="Gentoo on Facebook"><span class="fa fa-facebook fa-fw"></span></a></li>
+ </ul>
+ </div>
+ <div class="col-xs-10 col-sm-9 col-md-10">
+ <strong>&copy; 2001&ndash;2016 Gentoo Foundation, Inc.</strong><br>
+ <small>
+ Gentoo is a trademark of the Gentoo Foundation, Inc.
+ The contents of this document, unless otherwise expressly stated, are licensed under the
+ <a href="https://creativecommons.org/licenses/by-sa/3.0/" rel="license">CC-BY-SA-3.0</a> license.
+ The <a href="https://www.gentoo.org/inside-gentoo/foundation/name-logo-guidelines.html">Gentoo Name and Logo Usage Guidelines</a> apply.
+ </small>
+ </div>
+ </div>
+ </div>
+</footer>
+<script type="text/javascript">
+ var _paq = _paq || [];
+ _paq.push(['disableCookies']);
+ _paq.push(['trackPageView']);
+ _paq.push(['enableLinkTracking']);
+ (function() {
+ var u="//piwik.gentoo.org/";
+ _paq.push(['setTrackerUrl', u+'piwik.php']);
+ _paq.push(['setSiteId', 8]);
+ var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
+ g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
+ })();
+</script>
+<noscript><p><img src="//piwik.gentoo.org/piwik.php?idsite=8" style="border:0;" alt="" /></p></noscript>
+</body>
+</html>
diff --git a/app/views/layouts/mailer.html.erb b/app/views/layouts/mailer.html.erb
new file mode 100644
index 0000000..991cf0f
--- /dev/null
+++ b/app/views/layouts/mailer.html.erb
@@ -0,0 +1,5 @@
+<html>
+ <body>
+ <%= yield %>
+ </body>
+</html>
diff --git a/app/views/layouts/mailer.text.erb b/app/views/layouts/mailer.text.erb
new file mode 100644
index 0000000..37f0bdd
--- /dev/null
+++ b/app/views/layouts/mailer.text.erb
@@ -0,0 +1 @@
+<%= yield %>
diff --git a/app/views/packages/_changed_package.html.erb b/app/views/packages/_changed_package.html.erb
new file mode 100644
index 0000000..2e917e7
--- /dev/null
+++ b/app/views/packages/_changed_package.html.erb
@@ -0,0 +1,71 @@
+<% unless version.nil? %>
+<li class="list-group-item kk-package-detailed">
+ <div class="row">
+ <div class="col-xs-12 col-md-6">
+ <h4 class="stick-top"><%= link_to package.atom, slf(package_path(package.atom)) %></h4>
+ <div class="kk-package-detailed-toolbox">
+ <div class="btn-group">
+ <button type="button" class="btn btn-default btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <span class="fa fa-fw fa-navicon"></span>
+ </button>
+ <ul class="dropdown-menu dropdown-menu-right">
+ <li><a href="https://bugs.gentoo.org/buglist.cgi?quicksearch=<%= u package.atom %>" target="_blank">
+ <span class="fa fa-fw fa-bug"></span>
+ <%= t :res_bugs %>
+ </a></li>
+ <li><a href="https://wiki.gentoo.org/index.php?title=Special%3ASearch&fulltext=Search&search=<%= u package.name %>" target="_blank">
+ <span class="fa fa-fw fa-book"></span>
+ <%= t :res_docs %>
+ </a></li>
+ <li><a href="https://forums.gentoo.org/search.php?search_terms=all&show_results=topics&search_keywords=<%= u package.name %>&mode=results" target="_blank">
+ <span class="fa fa-fw fa-comments-o"></span>
+ <%= t :res_forums %>
+ </a></li>
+ <li role="separator" class="divider"></li>
+ <li><a href="https://gitweb.gentoo.org/repo/gentoo.git/tree/<%= package.atom %>" target="_blank">
+ <span class="fa fa-fw fa-code-fork"></span>
+ <%= t :res_repo %>
+ </a></li>
+ <li><a href="https://gitweb.gentoo.org/repo/gentoo.git/log/<%= package.atom %>?showmsg=1" target="_blank">
+ <span class="fa fa-fw fa-history"></span>
+ <%= t :res_log %>
+ </a></li>
+ <li><a href="https://gitweb.gentoo.org/repo/gentoo.git/atom/<%= package.atom %>?h=master" target="_blank">
+ <span class="fa fa-fw fa-rss"></span>
+ <%= t :res_feed %>
+ </a></li>
+ <li role="separator" class="divider"></li>
+ <li><a href="http://www.portagefilelist.de/site/query/listPackageVersions/?category=<%= package.category %>&package=<%= package.name %>&do#result" target="_blank">
+ <span class="fa fa-fw fa-files-o"></span>
+ <%= t :res_installed_files %> <small>(via PFL<span class="fa fa-fw fa-external-link-square"></span>)</small>
+ </a></li>
+ </ul>
+ </div>
+ </div>
+ <%= package.description %>
+ <br>
+ <small class="text-muted">
+ <% unless change.arches == nil or change.arches.empty? %>
+ <%= t :added_keywords, keywords: change.arches.join(', ') %>
+ <% end %>
+ </small>
+ <% unless (changelog_entry = matching_changelog_entry(change)).nil? %>
+ <div class="kk-inline-changelog-entry">
+ <a href="<%= gitweb_commit_url(changelog_entry[:id]) %>" title="<%= t :git_commit %>">
+ <span class="octicon octicon-git-pull-request"></span>
+ <span class="kk-commit-message">
+ <%= changelog_entry[:message].lines.first %>
+ </span>
+ </a>
+ </div>
+ <% end %>
+ </div>
+ <div class="col-xs-12 col-md-6">
+ <small class="text-muted pull-right">
+ <%= i18n_date(change.created_at) %>
+ </small>
+ <%= render partial: 'packages/version_card', object: version, as: 'version' %>
+ </div>
+ </div>
+</li>
+<% end %>
diff --git a/app/views/packages/_changelog.html.erb b/app/views/packages/_changelog.html.erb
new file mode 100644
index 0000000..c469a50
--- /dev/null
+++ b/app/views/packages/_changelog.html.erb
@@ -0,0 +1,19 @@
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Changelog</h3>
+ </div>
+ <ul class="list-group" id="changelog-container">
+ <li class="list-group-item kk-panel-content-sorry">
+ <span class="fa fa-refresh fa-spin fa-3x"></span>
+ <noscript>
+ <br><br>
+ <%= t :changelog_error %>
+ <br><br>
+ <a href="https://gitweb.gentoo.org/repo/gentoo.git/log/<%= @package.atom %>?showmsg=1" class="btn btn-default">
+ <span class="fa fa-fw fa-history"></span>
+ <%= t :view_git_changelog %>
+ </a>
+ </noscript>
+ </li>
+ </ul>
+</div>
diff --git a/app/views/packages/_changelog_entry.html.erb b/app/views/packages/_changelog_entry.html.erb
new file mode 100644
index 0000000..6b7b1da
--- /dev/null
+++ b/app/views/packages/_changelog_entry.html.erb
@@ -0,0 +1,31 @@
+<li class="list-group-item">
+ <strong><%= annotate_bugs changelog[:message].lines.first %></strong>
+ <br>
+ <div class="kk-byline">
+ <%= mail_to changelog[:email], changelog[:author] %>,
+ <%= i18n_date(changelog[:date]) %>,
+ commit&nbsp;<%= link_to_gitweb_commit changelog[:id]%>
+ </div>
+
+ <table class="table table-condensed kk-changelog-diffstat">
+ <% unless changelog[:files][:added].empty? %>
+ <tr class="success">
+ <td class="kk-changelog-diffstat-icon"><span class="octicon octicon-diff-added"></span></td>
+ <td><%= safe_join(changelog[:files][:added].map {|f| link_to_gitweb_ebuild_diff(f, changelog[:id], @package.category, @package.name) }, ', ') %></td>
+ </tr>
+ <% end %>
+ <% unless changelog[:files][:modified].empty? %>
+ <tr class="warning">
+ <td class="kk-changelog-diffstat-icon"><span class="octicon octicon-diff-modified"></span></td>
+ <td><%= safe_join(changelog[:files][:modified].map {|f| link_to_gitweb_ebuild_diff(f, changelog[:id], @package.category, @package.name) }, ', ') %></td>
+ </tr>
+ <% end %>
+ <% unless changelog[:files][:deleted].empty? %>
+ <tr class="danger">
+ <td class="kk-changelog-diffstat-icon"><span class="octicon octicon-diff-removed"></span></td>
+ <td><%= safe_join(changelog[:files][:deleted].map {|f| link_to_gitweb_ebuild_diff(f, changelog[:id], @package.category, @package.name) }, ', ') %></td>
+ </tr>
+ <% end %>
+
+ </table>
+</li>
diff --git a/app/views/packages/_herd.html.erb b/app/views/packages/_herd.html.erb
new file mode 100644
index 0000000..3e0db76
--- /dev/null
+++ b/app/views/packages/_herd.html.erb
@@ -0,0 +1 @@
+<%= link_to_herd herd %>
diff --git a/app/views/packages/_keyword_legend.html.erb b/app/views/packages/_keyword_legend.html.erb
new file mode 100644
index 0000000..8c45e36
--- /dev/null
+++ b/app/views/packages/_keyword_legend.html.erb
@@ -0,0 +1,17 @@
+<ul class="list-group kk-keyword-legend">
+ <li class="list-group-item kk-keyword-stable">
+ <%= keyword_icon_tag :stable %> &nbsp;<%= t :legend_stable %>
+ </li>
+ <li class="list-group-item kk-keyword-testing">
+ <%= keyword_icon_tag :testing %> &nbsp;<%= t :legend_testing %>
+ </li>
+ <li class="list-group-item kk-keyword-unavailable">
+ <%= keyword_icon_tag :unavailable %> &nbsp;<%= t :legend_unavailable %>
+ </li>
+ <li class="list-group-item kk-keyword-masked">
+ <%= keyword_icon_tag :masked %> &nbsp;<%= t :legend_masked %>
+ </li>
+ <li class="list-group-item kk-keyword-unknown">
+ <span class="kk-octicon-spacer"></span>&nbsp;<%= t :legend_unknown %>
+ </li>
+</ul>
diff --git a/app/views/packages/_maintainer.html.erb b/app/views/packages/_maintainer.html.erb
new file mode 100644
index 0000000..9f89c7c
--- /dev/null
+++ b/app/views/packages/_maintainer.html.erb
@@ -0,0 +1 @@
+<%= mail_to maintainer['email'], maintainer['name'], title: maintainer['email'] %> \ No newline at end of file
diff --git a/app/views/packages/_maintainer_needed_notice.html.erb b/app/views/packages/_maintainer_needed_notice.html.erb
new file mode 100644
index 0000000..8359547
--- /dev/null
+++ b/app/views/packages/_maintainer_needed_notice.html.erb
@@ -0,0 +1,7 @@
+<% if package.needs_maintainer? %>
+ <div class="alert alert-info">
+ <strong><span class="fa fa-fw fa-wrench"></span> This package needs a new maintainer!</strong><br>
+ If you are interested in helping with the maintenance of <%= package.name %>, please get in touch with our
+ <a href="https://wiki.gentoo.org/wiki/Project:Proxy_Maintainers" class="alert-link">Proxy Maintainers team</a>.
+ </div>
+<% end %> \ No newline at end of file
diff --git a/app/views/packages/_maintainer_spacer.html.erb b/app/views/packages/_maintainer_spacer.html.erb
new file mode 100644
index 0000000..4bb959b
--- /dev/null
+++ b/app/views/packages/_maintainer_spacer.html.erb
@@ -0,0 +1 @@
+<%= ', ' %> \ No newline at end of file
diff --git a/app/views/packages/_mask.html.erb b/app/views/packages/_mask.html.erb
new file mode 100644
index 0000000..b76a103
--- /dev/null
+++ b/app/views/packages/_mask.html.erb
@@ -0,0 +1,30 @@
+<li class="list-group-item kk-mask">
+ <strong class="kk-mask-reason text-danger"><%= annotate_bugs(mask['reason']) %></strong>
+
+ <div class="kk-mask-details">
+ <!--<div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ Affected architectures
+ </div>
+ <div class="col-xs-12 col-md-9 kk-mask-atoms">
+ <%# mask['arch'] %>
+ </div>
+ </div>-->
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <%= t :mask_packages %>
+ </div>
+ <div class="col-xs-12 col-md-9 kk-mask-atoms">
+ <%= mask['atoms'].join ', ' %>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <%= t :mask_author %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= mask['author'] %> <span class="text-muted">(<%= mask['date'] %>)</span>
+ </div>
+ </div>
+ </div>
+</li>
diff --git a/app/views/packages/_masks.html.erb b/app/views/packages/_masks.html.erb
new file mode 100644
index 0000000..89bf166
--- /dev/null
+++ b/app/views/packages/_masks.html.erb
@@ -0,0 +1,10 @@
+<% unless (_masks = filter_masks(versions)).empty? %>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :box_masks %></h3>
+ </div>
+ <ul class="list-group">
+ <%= render partial: 'mask', collection: _masks.to_a, as: 'mask' %>
+ </ul>
+</div>
+<% end %>
diff --git a/app/views/packages/_metadata.html.erb b/app/views/packages/_metadata.html.erb
new file mode 100644
index 0000000..426afd9
--- /dev/null
+++ b/app/views/packages/_metadata.html.erb
@@ -0,0 +1,87 @@
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :box_metadata %></h3>
+ </div>
+ <ul class="list-group kk-metadata-list">
+ <% if package.homepage.size > 1 %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-home"></span>
+ <%= t :other_homepages %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <% package.homepage[1..-1].each do |hp| %>
+ <%= link_to hp, hp, rel: 'nofollow' %>
+ <% end %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ <% if package.longdescription %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-info"></span>
+ <%= t :longdescription %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= package.longdescription %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ <% if package.has_useflags? %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-sliders"></span>
+ <%= t :use_flags %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= render partial: 'metadata_use', object: package.useflags, as: 'useflags' %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ <% if package.license %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-legal"></span>
+ <%= t :license %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= annotate_license_str package.license %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ <% if package.herds and package.herds.size > 0 %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-group"></span>
+ <%= t :herds %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= render partial: 'herd', collection: package.herds.sort, as: 'herd', spacer_template: 'maintainer_spacer' %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ <% if package.maintainers and package.maintainers.size > 0 %>
+ <li class="kk-metadata-item list-group-item">
+ <div class="row">
+ <div class="col-xs-12 col-md-3 kk-metadata-key">
+ <span class="fa fa-fw fa-user"></span>
+ <%= t :maintainers %>
+ </div>
+ <div class="col-xs-12 col-md-9">
+ <%= render partial: 'maintainer', collection: package.maintainers, as: 'maintainer', spacer_template: 'maintainer_spacer' %>
+ </div>
+ </div>
+ </li>
+ <% end %>
+ </ul>
+</div>
diff --git a/app/views/packages/_metadata_use.html.erb b/app/views/packages/_metadata_use.html.erb
new file mode 100644
index 0000000..d33b751
--- /dev/null
+++ b/app/views/packages/_metadata_use.html.erb
@@ -0,0 +1,14 @@
+<% unless useflags['local'].empty? %>
+ <span class="kk-useflag-group"><%= t :local_use_flags %></span>
+ <%= render partial: 'useflag', object: useflags['local'], as: 'useflags' %>
+<% end %>
+<% unless useflags['global'].empty? %>
+ <span class="kk-useflag-group"><%= t :global_use_flags %></span>
+ <%= render partial: 'useflag', object: useflags['global'], as: 'useflags' %>
+<% end %>
+<% unless useflags['use_expand'].empty? %>
+ <% useflags['use_expand'].each_pair do |flag, values| %>
+ <span class="kk-useflag-group"><%= t :use_expand_flag, flag: flag %></span>
+ <%= render partial: 'useflag', object: values, as: 'useflags' %>
+ <% end %>
+<% end %>
diff --git a/app/views/packages/_package_header.html.erb b/app/views/packages/_package_header.html.erb
new file mode 100644
index 0000000..5b8ae08
--- /dev/null
+++ b/app/views/packages/_package_header.html.erb
@@ -0,0 +1,31 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li><%= link_to package.category_model.name, category_path(package.category_model) %></li>
+ <li class="active"><%= package.name %></li>
+</ol>
+
+<div class="row">
+ <div class="col-md-4">
+ <h1 class="stick-top kk-package-title" id="package-title" data-atom="<%= package.atom %>" data-category="<%= package.category %>" data-name="<%= package.name %>">
+ <small class="kk-package-cat"><%= package.category_model.name %>/</small>
+ <div>
+ <span class="mega-octicon octicon-package kk-package-icon"></span>
+ <div class="kk-package-name"><%= package.name %></div>
+ </div>
+ </h1>
+ </div>
+ <div class="col-md-8">
+ <p class="lead kk-package-maindesc">
+ <%= package.description %>
+ </p>
+
+ <p class="kk-package-homepage">
+ <% if '' != package.homepage.first %>
+ <span class="fa fa-fw fa-home"></span> <%= link_to package.homepage.first, package.homepage.first, rel: 'nofollow' %>
+ <% end %>
+ </p>
+ </div>
+</div>
+
+<hr>
diff --git a/app/views/packages/_package_result_row.html.erb b/app/views/packages/_package_result_row.html.erb
new file mode 100644
index 0000000..fd6c903
--- /dev/null
+++ b/app/views/packages/_package_result_row.html.erb
@@ -0,0 +1,4 @@
+<a class="list-group-item" href="<%= slf package_path package %>">
+ <h3 class="kk-search-result-header"><span class="text-muted"><%= package.category %>/</span><%= package.name %></h3>
+ <%= package.description %>
+</a> \ No newline at end of file
diff --git a/app/views/packages/_removal_notice.html.erb b/app/views/packages/_removal_notice.html.erb
new file mode 100644
index 0000000..20d226b
--- /dev/null
+++ b/app/views/packages/_removal_notice.html.erb
@@ -0,0 +1,5 @@
+<div class="alert alert-danger">
+ <strong><span class="fa fa-fw fa-warning"></span> This package is masked and could be removed soon!</strong><br>
+ The mask comment indicates that this package is scheduled for removal from our package repository.<br>
+ Please review the mask information below for more details.
+</div> \ No newline at end of file
diff --git a/app/views/packages/_resources.html.erb b/app/views/packages/_resources.html.erb
new file mode 100644
index 0000000..51576a9
--- /dev/null
+++ b/app/views/packages/_resources.html.erb
@@ -0,0 +1,35 @@
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t(:resources) %></h3>
+ </div>
+ <div class="list-group">
+ <a href="https://bugs.gentoo.org/buglist.cgi?quicksearch=<%= u package.atom %>" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-bug"></span>
+ <%= t :res_bugs %>
+ </a>
+ <a href="https://wiki.gentoo.org/index.php?title=Special%3ASearch&fulltext=Search&search=<%= u package.name %>" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-book"></span>
+ <%= t :res_docs %>
+ </a>
+ <a href="https://forums.gentoo.org/search.php?search_terms=all&show_results=topics&search_keywords=<%= u package.name %>&mode=results" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-comments-o"></span>
+ <%= t :res_forums %>
+ </a>
+ <a href="https://gitweb.gentoo.org/repo/gentoo.git/tree/<%= package.atom %>" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-code-fork"></span>
+ <%= t :res_repo %>
+ </a>
+ <a href="https://gitweb.gentoo.org/repo/gentoo.git/log/<%= package.atom %>?showmsg=1" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-history"></span>
+ <%= t :res_log %>
+ </a>
+ <a href="https://gitweb.gentoo.org/repo/gentoo.git/atom/<%= package.atom %>?h=master" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-rss"></span>
+ <%= t :res_feed %>
+ </a>
+ <a href="http://www.portagefilelist.de/site/query/listPackageVersions/?category=<%= package.category %>&package=<%= package.name %>&do#result" class="list-group-item" target="_blank">
+ <span class="fa fa-fw fa-files-o"></span>
+ <%= t :res_installed_files %> <small>(via PFL<span class="fa fa-fw fa-external-link-square"></span>)</small>
+ </a>
+ </div>
+</div>
diff --git a/app/views/packages/_useflag.html.erb b/app/views/packages/_useflag.html.erb
new file mode 100644
index 0000000..a60e589
--- /dev/null
+++ b/app/views/packages/_useflag.html.erb
@@ -0,0 +1,5 @@
+<ul class="kk-useflag-container <%= useflags.size > 10 ? 'kk-useflag-container-many' : 'kk-useflag-container-few' %>">
+<% useflags.each_pair do |flag, flag_data| %>
+ <li class="kk-useflag"><%= link_to flag, useflag_path(id: flag_data['name']), :title => strip_tags(flag_data['description']), 'data-toggle' => 'tooltip' %></li>
+<% end %>
+</ul>
diff --git a/app/views/packages/_version_card.html.erb b/app/views/packages/_version_card.html.erb
new file mode 100644
index 0000000..7045617
--- /dev/null
+++ b/app/views/packages/_version_card.html.erb
@@ -0,0 +1,14 @@
+<div class="kk-version-card">
+ <p><strong><%= version.version %></strong><%= version_slot version.slot %> <%= version_labels version %></p>
+ <p>
+ <%= keyword_label version, 'amd64' %>
+ <%= keyword_label version, 'x86' %>
+ <%= keyword_label version, 'alpha' %>
+ <%= keyword_label version, 'arm' %>
+ <%= keyword_label version, 'hppa' %>
+ <%= keyword_label version, 'ia64' %>
+ <%= keyword_label version, 'ppc' %>
+ <%= keyword_label version, 'ppc64' %>
+ <%= keyword_label version, 'sparc' %>
+ </p>
+</div>
diff --git a/app/views/packages/_version_row.html.erb b/app/views/packages/_version_row.html.erb
new file mode 100644
index 0000000..d30d974
--- /dev/null
+++ b/app/views/packages/_version_row.html.erb
@@ -0,0 +1,12 @@
+<tr>
+ <td class="kk-version kk-cell-sep-right"><strong><%= version.version %></strong><%= version_slot version.slot, version.subslot %> <%= version_labels version %></td>
+ <%= keyword_cell version, 'amd64' %>
+ <%= keyword_cell version, 'x86', true %>
+ <%= keyword_cell version, 'alpha' %>
+ <%= keyword_cell version, 'arm' %>
+ <%= keyword_cell version, 'hppa' %>
+ <%= keyword_cell version, 'ia64' %>
+ <%= keyword_cell version, 'ppc' %>
+ <%= keyword_cell version, 'ppc64' %>
+ <%= keyword_cell version, 'sparc' %>
+</tr>
diff --git a/app/views/packages/_versions.html.erb b/app/views/packages/_versions.html.erb
new file mode 100644
index 0000000..3484dc4
--- /dev/null
+++ b/app/views/packages/_versions.html.erb
@@ -0,0 +1,38 @@
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">
+ <%= t :box_versions %>
+ <span class="pull-right">
+ <a href="<%= about_help_path(anchor: 'keyword-legend') %>" aria-label="<%= t :show_table_legend %>" title="<%= t :legend %>" class="kk-box-meta-link" tabindex="0" role="button" id="kk-keyword-legend-btn">
+ <span class="fa fa-fw fa-question-circle"></span>
+ </a>
+ </span>
+ </h3>
+ </div>
+ <div class="table-responsive">
+ <table class="table table-bordered kk-versions-table">
+ <thead>
+ <tr>
+ <th class="kk-version kk-cell-sep-right"><%= t :version %></th>
+ <th class="kk-keyword-header kk-keyword">amd64</th>
+ <th class="kk-keyword-header kk-keyword kk-cell-sep-right">x86</th>
+ <th class="kk-keyword-header kk-keyword">alpha</th>
+ <th class="kk-keyword-header kk-keyword">arm</th>
+ <th class="kk-keyword-header kk-keyword">hppa</th>
+ <th class="kk-keyword-header kk-keyword">ia64</th>
+ <th class="kk-keyword-header kk-keyword">ppc</th>
+ <th class="kk-keyword-header kk-keyword">ppc64</th>
+ <th class="kk-keyword-header kk-keyword">sparc</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ <%= render partial: 'version_row', collection: versions, as: 'version' %>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+<script id="kk-keyword-legend-text" type="text/template">
+<%= render partial: 'keyword_legend' %>
+</script>
diff --git a/app/views/packages/added.html.erb b/app/views/packages/added.html.erb
new file mode 100644
index 0000000..97d5cb6
--- /dev/null
+++ b/app/views/packages/added.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li class="active"><%= t :added_packages %></li>
+</ol>
+
+<h1>
+ <%= t :added_packages %>
+ <%= feed_icon added_packages_path(format: :atom) %>
+</h1>
+
+<% cache("added-full-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'changed_package', object: change, as: 'change', locals: { package: _package, version: _package.latest_version } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(added_packages_url(format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/packages/changelog.html.erb b/app/views/packages/changelog.html.erb
new file mode 100644
index 0000000..df9242e
--- /dev/null
+++ b/app/views/packages/changelog.html.erb
@@ -0,0 +1,12 @@
+<% if @changelog.empty? -%>
+ <li class="list-group-item kk-panel-content-sorry">
+ <%= t :changelog_empty %>
+ <br><br>
+ <a href="https://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/<%= @package.atom %>/ChangeLog?view=markup" class="btn btn-default">
+ <span class="fa fa-fw fa-history"></span>
+ <%= t :view_cvs_changelog %>
+ </a>
+ </li>
+<% else %>
+ <%= render partial: 'changelog_entry', collection: @changelog, as: 'changelog' %>
+<% end %>
diff --git a/app/views/packages/changelog.json.jbuilder b/app/views/packages/changelog.json.jbuilder
new file mode 100644
index 0000000..a88a2db
--- /dev/null
+++ b/app/views/packages/changelog.json.jbuilder
@@ -0,0 +1 @@
+json.changes @changelog
diff --git a/app/views/packages/keyworded.html.erb b/app/views/packages/keyworded.html.erb
new file mode 100644
index 0000000..ff5b60c
--- /dev/null
+++ b/app/views/packages/keyworded.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li class="active"><%= t :keyworded_packages %></li>
+</ol>
+
+<h1>
+ <%= t :keyworded_packages %>
+ <%= feed_icon keyworded_packages_path(format: :atom) %>
+</h1>
+
+<% cache("keyworded-full-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(keyworded_packages_url(format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/packages/resolve.json.jbuilder b/app/views/packages/resolve.json.jbuilder
new file mode 100644
index 0000000..73ffdbb
--- /dev/null
+++ b/app/views/packages/resolve.json.jbuilder
@@ -0,0 +1,4 @@
+json.packages @packages do |package|
+ json.extract! package, :atom, :description
+ json.href slf package_url(id: package.atom)
+end
diff --git a/app/views/packages/search.html.erb b/app/views/packages/search.html.erb
new file mode 100644
index 0000000..fe77dd3
--- /dev/null
+++ b/app/views/packages/search.html.erb
@@ -0,0 +1,38 @@
+<h1 class="first-header">Search Results <small>for <%= params[:q] %></small></h1>
+
+<% if @packages.size > 0 %>
+<div class="panel panel-default">
+ <div class="panel-heading">
+ Results <%= @offset + 1 %>—<%= [@offset + Package.default_search_size, @packages.total].min %> of <%= @packages.total %>
+ </div>
+ <div class="list-group">
+ <%= render partial: 'package_result_row', collection: @packages, as: 'package' %>
+ </div>
+ <div class="panel-footer">
+ <div class="btn-group" role="group" aria-label="Result navigation">
+ <%= link_to '< Prev', search_packages_path(q: params[:q], o: [@offset - Package.default_search_size, 0].max), class: 'btn btn-default' + (@offset > 0 ? '' : ' disabled') %>
+ <%= link_to 'Next >', search_packages_path(q: params[:q], o: @offset + Package.default_search_size), class: 'btn btn-default ' + ((@offset + Package.default_search_size) > @packages.total ? 'disabled' : '') %>
+ </div>
+ </div>
+</div>
+<% else %>
+<div class="jumbotron">
+ <h2 class="site-welcome stick-top">Nothing found. :( Try again?</h2>
+
+ <form action="<%= search_packages_path %>" method="get">
+ <div class="typeahead-container">
+ <div class="typeahead-field">
+ <span class="typeahead-query">
+ <input id="q" name="q" type="search" autocomplete="off" placeholder="<%= t :find_packages %>" aria-label="<%= t :find_packages %>" value="<%= params[:q] %>">
+ </span>
+ <span class="typeahead-button">
+ <button type="submit" title="<%= t :find %>" aria-label="<%= t :find %>">
+ <span class="typeahead-search-icon"></span><span class="sr-only"><%= t :find %></span>
+ </button>
+ </span>
+ </div>
+ </div>
+ </form>
+</div>
+<%= javascript_include_tag 'index/typeahead.js' %>
+<% end %>
diff --git a/app/views/packages/show.html.erb b/app/views/packages/show.html.erb
new file mode 100644
index 0000000..bc649ba
--- /dev/null
+++ b/app/views/packages/show.html.erb
@@ -0,0 +1,28 @@
+<% cache "#{@package.atom}-#{@package.metadata_hash}" do %>
+<%= render partial: 'package_header', object: @package, as: 'package' %>
+
+<div class="row">
+ <div class="col-md-9">
+ <%= render partial: 'versions', object: @package.versions, as: 'versions' %>
+
+ <% if @package.removal_pending? %>
+ <%= render partial: 'removal_notice', object: @package, as: 'package' %>
+ <% end %>
+
+ <%= render partial: 'maintainer_needed_notice', object: @package, as: 'package' %>
+ <%= render partial: 'metadata', object: @package, as: 'package', locals: { latest_version: @package.versions.first} %>
+
+ <%= render partial: 'masks', object: @package.versions, as: 'versions' %>
+
+ <%= render partial: 'changelog', object: @changelog, as: 'changelog' %>
+ </div>
+ <div class="col-md-3">
+ <%= render partial: 'resources', object: @package, as: 'package' %>
+ </div>
+</div>
+
+<%= javascript_include_tag 'packages/show' %>
+<% content_for :head do %>
+ <%= alternate_feed_link('https://gitweb.gentoo.org/repo/gentoo.git/atom/%s?h=master' % @package.atom, t(:raw_git_feed)) %>
+<% end %>
+<% end %>
diff --git a/app/views/packages/show.json.jbuilder b/app/views/packages/show.json.jbuilder
new file mode 100644
index 0000000..3b8a012
--- /dev/null
+++ b/app/views/packages/show.json.jbuilder
@@ -0,0 +1,43 @@
+json.extract! @package, :atom, :description
+json.href slf package_url(id: @package.atom)
+
+json.versions @package.versions do |version|
+ json.version version.version
+ json.keywords version.keywords
+ json.masks version.masks
+end
+
+json.herds @package.herds
+json.maintainers @package.maintainers do |maintainer|
+ json.email maintainer['email']
+ json.name maintainer['name']
+ json.description maintainer['description']
+ json.type maintainer['type']
+
+ if maintainer['type'] == 'project'
+ json.members project_members(maintainer['email'])
+ end
+end
+
+json.use do
+ json.local @package.versions.first.useflags[:local] do |flag|
+ json.name flag[1][:name]
+ json.description strip_tags flag[1][:description]
+ end
+
+ json.global @package.versions.first.useflags[:global] do |flag|
+ json.name flag[1][:name]
+ json.description strip_tags flag[1][:description]
+ end
+
+ json.use_expand @package.versions.first.useflags[:use_expand] do |flag|
+ json.set! flag[0] do
+ json.array! flag[1] do |expand_flag|
+ json.name expand_flag[0]
+ json.description strip_tags expand_flag[1][:description]
+ end
+ end
+ end
+end
+
+json.extract! @package, :updated_at
diff --git a/app/views/packages/stable.html.erb b/app/views/packages/stable.html.erb
new file mode 100644
index 0000000..7b230fe
--- /dev/null
+++ b/app/views/packages/stable.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li class="active"><%= t :stable_packages %></li>
+</ol>
+
+<h1>
+ <%= t :stable_packages %>
+ <%= feed_icon stable_packages_path(format: :atom) %>
+</h1>
+
+<% cache("stable-full-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(stable_packages_url(format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/packages/suggest.json.jbuilder b/app/views/packages/suggest.json.jbuilder
new file mode 100644
index 0000000..fcd8ba5
--- /dev/null
+++ b/app/views/packages/suggest.json.jbuilder
@@ -0,0 +1 @@
+json.results @packages, :name, :category, :description
diff --git a/app/views/packages/updated.html.erb b/app/views/packages/updated.html.erb
new file mode 100644
index 0000000..b774c58
--- /dev/null
+++ b/app/views/packages/updated.html.erb
@@ -0,0 +1,23 @@
+<ol class="breadcrumb">
+ <li><a href="/">Home</a></li>
+ <li><%= link_to t(:packages), categories_path %></li>
+ <li class="active"><%= t :updated_packages %></li>
+</ol>
+
+<h1>
+ <%= t :updated_packages %>
+ <%= feed_icon updated_packages_path(format: :atom) %>
+</h1>
+
+<% cache("updated-full-#{@changes.hash}") do %>
+ <ul class="list-group">
+ <% @changes.each do |change|
+ _package = Package.find_by(:atom, cp_to_atom(change.category, change.package)) %>
+ <%= render partial: 'changed_package', object: change, as: 'change', locals: { package: _package, version: _package.version(change.version) } %>
+ <% end %>
+ </ul>
+<% end %>
+
+<% content_for :head do %>
+ <%= alternate_feed_link(updated_packages_url(format: :atom), t(:atom_feed)) %>
+<% end %>
diff --git a/app/views/useflags/_useflag_header.html.erb b/app/views/useflags/_useflag_header.html.erb
new file mode 100644
index 0000000..9422fac
--- /dev/null
+++ b/app/views/useflags/_useflag_header.html.erb
@@ -0,0 +1,5 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><%= link_to t(:use_flags), useflags_path %></li>
+ <li class="active"><%= params[:id] %></li>
+</ol>
diff --git a/app/views/useflags/_useflag_result_row.html.erb b/app/views/useflags/_useflag_result_row.html.erb
new file mode 100644
index 0000000..084669f
--- /dev/null
+++ b/app/views/useflags/_useflag_result_row.html.erb
@@ -0,0 +1,4 @@
+<a class="list-group-item" href="<%= slf useflag_path useflag[:name] %>">
+ <h3 class="kk-search-result-header"><%= useflag[:name] %></h3>
+ <%= useflag[:description] %>
+</a>
diff --git a/app/views/useflags/index.html.erb b/app/views/useflags/index.html.erb
new file mode 100644
index 0000000..ac006f2
--- /dev/null
+++ b/app/views/useflags/index.html.erb
@@ -0,0 +1,45 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li class="active"><%= t :use_flags %></li>
+</ol>
+
+<h1><%= t :use_flags %></h1>
+
+<div class="alert alert-info">
+ Looking for the full USE flag index?
+ You can find it on our <a href="https://www.gentoo.org/support/use-flags/" class="alert-link">main website</a>.
+</div>
+
+<form action="<%= search_useflags_path %>" method="get" class="useflag-search">
+ <div class="typeahead-container">
+ <div class="typeahead-field">
+ <span class="typeahead-query">
+ <input id="q" name="q" type="search" autocomplete="off" placeholder="Find USE flags">
+ </span>
+ <span class="typeahead-button">
+ <button type="submit">
+ <span class="typeahead-search-icon"></span>
+ </button>
+ </span>
+ </div>
+ </div>
+</form>
+
+<br>
+
+<div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title">Most widely used USE flags</h3>
+ </div>
+ <noscript>
+ <div class="panel-body kk-panel-content-sorry">
+ This feature requires JavaScript to work.
+ </div>
+ </noscript>
+ <div class="panel-body kk-useflag-bubble-container" id="bubble-placeholder" style="display: none;">
+ </div>
+</div>
+
+<%= javascript_include_tag 'useflags/typeahead.js' %>
+<%= javascript_include_tag 'd3.min.js' %>
+<%= javascript_include_tag 'useflags/render-bubbles.js' %>
diff --git a/app/views/useflags/popular.json.jbuilder b/app/views/useflags/popular.json.jbuilder
new file mode 100644
index 0000000..d174c9e
--- /dev/null
+++ b/app/views/useflags/popular.json.jbuilder
@@ -0,0 +1,10 @@
+json.name 'flags'
+json.children @popular_useflags do |flag|
+ # Very cheap filter for USE_EXPAND flags
+ next if flag['key'].include? '_'
+ next if flag['key'] =~ /^(doc|test|debug)$/
+
+ json.name flag['key']
+ json.size flag['doc_count']
+ json.children nil
+end
diff --git a/app/views/useflags/search.html.erb b/app/views/useflags/search.html.erb
new file mode 100644
index 0000000..061405b
--- /dev/null
+++ b/app/views/useflags/search.html.erb
@@ -0,0 +1,16 @@
+<ol class="breadcrumb">
+ <li><a href="/"><%= t :home %></a></li>
+ <li><%= link_to t(:use_flags), useflags_path %></li>
+ <li class="active">Search</li>
+</ol>
+
+<h1>USE Flag Search Results <small>for <%= params[:q] %></small></h1>
+
+<div class="panel panel-default">
+ <div class="panel-heading">
+ Results
+ </div>
+ <div class="list-group">
+ <%= render partial: 'useflag_result_row', collection: @flags, as: 'useflag' %>
+ </div>
+</div>
diff --git a/app/views/useflags/show.html.erb b/app/views/useflags/show.html.erb
new file mode 100644
index 0000000..b5b8bb6
--- /dev/null
+++ b/app/views/useflags/show.html.erb
@@ -0,0 +1,61 @@
+<%= render partial: 'useflag_header' %>
+
+<div class="row">
+ <div class="col-md-4">
+ <h1 class="stick-top">
+ <span class="fa fa-fw fa-sliders"></span>
+ <%= params[:id] %>
+ </h1>
+ </div>
+ <div class="col-md-8">
+ <% unless @useflags[:global].empty? %>
+ <div class="kk-useflag-group"><%= t :global_use_flag %></div>
+ <p class="lead" style="margin: 0;">
+ <%= @useflags[:global].first.description %>
+ </p>
+ <% else %>
+ <div class="kk-useflag-group"><%= t :local_use_flag %></div>
+ <% end %>
+ </div>
+</div>
+
+<hr>
+
+<% unless @useflags[:local].empty? %>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :local_use_package_list, flag: params[:id] %></h3>
+ </div>
+ <div class="table-responsive">
+ <table class="table">
+ <thead>
+ <th><%= t :package %></th>
+ <th><%= t :flag_description, flag: params[:id] %></th>
+ </thead>
+ <tbody>
+ <% @useflags[:local].keys.sort.each do |package| %>
+ <tr>
+ <th class="kk-nobreak-cell"><%= link_to package, slf(package_path(package)) %></th>
+ <td><%= annotate_useflag_description @useflags[:local][package].description %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+ </div>
+ </div>
+<% end %>
+
+<% unless @useflags[:global].empty? %>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :providing_packages_list, flag: params[:id], count: @packages.count %></h3>
+ </div>
+ <div class="panel-body">
+ <ul class="kk-col-list kk-3col-list kk-useflag-listing">
+ <% @packages.each do |package| %>
+ <li><%= link_to_package package['key'] %></li>
+ <% end %>
+ </ul>
+ </div>
+ </div>
+<% end %>
diff --git a/app/views/useflags/show_use_expand.html.erb b/app/views/useflags/show_use_expand.html.erb
new file mode 100644
index 0000000..45c2779
--- /dev/null
+++ b/app/views/useflags/show_use_expand.html.erb
@@ -0,0 +1,57 @@
+<%= render partial: 'useflag_header' %>
+
+<div class="row">
+ <div class="col-md-4">
+ <h1 class="stick-top">
+ <span class="fa fa-fw fa-sliders"></span>
+ <%= @useflag.strip_use_expand %>
+ </h1>
+ </div>
+ <div class="col-md-8">
+ <div class="kk-useflag-group"><%= t :named_use_expand_flag, name: @use_expand_flag_name %></div>
+ <p class="lead" style="margin: 0;">
+ <%= @useflags[:use_expand].first.description %>
+ </p>
+ </div>
+</div>
+
+<hr>
+
+<% unless @use_expand_flags.empty? %>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :other_use_expand_list, flag: @use_expand_flag_name %></h3>
+ </div>
+ <div class="table-responsive">
+ <table class="table">
+ <thead>
+ <th><%= t :use_flag %></th>
+ <th><%= t :description %></th>
+ </thead>
+ <tbody>
+ <% @use_expand_flags.each do |flag| %>
+ <tr>
+ <th class="kk-nobreak-cell"><%= link_to flag.name, slf(useflag_path(flag.name)) %></th>
+ <td><%= flag.description %></td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+ </div>
+ </div>
+<% end %>
+
+<% unless @packages.empty? %>
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h3 class="panel-title"><%= t :providing_packages_list, flag: params[:id], count: @packages.count %></h3>
+ </div>
+ <div class="panel-body">
+ <ul class="kk-3col-list kk-useflag-listing">
+ <% @packages.each do |package| %>
+ <li><%= link_to_package package['key'] %></li>
+ <% end %>
+ </ul>
+ </div>
+ </div>
+<% end %>
diff --git a/app/views/useflags/suggest.json.jbuilder b/app/views/useflags/suggest.json.jbuilder
new file mode 100644
index 0000000..5e1571f
--- /dev/null
+++ b/app/views/useflags/suggest.json.jbuilder
@@ -0,0 +1 @@
+json.results @flags