Skip to content

Commit

Permalink
Merge 86f9750 into dd3232c
Browse files Browse the repository at this point in the history
  • Loading branch information
hvelarde committed Aug 16, 2018
2 parents dd3232c + 86f9750 commit 884adc8
Show file tree
Hide file tree
Showing 24 changed files with 604 additions and 65 deletions.
5 changes: 4 additions & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ Changelog
2.0a6 (unreleased)
^^^^^^^^^^^^^^^^^^

- Adiciona opção para permitir escolher entre headers diferentes.
[hvelarde, rodfersou]

- Adiciona https nas URLs das redes sociais.
[agnogueira]

- Corrige workflow para tipo de conteúdo Infográfico.
[rodfersou]

Expand Down
3 changes: 3 additions & 0 deletions src/brasil/gov/portal/browser/busca/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
# -*- coding: utf-8 -*-
"""Module that includes customizations to the search templates
including browser views, viewlets and JS code.
"""
12 changes: 10 additions & 2 deletions src/brasil/gov/portal/browser/busca/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
class=".busca.Search"
permission="zope2.View"
for="*"
template="templates/search.pt"
template="search.pt"
layer="brasil.gov.portal.interfaces.IBrasilGov"
/>

Expand All @@ -23,9 +23,17 @@
class=".busca.Search"
permission="zope2.View"
for="Products.CMFCore.interfaces.IFolderish"
template="templates/updated_search.pt"
template="updated_search.pt"
layer="brasil.gov.portal.interfaces.IBrasilGov"
/>

<browser:viewlet
name="plone.searchbox"
manager="plone.app.layout.viewlets.interfaces.IPortalHeader"
class=".searchbox.SearchBoxViewlet"
permission="zope2.View"
template="searchbox.pt"
layer="brasil.gov.portal.interfaces.IBrasilGov"
/>

</configure>
78 changes: 78 additions & 0 deletions src/brasil/gov/portal/browser/busca/searchbox.pt
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<div id="portal-searchbox"
i18n:domain="brasil.gov.portal"
tal:define="navigation_root_url view/navigation_root_url;
search_input_id view/search_input_id;
title_search_box string:'Search Site';
expandable_header view/expandable_header"
tal:attributes="class view/klass;
style view/style">

<form id="searchGadget_form"
action="@@busca"
tal:attributes="action string:${navigation_root_url}/@@busca;
id string:${search_input_id}_form;">
<div class="close" tal:condition="expandable_header">+</div>
<fieldset class="LSBox">
<legend class="hiddenStructure"
i18n:translate="">Search Site</legend>
<label class="hiddenStructure"
tal:attributes="for search_input_id"
i18n:translate="">Search Site</label>

<input name="SearchableText"
type="text"
size="18"
value=""
title="Search Site"
placeholder="Search Site"
i18n:attributes="title title_search_box;
placeholder title_search_box"
tal:attributes="value request/form/SearchableText|nothing;
id search_input_id"
class="searchField" />

<input class="searchButton"
type="submit"
value="Search"
i18n:attributes="value label_search;" />

</fieldset>

<div class="search-suggestions" tal:condition="expandable_header">
<div class="news"
tal:define="featured_news view/featured_news"
tal:condition="featured_news">
<div class="news-title"><strong>Notícias</strong> em destaque</div>
<ul class="featured-news">
<li tal:repeat="article featured_news">
<a tal:attributes="href article/url" tal:content="article/title" />
</li>
</ul>
<a class="more-news" tal:attributes="href view/more_news">Mais notícias</a>
</div>
<div class="services"
tal:define="featured_services view/featured_services"
tal:condition="featured_services">
<div class="services-title"><strong>Serviços</strong> em destaque</div>
<ul class="featured-services">
<li tal:repeat="service featured_services">
<a tal:attributes="href service/url" tal:content="service/title" />
</li>
</ul>
<a class="more-services" tal:attributes="href view/more_services">Mais serviços</a>
</div>
</div>
</form>

<tal:block condition="expandable_header">
<ul class="top-subjects"
tal:define="top_subjects view/top_subjects"
tal:condition="top_subjects">
<div class="subjects-title"><h3>Assuntos em alta</h3></div>
<li tal:repeat="subject top_subjects">
<a tal:attributes="href subject/url" tal:content="subject/title" />
</li>
</ul>
</tal:block>

</div>
75 changes: 75 additions & 0 deletions src/brasil/gov/portal/browser/busca/searchbox.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# -*- coding: utf-8 -*-
"""SearchBoxViewlet customization.
The new search box includes 2 different versions, one similar to the
default but calling @@busca at form submission. The other is an
expandable version that uses information stored in the registry, and
accessible at the @@portal-settings configlet.
"""
from brasil.gov.portal.controlpanel.portal import ISettingsPortal
from plone.app.layout.viewlets.common import SearchBoxViewlet as SearchBoxViewletBase
from plone.registry.interfaces import IRegistry
from zope.component import getUtility


class SearchBoxViewlet(SearchBoxViewletBase):
"""Search box viewlet customization."""

def update(self):
super(SearchBoxViewlet, self).update()
registry = getUtility(IRegistry)
self.settings = registry.forInterface(ISettingsPortal)

try:
self.expandable_header = self.settings.expandable_header
except AttributeError:
self.expandable_header = False

@staticmethod
def split(iterable):
results = []
if iterable is None:
return results

for item in iterable:
title, url = item.split('|')
results.append({'title': title, 'url': url})
return results

def featured_news(self):
"""Return the list of defined featured news."""
return self.split(self.settings.featured_news)

def more_news(self):
return self.settings.more_news

def featured_services(self):
"""Return the list of defined featured services."""
return self.split(self.settings.featured_services)

def more_services(self):
return self.settings.more_services

def top_subjects(self):
"""Return the list of defined top subjects."""
return self.split(self.settings.top_subjects)

def klass(self):
"""Return a CSS class to let Diazo know which search box is in use."""
if self.expandable_header:
return 'expandable-header'

def style(self):
"""Return a CSS style to add a background image to an element.
If the expandable header is not used, or there is no background
image defined, return None to remove the style attribute from
rendering.
"""
if not self.expandable_header:
return None

if self.settings.background_image is None:
return None

url = self.site_url + '/@@searchbox-background-image'
return 'background-image: url({0})'.format(url)
9 changes: 9 additions & 0 deletions src/brasil/gov/portal/browser/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
<include package='.content' />

<!-- Criacao de site -->
<!-- XXX: the name of this module is causing import problems -->
<include package='.plone' />

<!-- Contraste -->
Expand All @@ -30,4 +31,12 @@
<!-- Viewlets -->
<include package='.viewlets' />

<browser:page
name="searchbox-background-image"
for="plone.app.layout.navigation.interfaces.INavigationRoot"
class=".helper.BackgroundImageView"
layer="brasil.gov.portal.interfaces.IBrasilGov"
permission="zope.Public"
/>

</configure>
64 changes: 64 additions & 0 deletions src/brasil/gov/portal/browser/helper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# -*- coding: utf-8 -*-
"""Helper view to return the background image used in the site root
when the expandable header is enabled.
"""
from __future__ import absolute_import
from brasil.gov.portal.controlpanel.portal import ISettingsPortal
from plone import api
from plone.formwidget.namedfile.converter import b64decode_file
from plone.namedfile.browser import Download
from plone.namedfile.file import NamedImage

import hashlib


class BackgroundImageView(Download):
"""Helper view to return the background image used in the site root
when the expandable header is enabled.
"""

def setup(self):
name = ISettingsPortal.__identifier__ + '.background_image'
background_image = api.portal.get_registry_record(name, default=None)

if background_image is None:
self.data = None
return

# set background image data for download
filename, data = b64decode_file(background_image)
self.filename = filename
self.data = NamedImage(data=data, filename=filename)
self.checksum = hashlib.sha1(data).hexdigest()

def _getFile(self):
return self.data

def __call__(self):
"""Render the background image.
Make use of HTTP caching headers to decrease server usage:
image is not cached on browsers and is cached 120 seconds on
intermediate caches. We use a checksum of the image data as
ETag to return a 304 (Not Modified) status in case the image
has not changed since last time it was accessed.
More information: https://httpwg.org/specs/rfc7234.html
"""
self.setup()

if self.data is None:
# resource no longer available
self.request.RESPONSE.setStatus(410) # Gone
return ''

# enable image caching for 2 minutes
self.request.RESPONSE.setHeader('Cache-Control', 'max-age=0, s-maxage=120')
self.request.RESPONSE.setHeader('ETag', self.checksum)

match = self.request.get_header('If-None-Match', '')
if self.checksum == match:
self.request.response.setStatus(304) # Not Modified
return ''

return super(BackgroundImageView, self).__call__()
9 changes: 0 additions & 9 deletions src/brasil/gov/portal/browser/viewlets/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,6 @@
layer="brasil.gov.portal.interfaces.IBrasilGov"
/>

<browser:viewlet
name="plone.searchbox"
manager="plone.app.layout.viewlets.interfaces.IPortalHeader"
class="plone.app.layout.viewlets.common.SearchBoxViewlet"
permission="zope2.View"
template="templates/searchbox.pt"
layer="brasil.gov.portal.interfaces.IBrasilGov"
/>

<browser:viewlet
name="plone.site_actions"
manager="plone.app.layout.viewlets.interfaces.IPortalFooter"
Expand Down
38 changes: 0 additions & 38 deletions src/brasil/gov/portal/browser/viewlets/templates/searchbox.pt

This file was deleted.

0 comments on commit 884adc8

Please sign in to comment.