You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2017/01/31 20:27:06 UTC
[4/7] allura git commit: [#8143] use the hi-res logos from HTML
[#8143] use the hi-res logos from HTML
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/419df7e1
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/419df7e1
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/419df7e1
Branch: refs/heads/db/8143
Commit: 419df7e1e33669ac18bdadc366e28cad6efedae9
Parents: fe26253
Author: Dave Brondsema <da...@brondsema.net>
Authored: Mon Jan 30 16:31:32 2017 -0500
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Tue Jan 31 15:12:30 2017 -0500
----------------------------------------------------------------------
Allura/allura/ext/admin/admin_main.py | 12 ++++++----
.../templates/admin_widgets/metadata_admin.html | 2 +-
.../templates/sections/projects.html | 3 ++-
Allura/allura/lib/utils.py | 3 +++
Allura/allura/model/project.py | 25 +++++++++++++++++---
Allura/allura/templates/jinja_master/lib.html | 14 +++++++++++
.../allura/templates/jinja_master/nav_menu.html | 2 +-
.../templates/widgets/project_summary.html | 5 ++--
8 files changed, 54 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/ext/admin/admin_main.py
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py
index fc7e9c5..ef0f666 100644
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -23,6 +23,7 @@ from urlparse import urlparse
import json
from operator import itemgetter, attrgetter
import pkg_resources
+
from pylons import tmpl_context as c, app_globals as g, response
from pylons import request
from paste.deploy.converters import asbool, aslist
@@ -32,12 +33,12 @@ from webob import exc
from bson import ObjectId
from ming.orm.ormsession import ThreadLocalORMSession
from ming.odm import session
-from ming.utils import LazyProperty
+import PIL
+
from allura.app import Application, DefaultAdminController, SitemapEntry
from allura.lib import helpers as h
from allura import version
from allura import model as M
-from allura.lib.repository import RepositoryApp
from allura.lib.security import has_access, require_access
from allura.lib.widgets import form_fields as ffw
from allura.lib import exceptions as forge_exc
@@ -46,7 +47,6 @@ from allura.controllers import BaseController
from allura.lib.decorators import require_post
from allura.tasks import export_tasks
from allura.lib.widgets.project_list import ProjectScreenshots
-from allura.lib.utils import is_ajax
from . import widgets as aw
@@ -350,6 +350,7 @@ class ProjectAdminController(BaseController):
c.project.removal_changed_date = datetime.utcnow()
if 'delete_icon' in kw:
M.ProjectFile.query.remove(dict(project_id=c.project._id, category=re.compile(r'^icon')))
+ c.project.set_tool_data('allura', icon_original_size=None)
M.AuditLog.log('remove project icon')
h.log_action(log, 'remove project icon').info('')
g.post_event('project_updated')
@@ -450,13 +451,16 @@ class ProjectAdminController(BaseController):
if c.project.icon:
M.ProjectFile.query.remove(dict(project_id=c.project._id, category=re.compile(r'^icon')))
M.AuditLog.log('update project icon')
- M.ProjectFile.save_image(
+ icon_orig, icon_thumb = M.ProjectFile.save_image(
icon.filename, icon.file, content_type=icon.type,
square=True, thumbnail_size=(48, 48),
thumbnail_meta=dict(project_id=c.project._id, category='icon'),
save_original=True,
original_meta=dict(project_id=c.project._id, category='icon_original'),
)
+ # store the dimensions so we don't have to read the whole image each time we need to know
+ icon_orig_img = PIL.Image.open(icon_orig.rfile())
+ c.project.set_tool_data('allura', icon_original_size=icon_orig_img.size)
g.post_event('project_updated')
flash('Saved', 'success')
redirect('overview')
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html b/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
index e26c98e..a26eb9e 100644
--- a/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
+++ b/Allura/allura/ext/admin/templates/admin_widgets/metadata_admin.html
@@ -99,7 +99,7 @@
<div id="project-icon" class="viewing">
{% if value.icon %}
<div class="viewer" style="overflow: auto">
- <img src="{{value.url()}}icon?{{value.icon._id.generation_time}}" style="float:left; margin-right: 1em;" alt="">
+ <img {{ lib.project_icon_srcs(value) }} style="float:left; margin-right: 1em;" alt="">
{{ g.icons['edit'].render(id='edit-icon', style='display:inline-block;margin-top:15px') }}
{{ g.icons['delete'].render(id='delete-icon', style='display:inline-block;margin-top:15px') }}
</div>
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/ext/user_profile/templates/sections/projects.html
----------------------------------------------------------------------
diff --git a/Allura/allura/ext/user_profile/templates/sections/projects.html b/Allura/allura/ext/user_profile/templates/sections/projects.html
index 7e1756b..7f9c2d8 100644
--- a/Allura/allura/ext/user_profile/templates/sections/projects.html
+++ b/Allura/allura/ext/user_profile/templates/sections/projects.html
@@ -17,6 +17,7 @@
under the License.
-#}
{% extends "allura.ext.user_profile:templates/profile_section_base.html" %}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
{% block title %}
Projects
@@ -35,7 +36,7 @@
{% for project in projects %}
<li{% if loop.index > 5 %} class="hidden"{% endif %}>
{% if project.icon -%}
- <img src="{{project.url()}}icon?{{project.icon._id.generation_time}}" alt="Project Logo" width="48" height="48"/>
+ <img {{ lib.project_icon_srcs(project) }} alt="Project Logo" width="48" height="48"/>
{%- else -%}
<img src="{{g.forge_static('images/project_default.png')}}" alt="Project Logo" width="48" height="48"/>
{%- endif -%}
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/lib/utils.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index b75a7f8..e68e287 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -559,6 +559,9 @@ class ForgeHTMLSanitizer(html5lib.sanitizer.HTMLSanitizer):
+ html5lib.sanitizer.HTMLSanitizer.mathml_elements \
+ html5lib.sanitizer.HTMLSanitizer.svg_elements
+ # srcset is used in our own project_list/project_summary widgets which are used as macros so go through markdown
+ allowed_attributes = html5lib.sanitizer.HTMLSanitizer.allowed_attributes + ['srcset']
+
valid_iframe_srcs = ('https://www.youtube.com/embed/', 'https://www.gittip.com/')
_prev_token_was_ok_iframe = False
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/model/project.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index c80a136..db85b84 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -17,6 +17,7 @@
# under the License.
import logging
+from calendar import timegm
from collections import Counter, OrderedDict
from datetime import datetime
from copy import deepcopy
@@ -372,7 +373,7 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
icon_cat_name = 'icon-{}'.format(w)
sized = ProjectFile.query.get(project_id=self._id, category=icon_cat_name)
if not sized and w != DEFAULT_ICON_WIDTH:
- orig = ProjectFile.query.get(project_id=self._id, category='icon_original')
+ orig = self.icon_original
if not orig:
return None
sized = orig.save_thumbnail(filename='',
@@ -384,6 +385,25 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
)
return sized
+ @LazyProperty
+ def icon_original(self):
+ return ProjectFile.query.get(project_id=self._id, category='icon_original')
+
+ @LazyProperty
+ def icon_max_size(self):
+ stored_original_size = self.get_tool_data('allura', 'icon_original_size')
+ if stored_original_size:
+ # max not min, since non-square images get white padding added
+ return max(stored_original_size)
+ elif self.icon:
+ return DEFAULT_ICON_WIDTH
+ else:
+ return None
+
+ @LazyProperty
+ def icon_timestamp(self):
+ return timegm(self.icon._id.generation_time.timetuple())
+
@property
def description_html(self):
return g.markdown.cached_convert(self, 'description')
@@ -503,8 +523,7 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
for icon in ProjectFile.query.find(dict(
project_id={'$in': result.keys()},
category='icon')):
- result[icon.project_id] = project_index[
- icon.project_id].url() + 'icon'
+ result[icon.project_id] = project_index[icon.project_id].url() + 'icon'
return result
@classmethod
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/templates/jinja_master/lib.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/lib.html b/Allura/allura/templates/jinja_master/lib.html
index ad4e227..65a5f52 100644
--- a/Allura/allura/templates/jinja_master/lib.html
+++ b/Allura/allura/templates/jinja_master/lib.html
@@ -200,6 +200,20 @@
{{ g.icons['restore'].render(show_title=True, id='restore-content') }}
{%- endmacro %}
+{#
+ icon_url param is entirely optional; only pass it if you already have one for effeciency
+#}
+{%- macro project_icon_srcs(project, icon_url=None) %}
+ {% set icon_url = icon_url or project.url() + 'icon' %}
+ src="{{icon_url}}?{{project.icon_timestamp}}"
+ {% if project.icon_max_size >= 72 -%}
+ srcset="{{icon_url}}?w=72&{{project.icon_timestamp}} 1.5x,
+ {% if project.icon_max_size >= 96 -%}
+ {{icon_url}}?w=96&{{project.icon_timestamp}} 2x,
+ {%- endif -%}
+ "
+ {%- endif -%}
+{%- endmacro %}
{% macro markdown_syntax(id='') %}
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/templates/jinja_master/nav_menu.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/jinja_master/nav_menu.html b/Allura/allura/templates/jinja_master/nav_menu.html
index e100912..0f956ce 100644
--- a/Allura/allura/templates/jinja_master/nav_menu.html
+++ b/Allura/allura/templates/jinja_master/nav_menu.html
@@ -29,7 +29,7 @@
{% if c.project.is_user_project %}
{{lib.gravatar(c.project.user_project_of, size=48, className='project_icon')}}
{% elif c.project.icon %}
- <img src="{{c.project.url()}}icon?{{c.project.icon._id.generation_time}}" class="project_icon" alt="Project Logo">
+ <img class="project_icon" alt="Project Logo" {{ lib.project_icon_srcs(c.project) }}>
{% endif %}
<h1 class="project_title">
<a href="{{c.project.url()}}" class="project_link">
http://git-wip-us.apache.org/repos/asf/allura/blob/419df7e1/Allura/allura/templates/widgets/project_summary.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/project_summary.html b/Allura/allura/templates/widgets/project_summary.html
index 10d8693..ee1b61f 100644
--- a/Allura/allura/templates/widgets/project_summary.html
+++ b/Allura/allura/templates/widgets/project_summary.html
@@ -16,6 +16,7 @@
specific language governing permissions and limitations
under the License.
-#}
+{% import 'allura:templates/jinja_master/lib.html' as lib with context %}
<div class="list card{% if show_proj_icon%} proj_icon{% endif %}"
{%- if columns == 2 %} style="width: 330px"{% elif columns == 3 %} style="width: 220px"{% endif %}>
{% if accolades %}
@@ -23,11 +24,11 @@
<div class="feature">
<a href="{{accolades[0].award_url}}" title="{{accolades[0].comment}}">{{accolades[0].award.short}}</a>
</div>
- {% if icon_url %}<img src="{{icon_url}}" alt="{{value.name}} Logo"/>{% endif %}
+ {% if icon_url %}<img {{ lib.project_icon_srcs(project=value, icon_url=icon_url) }} alt="{{value.name}} Logo" width="48" height="48"/>{% endif %}
</div>
{% elif icon_url %}
<div class="box">
- <img src="{{icon_url}}" alt="{{value.name}} Logo"/>
+ <img {{ lib.project_icon_srcs(value, icon_url=icon_url) }} alt="{{value.name}} Logo" width="48" height="48"/>
</div>
{% endif %}
<h2><a href="{{value.url()}}">{{value.name}}</a></h2>