allura-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From brond...@apache.org
Subject [1/4] allura git commit: [#8093] theme layout using foundation
Date Mon, 12 Nov 2018 21:05:21 GMT
Repository: allura
Updated Branches:
  refs/heads/db/8093b [created] cd928bccc


[#8093] theme layout using foundation


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/cd928bcc
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/cd928bcc
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/cd928bcc

Branch: refs/heads/db/8093b
Commit: cd928bccc0b4809e835ecea8d519e8e5b7e1ccc9
Parents: b36f5a1
Author: Dave Brondsema <dave@brondsema.net>
Authored: Fri Nov 9 16:26:44 2018 -0500
Committer: Dave Brondsema <dave@brondsema.net>
Committed: Mon Nov 12 16:03:38 2018 -0500

----------------------------------------------------------------------
 Allura/allura/lib/plugin.py                     |   7 +-
 Allura/allura/nf/responsive/scss/_chrome.scss   |  67 ++++++
 Allura/allura/nf/responsive/scss/_settings.scss |  10 +-
 Allura/allura/nf/responsive/scss/_sidebar.scss  |  27 +++
 Allura/allura/nf/responsive/scss/styles.scss    |   5 +
 Allura/allura/templates/award.html              |   8 -
 .../allura/templates/jinja_master/master.html   |   2 +-
 .../templates/jinja_master/theme_macros.html    |   2 +-
 .../templates/neighborhood_admin_accolades.html |   8 -
 .../templates/neighborhood_admin_overview.html  |   8 -
 Allura/allura/templates/neighborhood_help.html  |   8 -
 .../allura/templates/neighborhood_moderate.html |   8 -
 .../templates/neighborhood_project_list.html    |   8 -
 Allura/allura/templates/neighborhood_stats.html |   4 -
 .../templates/neighborhood_stats_adminlist.html |   4 -
 .../jinja_master/master.html                    | 167 +++++++++++++++
 .../jinja_master/nav_menu.html                  |  77 +++++++
 .../jinja_master/neigh_nav_menu.html            |  40 ++++
 .../jinja_master/sidebar_menu.html              | 101 +++++++++
 .../jinja_master/theme_macros.html              | 211 +++++++++++++++++++
 .../jinja_master/top_nav.html                   |  84 ++++++++
 Allura/development.ini                          |   3 +-
 22 files changed, 798 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 9955e21..921d989 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -1399,8 +1399,13 @@ class ThemeProvider(object):
 
 
 class ResponsiveTheme(ThemeProvider):
+    master_template = 'allura:templates_responsive/jinja_master/master.html'
+    jinja_macros = 'allura:templates_responsive/jinja_master/theme_macros.html'
+    nav_menu = 'allura:templates_responsive/jinja_master/nav_menu.html'
+    top_nav = 'allura:templates_responsive/jinja_master/top_nav.html'
+    sidebar_menu = 'allura:templates_responsive/jinja_master/sidebar_menu.html'
+
     def require(self):
-        g.register_theme_css('../allura/css/site_style.css', compress=False)  # temporarily include original theme too
         g.register_theme_css('css/styles.css', compress=False)
 
 

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/nf/responsive/scss/_chrome.scss
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/responsive/scss/_chrome.scss b/Allura/allura/nf/responsive/scss/_chrome.scss
new file mode 100644
index 0000000..8171a5d
--- /dev/null
+++ b/Allura/allura/nf/responsive/scss/_chrome.scss
@@ -0,0 +1,67 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+/**
+ Styles for the overall page layout, header, footer, etc.
+
+ Custom themes most likely would not want these rules.
+ */
+
+.project-icon {
+    margin-right: $global-margin;
+}
+
+.title h1 {
+    margin-bottom: 0;
+}
+
+#top_nav_admin > ul > li.selected {
+    background: $light-gray;
+}
+
+#content_base {
+    border: 1px solid $light-gray;
+}
+
+.column#sidebar {
+    border-right: 1px solid $light-gray;
+}
+
+#messages {
+    position: fixed;
+    z-index: 100000;
+    top: 45px;
+    right: 20px;
+    .message {
+        @include callout();
+        min-width: rem-calc(400);
+        &.info {
+            @include callout-style(get-color(primary));
+        }
+        &.confirm {
+            @include callout-style(get-color(success));
+        }
+        &.warning {
+            @include callout-style(get-color(warning));
+        }
+        &.error {
+            @include callout-style(get-color(alert));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/nf/responsive/scss/_settings.scss
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/responsive/scss/_settings.scss b/Allura/allura/nf/responsive/scss/_settings.scss
index 59a7e4a..7ec77cd 100644
--- a/Allura/allura/nf/responsive/scss/_settings.scss
+++ b/Allura/allura/nf/responsive/scss/_settings.scss
@@ -62,6 +62,13 @@
 
 @import 'util/util';
 
+
+// Allura specific settings
+
+$sidebar-width: 240px;
+
+
+
 // 1. Global
 // ---------
 
@@ -856,7 +863,7 @@ $topbar-unstack-breakpoint: medium;
 // 56. Xy Grid
 // -----------
 
-$xy-grid: true;
+$xy-grid: false;
 $grid-container: $global-width;
 $grid-columns: 12;
 $grid-margin-gutters: (
@@ -867,3 +874,4 @@ $grid-padding-gutters: $grid-margin-gutters;
 $grid-container-padding: $grid-padding-gutters;
 $grid-container-max: $global-width;
 $xy-block-grid-max: 8;
+

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/nf/responsive/scss/_sidebar.scss
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/responsive/scss/_sidebar.scss b/Allura/allura/nf/responsive/scss/_sidebar.scss
new file mode 100644
index 0000000..fae40f0
--- /dev/null
+++ b/Allura/allura/nf/responsive/scss/_sidebar.scss
@@ -0,0 +1,27 @@
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+/**
+ Non-thematic sidebar rules
+ */
+
+.column#sidebar {
+    flex: 0 0 $sidebar-width;
+    max-width: $sidebar-width;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/nf/responsive/scss/styles.scss
----------------------------------------------------------------------
diff --git a/Allura/allura/nf/responsive/scss/styles.scss b/Allura/allura/nf/responsive/scss/styles.scss
index 8e203ed..02b768a 100644
--- a/Allura/allura/nf/responsive/scss/styles.scss
+++ b/Allura/allura/nf/responsive/scss/styles.scss
@@ -77,3 +77,8 @@ NOTE: this includes pretty much everything initially
 
 // @include motion-ui-transitions;
 // @include motion-ui-animations;
+
+
+
+@import '_chrome';
+@import '_sidebar';

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/award.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/award.html b/Allura/allura/templates/award.html
index 329b8b2..a0cc736 100644
--- a/Allura/allura/templates/award.html
+++ b/Allura/allura/templates/award.html
@@ -22,14 +22,6 @@
 
 {% block header %}Award{% endblock %}
 
-{% block nav_menu %}
-{% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-{% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
         <form action="{{award.longurl()}}/update" method="post" enctype="multipart/form-data">
           <table>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/jinja_master/master.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/master.html b/Allura/allura/templates/jinja_master/master.html
index f4b19ac..3892f64 100644
--- a/Allura/allura/templates/jinja_master/master.html
+++ b/Allura/allura/templates/jinja_master/master.html
@@ -93,7 +93,7 @@
 
 {% set flash = tg.flash_obj.render('flash', use_js=False) %}
 
-{% call theme_macros.all_content_wrapper() %}
+{% call theme_macros.all_content_wrapper(login_url, logout_url) %}
     {{ theme_macros.header(g.login_url, '/auth/logout') }}
     {{ theme_macros.site_notification() }}
     {% block masthead %}{% endblock %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/jinja_master/theme_macros.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/theme_macros.html b/Allura/allura/templates/jinja_master/theme_macros.html
index f403243..47b632d 100644
--- a/Allura/allura/templates/jinja_master/theme_macros.html
+++ b/Allura/allura/templates/jinja_master/theme_macros.html
@@ -56,7 +56,7 @@ http://stackoverflow.com/questions/26582731/redefining-imported-jinja-macros
 
 
 {% if not all_content_wrapper %}
-{% macro all_content_wrapper() -%}
+{% macro all_content_wrapper(login_url, logout_url) -%}
 {{- caller(**kwargs) -}}
 {%- endmacro %}
 {% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_admin_accolades.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_admin_accolades.html b/Allura/allura/templates/neighborhood_admin_accolades.html
index ca9bb86..5e28591 100644
--- a/Allura/allura/templates/neighborhood_admin_accolades.html
+++ b/Allura/allura/templates/neighborhood_admin_accolades.html
@@ -22,14 +22,6 @@
 
 {% block header %}Award Administration for {{neighborhood.name}}{% endblock %}
 
-{% block nav_menu %}
-{% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-{% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
           {% if awards_count > 0 %}
           <p>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_admin_overview.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_admin_overview.html b/Allura/allura/templates/neighborhood_admin_overview.html
index da2be53..3ae9f42 100644
--- a/Allura/allura/templates/neighborhood_admin_overview.html
+++ b/Allura/allura/templates/neighborhood_admin_overview.html
@@ -22,14 +22,6 @@
 
 {% block header %}Administration Overview for {{neighborhood.name}}{% endblock %}
 
-{% block nav_menu %}
-{% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-{% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
     {{c.overview_form.display(value=neighborhood, neighborhood=neighborhood, allow_wiki_as_root=allow_wiki_as_root)}}
 {% endblock %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_help.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_help.html b/Allura/allura/templates/neighborhood_help.html
index 18f2568..7a2cd83 100644
--- a/Allura/allura/templates/neighborhood_help.html
+++ b/Allura/allura/templates/neighborhood_help.html
@@ -22,14 +22,6 @@
 
 {% block header %}Neighborhood Help{% endblock %}
 
-{% block nav_menu %}
-    {% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-    {% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
   <p>Welcome to your neighborhood!  We strive to make many neighborhood features easy to understand on their own,
   but there's always room for some additional explanation.  Here's information on a few advanced features.</p>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_moderate.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_moderate.html b/Allura/allura/templates/neighborhood_moderate.html
index c164140..22fe175 100644
--- a/Allura/allura/templates/neighborhood_moderate.html
+++ b/Allura/allura/templates/neighborhood_moderate.html
@@ -23,14 +23,6 @@
 
 {% block header %}{{neighborhood.name}} Moderation{% endblock %}
 
-{% block nav_menu %}
-{% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-{% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
   <h2>Invite Projects?</h2>
   <form method="POST" action="invite" class="grid-10">

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_project_list.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_project_list.html b/Allura/allura/templates/neighborhood_project_list.html
index ea4d3c5..91fecd3 100644
--- a/Allura/allura/templates/neighborhood_project_list.html
+++ b/Allura/allura/templates/neighborhood_project_list.html
@@ -37,14 +37,6 @@
   {% endif %}
 {% endblock %}
 
-{% block nav_menu %}
-{% include 'allura:templates/jinja_master/neigh_nav_menu.html' %}
-{% endblock %}
-
-{% block top_nav %}
-{% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block inner_grid %}{% endblock %}
 {% block header_classes %} colored{% endblock %}
 

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_stats.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_stats.html b/Allura/allura/templates/neighborhood_stats.html
index 3b0b0ee..0ef680d 100644
--- a/Allura/allura/templates/neighborhood_stats.html
+++ b/Allura/allura/templates/neighborhood_stats.html
@@ -18,10 +18,6 @@
 -#}
 {% extends g.theme.master %}
 
-{% block top_nav %}
-    {% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block title %}Neighborhood Statistics{% endblock %}
 
 {% block header %}Neighborhood Statistics{% endblock %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates/neighborhood_stats_adminlist.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/neighborhood_stats_adminlist.html b/Allura/allura/templates/neighborhood_stats_adminlist.html
index 4deafe1..c0ffce7 100644
--- a/Allura/allura/templates/neighborhood_stats_adminlist.html
+++ b/Allura/allura/templates/neighborhood_stats_adminlist.html
@@ -22,10 +22,6 @@
 
 {% block header %}Admins list{% endblock %}
 
-{% block top_nav %}
-    {% include 'allura:templates/jinja_master/top_nav.html' %}
-{% endblock %}
-
 {% block content %}
 <table>
   <thead>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/master.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/master.html b/Allura/allura/templates_responsive/jinja_master/master.html
new file mode 100644
index 0000000..ecb1290
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/master.html
@@ -0,0 +1,167 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+<!DOCTYPE html>
+<!-- Server: {{g.server_name}} -->
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
+{% if g.theme.jinja_macros %}
+    {% import g.theme.jinja_macros as theme_macros with context %}
+{% endif %}
+{% do g.register_forge_js('js/jquery-base.js', location='head_js') %}{# TODO: upgrade #}
+{% do g.register_forge_js('js/foundation.min.js', location='head_js', compress=False) %}
+{% do g.register_forge_js('js/jquery.notify.js') %}
+{% do g.register_forge_js('js/jquery.tooltipster.js') %}{#  TODO: use foundation #}
+{% do g.register_forge_js('js/sylvester.js') %}
+{% do g.register_forge_js('js/twemoji.min.js') %}
+{% do g.register_forge_js('js/allura-base.js') %}
+{% do g.register_forge_js('js/checklist.js') %}
+{% do g.register_forge_css('css/forge/hilite.css') %}
+{% do g.register_forge_css('css/forge/tooltipster.css') %}{#  TODO: use foundation #}
+{% do g.register_forge_css('css/font-awesome.min.css', compress=False) %}
+{% do g.theme.require() %}
+{% do g.register_forge_js('js/admin_modal.js') %}
+{% do g.register_js('js/jquery.lightbox_me.js') %}
+{% if h.has_access(c.project, 'admin')() %}
+    {# this would be better placed in top_nav.html but that file is included later so its too late for it to register
+       any css.  (Unlike other html files which are the top-level file and extend this master.html) #}
+    {% do g.register_forge_css('css/navbar.css') %}
+{% endif %}
+{% do g.register_forge_js('js/memorable.js') %}
+{% do g.resource_manager.register_widgets(c) %}
+
+<html lang="en" class="no-js">
+<head>
+    <meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
+    <title>{% block title %}Your title goes here{% endblock %}</title>
+    {{ theme_macros.extra_header(g.theme_href('')) }}
+    {% for blob in g.resource_manager.emit('head_css') %}
+        {{ blob }}
+    {% endfor %}
+    {% for blob in g.resource_manager.emit('head_js') %}
+        {{ blob }}
+    {% endfor %}
+
+    {% if c.project and c.project.neighborhood.css %}
+        <style type="text/css">
+            {{c.project.neighborhood.get_custom_css()|safe}}
+        </style>
+    {% elif neighborhood and neighborhood.css %}
+        <style type="text/css">
+            {{neighborhood.get_custom_css()}}
+        </style>
+    {% endif %}
+    {% block extra_css %}{% endblock %}
+    <style>.{{ g.antispam.honey_class }} {
+        display: none
+    }</style>
+
+    {% block head %}
+    {% endblock %}
+    {% if g.production_mode %}{{ g.analytics.display() }}{% endif %}
+    {% block head_bottom -%}
+    {% endblock %}
+</head>
+
+<body{% block body_attrs %}{% endblock %} class="{% block body_css_class %}{% endblock %}" id="forge">
+{% block body_top_js %}
+    {% for blob in g.resource_manager.emit('body_top_js') %}
+        {{ blob }}
+    {% endfor %}
+{% endblock %}
+
+{% set flash = tg.flash_obj.render('flash', use_js=False) %}
+
+{% call theme_macros.all_content_wrapper(g.login_url, '/auth/logout') %}
+    {{ theme_macros.header(g.login_url, '/auth/logout') }}
+    {{ theme_macros.site_notification() }}
+    {% block masthead %}{% endblock %}
+    <section id="page-body" class="{{ g.document_class(neighborhood) }} {% block page_body_classes %}{% endblock %}">
+        {% if c.project and c.project.is_nbhd_project %}
+            {% set neighborhood=c.project.neighborhood %}
+            {% include 'allura:templates_responsive/jinja_master/neigh_nav_menu.html' with context %}
+        {% else %}
+            {% block nav_menu %}
+                {% include g.theme.nav_menu %}
+            {% endblock %}
+        {% endif %}
+        {% block top_nav %}
+            {% include g.theme.top_nav %}
+        {% endblock %}
+        <div id="content_base" class="row">
+            {% block content_base %}
+                {% if not hide_left_bar %}
+                    {% block sidebar_menu %}
+                        {% include g.theme.sidebar_menu %}
+                    {% endblock %}
+                {% endif %}
+                <div class="column">
+                    <h2 class="{% block header_classes %} title{% endblock %}">{% block header %}{% endblock %}
+                        <!-- actions -->
+                        <small>
+                            {% block actions %}{% endblock %}
+                        </small>
+                        <!-- /actions -->
+                    </h2>
+                    {% block edit_box %}{% endblock %}
+                    <div>
+                        {% block before_content %}{% endblock %}
+                        {% block content %}{% endblock %}
+                    </div>
+                    {% if show_right_bar %}
+                        <div class="columns">
+                            {% block right_content %}{% endblock %}
+                        </div>
+                    {% endif %}
+                    {% block after_content %}{% endblock %}
+                </div>
+            {% endblock %}
+        </div>
+    </section>
+    {{ theme_macros.footer(g.year(), g.theme_href('')) }}
+{% endcall %}
+
+<div id="messages">
+    {% for n in h.pop_user_notifications() %}
+        <section class="message {{ n.subject or 'info' }}">
+            <header>Notification:</header>
+            <div class="content">{{ n.text }}</div>
+        </section>
+    {% endfor %}
+</div>
+{% if c.show_login_overlay %}
+    {{ theme_macros.login_overlay() }}
+{% endif %}
+{% for blob in g.resource_manager.emit('body_js') %}
+    {{ blob }}
+{% endfor %}
+{% for blob in g.resource_manager.emit('body_js_tail') %}
+    {{ blob }}
+{% endfor %}
+{% block extra_js %}{% endblock %}
+{% if neighborhood %}
+    {{ neighborhood.site_specific_html | safe }}
+{% elif c.project.neighborhood %}
+    {{ c.project.neighborhood.site_specific_html | safe }}
+{% endif %}
+{{ theme_macros.custom_js() }}
+{% if flash %}
+    <script type="text/javascript">{{ flash | safe }}</script>
+{% endif %}
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/nav_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/nav_menu.html b/Allura/allura/templates_responsive/jinja_master/nav_menu.html
new file mode 100644
index 0000000..5e2d6ee
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/nav_menu.html
@@ -0,0 +1,77 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
+{% import g.theme.jinja_macros as theme_macros with context %}
+{% set n = c.project.neighborhood %}
+{% if not c.project or (n.neighborhood_project == c.project and not n.show_title) %}
+  <!-- no nav menu -->
+{% else %}
+    {% if not c.project.is_user_project %}
+    {{ theme_macros.breadcrumbs(c.project, c.app) }}
+    {% endif %}
+    <div class="row collapse">
+        <div class="column shrink project-icon">
+            {% if c.project.is_user_project %}
+                {{lib.gravatar(c.project.user_project_of, size=90)}}
+            {% elif c.project.icon %}
+                <img alt="Project Logo" {{ lib.project_icon_srcs(c.project, base_size=90) }}>
+            {% endif %}
+        </div>
+        <div class="column title">
+            <div class="row">
+            <h1>
+                <a href="{{c.project.url()}}">
+                    {%- if c.project.is_user_project -%}
+                        {{ c.project.user_project_of.display_name }}
+                    {%- elif not c.project.is_nbhd_project -%}
+                        {{ c.project.name }}
+                    {%- endif -%}
+                </a>
+            </h1>
+            {% set status = c.project.troves_by_type('developmentstatus')|sort(attribute='fullname') %}
+            {% set status = status[-1] %}
+            {% if status and status.shortname not in ['production', 'mature'] %}
+                <span class="{{ status.shortname }}">{{ status.shortname }}</span>
+            {% endif %}
+            </div>
+            {% if c.project.summary %}
+            <div class="row project_summary{% if c.project.icon %} with-icon{% endif %}">
+                {{c.project.summary}}
+            </div>
+            {% endif %}
+            {% if not c.project.is_user_project %}
+            <div class="row">
+            <div class="brought-by{% if c.project.icon %} with-icon{% endif %}">
+                Brought to you by:
+                {% set admins = c.project.admins()|sort(attribute='username') %}
+                {% for admin in admins[:5] %}
+                    {% if loop.last and admins|length > 5 -%}
+                        and <a href="{{ c.project.url() }}_members/">{{ admins|length - 4 }} others</a>
+                    {% else %}
+                        <a href="{{ admin.url() }}">{{ admin.username }}</a>{{ ',' if not loop.last }}
+                    {% endif %}
+                {%- endfor -%}
+            </div>
+            </div>
+            {% endif %}
+        </div>
+
+        {{ theme_macros.project_header_right(c.project, c.app) }}
+    </div>
+{% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/neigh_nav_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/neigh_nav_menu.html b/Allura/allura/templates_responsive/jinja_master/neigh_nav_menu.html
new file mode 100644
index 0000000..8258cf1
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/neigh_nav_menu.html
@@ -0,0 +1,40 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
+{% if not neighborhood or not neighborhood.show_title %}
+    <!-- no nav menu -->
+{% else %}
+    <div class="row collapse">
+        <div class="column shrink project-icon">
+            {% if neighborhood.icon %}
+                <a href="{{neighborhood.url()}}"><img {{ lib.project_icon_srcs(neighborhood.neighborhood_project, base_size=90) }} alt="{{neighborhood.name}} Logo"/></a>
+            {% endif %}
+        </div>
+        <div class="column">
+            <h1 class="project_title"><a href="{{neighborhood.url()}}">{{neighborhood.name}}</a></h1>
+        </div>
+        {% if neighborhood.project_list_url %}
+            <div class="column shrink project_title_link">
+            <a href="{{neighborhood.project_list_url}}">
+              View Projects
+            </a>
+            </div>
+        {% endif %}
+    </div>
+{% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/sidebar_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/sidebar_menu.html b/Allura/allura/templates_responsive/jinja_master/sidebar_menu.html
new file mode 100644
index 0000000..ac9b374
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/sidebar_menu.html
@@ -0,0 +1,101 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% set ul_active = [] %}
+{% macro sidebar_item(s) -%}
+  {% if s.url %}
+    {% if not ul_active[-1] %}
+      <ul class="sidebarmenu">
+      {% do ul_active.append(True) %}
+    {% endif %}
+  <li{% if request.path.find(s.url,-s.url.__len__()) != -1 %} class="active"{% endif %}>
+      {% if s.ui_icon %}
+        {{ s.ui_icon.render(href=s.url, extra_css=s.className, closing_tag=False, **s.extra_html_attrs) }}
+      {% else %}
+        <a href="{{ s.url }}" {{ s.extra_html_attrs|xmlattr }} {% if s.className %}class="{{ s.className or '' }}"{% endif %}>
+      {% endif %}
+      <span{% if s.small != None %} class="has_small"{% endif %}>{{ h.really_unicode(s.label) }}</span>
+      {% if s.small != None %}<small>{{ s.small }}</small>{% endif %}</a>
+  </li>
+  {% else %}
+    {% if ul_active[-1] %}
+      </ul>
+      {% do ul_active.append(False) %}
+    {% endif %}
+    {% if s.label %}
+      <h3 class="{{s.className or ''}}">{% if s.ui_icon %}{{ s.ui_icon.render() }}{% endif %}{{s.label}}</h3>
+    {% endif %}
+  {% endif %}
+{%- endmacro %}
+
+<div id="sidebar" class="column">
+  {% if c.app and c.app.searchable %}
+    <form id="search" method="GET" action="{{c.app.url + 'search/'}}">
+      <input name="q" type="text" title="Search {{c.app.config.options.mount_label}}" placeholder="Search {{c.app.config.options.mount_label}}">
+      <label>
+        <input type="submit" style="display:none">
+        <b class="fa fa-search" title="Submit"></b>
+      </label>
+    </form>
+  {% else %}
+    <div class="placeholder-no-searchbox">&nbsp;</div>
+  {% endif %}
+    {% if c.custom_sidebar_menu %}
+      {% for s in c.custom_sidebar_menu %}
+        {{sidebar_item(s)}}
+      {% endfor %}
+    {% endif %}
+    {% if c.app %}
+      {% if h.has_access(c.app, 'admin')() %}
+        {% if c.app.tool_label.lower() == 'wiki' %}
+          {% set admin_menu = c.app.admin_menu(skip_common_menu=True) %}
+        {% else %}
+          {% set admin_menu = c.app.admin_menu() %}
+        {% endif %}
+        {% if admin_menu %}
+          <a id='sidebar-admin-header' onclick='$("#sidebar-admin-menu").toggleClass("hidden");$("#sidebar-admin-header").toggleClass("expanded");return false;'
+             href='#' {% if request.path.startswith(c.app.admin_url) %}class="expanded"{% endif %}>
+            {{sidebar_item(c.app.admin_menu_collapse_button)}}
+          </a>
+          <div id='sidebar-admin-menu' {% if not request.path.startswith(c.app.admin_url) %}class='hidden'{% endif %}>
+            {% for s in admin_menu %}
+              {{sidebar_item(s)}}
+            {% endfor %}
+            {{sidebar_item(c.app.admin_menu_delete_button)}}
+            {{sidebar_item(None)}}
+          </div>
+        {% endif %}
+      {% endif %}
+      {% for s in c.app.sidebar_menu() %}
+        {{sidebar_item(s)}}
+      {% endfor %}
+    {% elif c.project %}
+      {% for s in c.project.sidebar_menu() %}
+        {{sidebar_item(s)}}
+      {% endfor %}
+    {% endif %}
+    {% if ul_active[-1] %}
+      </ul>
+      {% do ul_active.append(False) %}
+    {% endif %}
+    {% if c.app and c.app.sidebar_menu_js() %}
+      <script>
+        {{c.app.sidebar_menu_js()|safe}}
+      </script>
+    {% endif %}
+</div>

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/theme_macros.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/theme_macros.html b/Allura/allura/templates_responsive/jinja_master/theme_macros.html
new file mode 100644
index 0000000..2420744
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/theme_macros.html
@@ -0,0 +1,211 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+
+{#
+Each macro is wrapped with an 'if' clause so that a custom theme may extend this file and override individual macros
+http://stackoverflow.com/questions/26582731/redefining-imported-jinja-macros
+#}
+
+
+{# account_links are used in primary nav, and off-canvas menu for small screens #}
+{% if not account_links %}
+{%- macro account_links(c, h, config, login_url, logout_url) %}
+    {% if c.user._id %}
+        <a href="/auth/preferences/">Account</a>
+        <a href="{{c.user.url()}}">{{name}}</a>
+        <a href="{{logout_url}}">Log Out</a>
+    {% else %}
+        {% if h.asbool(config.get('auth.allow_user_registration', True)) %}
+            <a href="/auth/create_account">Register</a>
+        {% endif %}
+        <a href="{{login_url}}">Log In</a>
+    {% endif %}
+{%- endmacro %}
+{% endif %}
+
+{%  if not header %}
+{%- macro header(login_url, logout_url) %}
+{% set breakpoint='medium' %}
+<div class="row">
+    <header class="columns small-12 title-bar">
+        <div class="title-bar-left">
+            {% if g.nav_logo %}
+                <a href="{{ g.nav_logo['redirect_link'] }}"><img style="{% if g.nav_logo['image_width'] %}width: {{g.nav_logo['image_width']}}px;{% endif %} {% if g.nav_logo['image_height'] %}height: {{ g.nav_logo['image_height'] }}px;{% endif %}" src="{{ g.nav_logo['image_path'] }}" /></a>
+            {% endif %}
+            {% for nav_link in g.global_nav %}
+                <a href="{{ nav_link['url'] }}" {% if g.nav_logo or not loop.first %}class="show-for-{{ breakpoint }}"{% endif %}>{{ nav_link['title'] }}</a>
+            {% endfor %}
+        </div>
+        <div class="title-bar-right show-for-{{ breakpoint }}">
+            {{ account_links(c, h, config, login_url, logout_url) }}
+        </div>
+        <button class="menu-icon hide-for-{{ breakpoint }}" type="button" data-open="offCanvas"></button>
+    </header>
+</div>
+{%- endmacro %}
+{% endif %}
+
+
+{% if not all_content_wrapper %}
+{% macro all_content_wrapper(login_url, logout_url) -%}
+    <div class="off-canvas position-right" id="offCanvas" data-off-canvas>
+        <div class="menu vertical">
+        {% for nav_link in g.global_nav %}
+            <a href="{{ nav_link['url'] }}">{{ nav_link['title'] }}</a>
+        {% endfor %}
+        {{ account_links(c, h, config, login_url, logout_url) }}
+        </div>
+    </div>
+    <div class="off-canvas-content" data-off-canvas-content>
+        {{- caller(**kwargs) -}}
+    </div>
+{%- endmacro %}
+{% endif %}
+
+
+{% if not footer %}
+{%- macro footer(year, path_to_static='') %}
+<footer id="site-footer" class="row align-right">
+    <p>This project is powered by <a href="https://allura.apache.org/">Apache Allura</a>&trade;.</p>
+</footer>
+{%- endmacro %}
+{% endif %}
+
+{% if not custom_js %}
+{%- macro custom_js(path_to_static) %}
+<script>
+    $(document).foundation();
+</script>
+{%- endmacro %}
+{% endif %}
+
+{% if not custom_tracking_js %}
+{%- macro custom_tracking_js(accounts, user, project) %}
+    {# This should be overridden in your custom theme (e.g., sftheme) to implement custom tracking code. #}
+    var _gaq = _gaq || [];
+
+    function _add_tracking(prefix, tracking_id) {
+        _gaq.push(
+            [prefix+'._setAccount', tracking_id],
+            [prefix+'._trackPageview']
+        );
+    }
+
+    {%- for account in accounts %}
+    _add_tracking('acct{{ loop.index }}', '{{account}}');
+    {%- endfor %}
+    {% if project and project.neighborhood.features['google_analytics'] -%}
+      {% if project.neighborhood.tracking_id -%}
+          _add_tracking('nbhd', '{{project.neighborhood.tracking_id}}');
+      {%- endif %}
+      {% if project.tracking_id -%}
+          _add_tracking('proj', '{{project.tracking_id}}');
+      {%- endif %}
+    {%- endif %}
+
+    (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);
+    })();
+{%- endmacro %}
+{% endif %}
+
+{% if not extra_header %}
+{%- macro extra_header(path_to_static) %}
+
+{%- endmacro %}
+{% endif %}
+
+{% if not breadcrumbs %}
+{%- macro breadcrumbs(project, app) %}
+    <nav aria-label="You are here:" role="navigation" class="row">
+        <ul class="breadcrumbs">
+            <li><a href="/">Home</a></li>
+            {% for label,url in project.breadcrumbs() %}
+                {% if not loop.last or app %}
+                    <li><a href="{{ url }}">{{ label }}</a></li>
+                {% else %}
+                    <li>{{ label }}</li>
+                {% endif %}
+            {% endfor %}
+            {% if app %}
+                <li>{{ app.config.options.mount_label }}</li>
+            {% endif %}
+        </ul>
+    </nav>
+{%- endmacro %}
+{% endif %}
+
+
+{% if not project_header_right %}
+{%- macro project_header_right(project, app) %}
+  {% if project.neighborhood.icon %}
+  <div class="column shrink neighborhood_block">
+    <a href="{{project.neighborhood.url()}}"><img {{ lib.project_icon_srcs(project.neighborhood.neighborhood_project) }} class="neighborhood_icon"
+       alt="Return to {{project.neighborhood.name}}" title="Return to {{project.neighborhood.name}}"></a>
+       <div class="neighborhood_title">
+         <h3><a href="{{project.neighborhood.url()}}">{{project.neighborhood.name}}</a></h3>
+         {% if project.neighborhood.project_list_url %}
+           <div class="neighborhood_title_link">
+           <a href="{{project.neighborhood.project_list_url}}">
+             View More Projects
+           </a>
+           </div>
+         {% endif %}
+    </div>
+  </div>
+  {% endif %}
+{%- endmacro %}
+{% endif %}
+
+{% if not login_overlay %}
+{%- macro login_overlay() %}
+    {% do g.register_js('js/jquery.lightbox_me.js') %}
+    {% do g.register_forge_js('js/jquery-ui.min.js') %}
+    {% do g.register_js('js/login_overlay.js') %}
+    <div id="login_overlay" class="ui-widget-content">
+        <h2 class="dark title">Login Required</h2>
+        <iframe src="{{g.login_fragment_url}}"></iframe>
+    </div>
+{%- endmacro %}
+{% endif %}
+
+{% if not site_notification %}
+{%- macro site_notification() %}
+    {% set note = g.theme.get_site_notification() %}
+    {% if note %}
+        <div id="site-notification">
+            <section class="callout primary" data-notification-id="{{note._id}}">
+                {{note.content|safe}}
+                <button class="close-button btn-close" aria-label="Dismiss alert" type="button">
+                  {#  .btn-close instead of data-close, since allura-base.js handles closing it, not Foundation #}
+                  <span aria-hidden="true">&times;</span>
+                </button>
+            </section>
+        </div>
+    {% endif %}
+{%- endmacro %}
+{% endif %}
+
+{% if not placeholder_project_icon %}
+{%- macro placeholder_project_icon() %}
+    <div class="placeholder-icon"></div>
+{%- endmacro %}
+{% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/allura/templates_responsive/jinja_master/top_nav.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates_responsive/jinja_master/top_nav.html b/Allura/allura/templates_responsive/jinja_master/top_nav.html
new file mode 100644
index 0000000..a0373a9
--- /dev/null
+++ b/Allura/allura/templates_responsive/jinja_master/top_nav.html
@@ -0,0 +1,84 @@
+{#-
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+-#}
+{% if c.project %}
+<div id="top_nav_admin" class="row">
+<ul class="menu dropdown" data-dropdown-menu>
+  {% for s in c.project.grouped_navbar_entries() %}
+    <li class="{% if s.matches_url(request) %}selected{% endif %}">
+        <a href="{{s.url}}" class="tool-{{(s.tool_name or 'admin').lower()}}-32">
+            {{s.label}}
+        </a>
+        {% set grouped_tool_count = s.matching_urls|length %}
+        {% if grouped_tool_count %}
+            <ul>
+                {%for tool in s.children%}
+                    <li class="{% if tool.matches_url(request) %}selected{% endif %}"><a href="{{tool.url}}">{{tool.label}}</a></li>
+                {%endfor%}
+            </ul>
+        {% endif %}
+    </li>
+  {% endfor %}
+  {% if h.has_access(c.project, 'admin')() %}
+    <li id="add-tool-container"><a href='#' class="add-tool-toggle">Add New...</a></li>
+    <button id="toggle-admin-btn" title="Click to unlock the toolbar and configure your project's tools.">
+        <i class="fa fa-lock"></i>
+    </button>
+  {% endif %}
+</ul>
+</div>
+{% if h.has_access(c.project, 'admin')() %}
+    {% do g.register_forge_js('js/underscore-min.js') %}
+    {% do g.register_forge_js('js/browser-polyfill.min.js') %}
+    {% do lib.register_react_js_files() %}
+    {% do g.register_forge_js('js/react-drag.min.js') %}
+    {% do g.register_forge_js('js/react-reorderable.min.js') %}
+    {% do g.register_forge_js('js/build/transpiled.js') %} {# if we do more es6, we'll need to register this in other places, or maybe even global #}
+    <script>
+        'use strict';
+        /*global ReactDOM, React, Main, ToggleAddNewTool */
+        var _data = {{ h.escape_json(c.project.nav_data(admin_options=True))|safe }};
+        $(document).ready(function () {
+            $('#toggle-admin-btn').click(function () {
+                if (typeof Main === 'undefined') {
+                    alert('Compiled JS is missing.  Need to run `npm install; npm run build;` on the server.');
+                    return;
+                }
+                ReactDOM.render(React.createElement(Main, {
+                    initialData: _data
+                }), document.getElementById("top_nav_admin"));
+            });
+
+            if (typeof ToggleAddNewTool === 'undefined') {
+                $('#add-tool-container').click(function(){
+                    alert('Compiled JS is missing.  Need to run `npm install; npm run build;` on the server.');
+                });
+            } else {
+                ReactDOM.render(React.createElement(ToggleAddNewTool, {
+                        installableTools: _data['installable_tools']
+                    }), document.getElementById('add-tool-container'));
+            }
+            $("#toggle-admin-btn").tooltipster({
+                delay: 200,
+                theme: 'tooltipster-light',
+                position: 'top'
+            });
+        });
+    </script>
+{% endif %}
+{% endif %}

http://git-wip-us.apache.org/repos/asf/allura/blob/cd928bcc/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index 8922c30..8f86fca 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -140,7 +140,8 @@ theme = allura
 ;      32 in nested comments
 ;      48 in standard comments
 ; and then 1.5x and 2x versions of all
-project_icon_sizes = 16 24 32 48 64 72 96
+; 90px for new large project icons, and 1.5x 2x 3x versions
+project_icon_sizes = 16 24 32 48 64 72 90 96 135 180 270
 
 ; To use a custom image for default user profile avatars, specify a full URL here.  Size 96x96 is best, 48x48 ok
 ;default_avatar_image =


Mime
View raw message