r252472 - in plonetheme.arnolfini/trunk: . docs plonetheme/arnolfini/browser plonetheme/arnolfini/profiles/default
"David Jonas Castanheira" <svn-changes-z4DKO/[email protected]>
| Newsgroups | gmane.comp.web.zope.plone.collective.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: davidjonas
Date: Fri Jul 5 11:37:40 2013
New Revision: 252472
Modified:
plonetheme.arnolfini/trunk/docs/HISTORY.txt
plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/blog_view.pt
plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/views.py
plonetheme.arnolfini/trunk/plonetheme/arnolfini/profiles/default/metadata.xml
plonetheme.arnolfini/trunk/setup.py
Log:
Added videos to the blog view
Modified: plonetheme.arnolfini/trunk/docs/HISTORY.txt
==============================================================================
--- plonetheme.arnolfini/trunk/docs/HISTORY.txt (original)
+++ plonetheme.arnolfini/trunk/docs/HISTORY.txt Fri Jul 5 11:37:40 2013
@@ -1,5 +1,9 @@
Changelog
=========
+0.91 (2013-07-05)
+---------------------
+- Added videos to the blog view.
+
0.90 (2013-05-22)
---------------------
- Small fixes for Plone 4.3
Modified: plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/blog_view.pt
==============================================================================
--- plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/blog_view.pt (original)
+++ plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/blog_view.pt Fri Jul 5 11:37:40 2013
@@ -65,14 +65,20 @@
<div metal:define-macro="listitem"
tal:define="tileclass python:item.hasMedia and 'tileItem' or 'tileItem no-media';"
tal:attributes="class python: tileclass + (odd and ' odd' or ' even')">
-
- <a class="imagelink" tal:condition="item/hasMedia" href="" tal:attributes="href item_link"><tal:image replace="structure python:view.getLeadMediaTag(item, scale='large')"></tal:image></a>
+ <a class="imagelink" tal:condition="python: item.hasMedia or item.portal_type == 'Link'" href="" tal:attributes="href item_link"><tal:image replace="structure python:view.getLeadMediaTag(item, scale='large')"></tal:image></a>
<div class="res-info">
<h2 class="summary" tal:attributes="class python: 'summary %s'%item_wf_state_class">
- <a href="#"
+ <a
tal:attributes="href item_link"
- tal:content="python:item_type != 'Press Kit' and item.Title or item.Title + ' (Download)'">
+ tal:content="python:item_type != 'Press Kit' and item.Title or item.Title + ' (Download)'"
+ tal:condition="python: item.portal_type != 'Link' or view.checkPermission(item, 'Add portal content')">
+ Item Title
+ </a>
+ <a
+ tal:content="item/Title"
+ tal:condition="python: item.portal_type == 'Link' and not view.checkPermission(item, 'Add portal content')"
+ style="border-bottom: none !important">
Item Title
</a>
<span class="addthis_toolbox addthis_default_style"
@@ -104,7 +110,7 @@
<div class="description">
<span tal:condition="python:item.Description != '' " tal:replace="python:item.Description"></span>
- <tal:bodyfallback condition="python:item.Description == '' and item_type != 'Image' and item_type != 'File' and item_type != 'Folder' and item_type != 'Press Kit'">
+ <tal:bodyfallback condition="python:item.Description == '' and item_type != 'Image' and item_type != 'File' and item_type != 'Folder' and item_type != 'Press Kit' and item_type != 'Link'">
<span tal:condition="python: getattr(item.getObject(), 'text', False)" tal:replace="python:view.trimText(item.getObject().text, 200, strip=True)"></span>
</tal:bodyfallback>
</div>
Modified: plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/views.py
==============================================================================
--- plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/views.py (original)
+++ plonetheme.arnolfini/trunk/plonetheme/arnolfini/browser/views.py Fri Jul 5 11:37:40 2013
@@ -10,9 +10,16 @@
from Products.CMFPlone.PloneBatch import Batch
from datetime import date
from DateTime import DateTime
+
+from plone.registry.interfaces import IRegistry
+from plone.app.event.interfaces import IEventSettings
+from plone.event.interfaces import IEventAccessor
+from plone.event.utils import default_timezone as fallback_default_timezone
+
from plone.app.querystring import queryparser
from collective.media.interfaces import ICanContainMedia
from collective.portlet.relateditems.relateditems import Renderer as RelatedItemsRenderer
+from plone.app.event.browser.event_listing import EventListing as AppEventListing
from plone.portlet.collection.collection import Renderer as CollectionPortletRenderer
from collective.portlet.manualRelated.manualrelatedportlet import Renderer as ManualRelatedPortletRenderer
import re
@@ -21,6 +28,7 @@
from zope.component import getMultiAdapter
from Acquisition import aq_inner, aq_parent
from ZTUtils import make_query
+from zope.app.component.hooks import getSite
from plone.i18n.normalizer.interfaces import IIDNormalizer
from zope.component import queryUtility
@@ -36,6 +44,7 @@
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from plone.app.registry.browser.controlpanel import RegistryEditForm
from Products.statusmessages.interfaces import IStatusMessage
+from plone.app.event.recurrence import Occurrence
try:
from Products.PloneGetPaid.interfaces import IBuyableMarker
@@ -137,10 +146,26 @@
item = brains[0]
for tag in item.Subject:
- classes.append("tag_%s"%tag.replace(" ", "_"))
+ classes.append("tag_%s"%tag)
return " ".join(classes)
+ def getReviewState(self, item):
+ if hasattr(item, 'review_state'):
+ return item.review_state
+ else:
+ catalog = getToolByName(self.context, 'portal_catalog')
+ brains = catalog.queryCatalog({"UID": item.UID()})
+ item = brains[0]
+ return item.review_state
+
+ def getEventFromOccurence(self, occ):
+ context = occ.context
+ if isinstance(context, Occurrence):
+ return context.getParentNode()
+ else:
+ return occ.context
+
def slideshow(self, parent):
"""
Creates a slideshow with the media from parent
@@ -154,8 +179,45 @@
return structure
+ def checkYoutubeLink(self, link):
+ """
+ Check if a URL is a youtube video
+ """
+ isYoutube = link.find("youtube") != -1
+ youtubeId = ""
+ amp = link.find("&")
+
+ if isYoutube and amp != -1:
+ youtubeId = link[link.find("?v=")+3:amp]
+ elif isYoutube and amp == -1:
+ youtubeId = link[link.find("?v=")+3:]
+
+ return isYoutube, youtubeId
+
+ def checkVimeoLink(self, link):
+ """
+ Check if URL is a vimeo video
+ """
+ isVimeo = link.find("vimeo") != -1
+ vimeoId = ""
+
+ if isVimeo:
+ vimeoId = link.split("vimeo.com/")[1]
+
+ return isVimeo, vimeoId
+
def getLeadMediaTag(self, item, scale="large"):
catalog = getToolByName(self.context, 'portal_catalog')
+ if item.portal_type == 'Link':
+ isYoutube, youtubeId = self.checkYoutubeLink(item.getRemoteUrl)
+ isVimeo, vimeoId = self.checkVimeoLink(item.getRemoteUrl)
+ embed = ""
+
+ if isYoutube:
+ return '<iframe id="'+youtubeId+'" width="100%" height="393" src="http://www.youtube.com/embed/'+youtubeId+'?rel=0&enablejsapi=1" frameborder="0" allowfullscreen></iframe>'
+ elif isVimeo:
+ return '<iframe src="http://player.vimeo.com/video/'+vimeoId+'?title=0&byline=0&portrait=0" width="100%" height="393" frameborder="0"></iframe>'
+
if item.portal_type == 'Image':
if hasattr(item, 'getURL'):
lead = item.getURL()
@@ -181,17 +243,10 @@
lead = None
if lead is not None:
- canCrop = self.checkPermission(item, "Modify portal content") and scale == 'crop'
- crop = ""
-
- if canCrop:
- cropLink = "%s/@@croppingeditor"%lead
- crop = '<div class="cropButton" onclick="window.location = \'%s\'; return false;">Crop</div>'%cropLink
-
if hasattr(item, 'getURL'):
- return '<img src="%(url)s" alt="%(title)s" title="%(title)s" />%(crop)s'%{'url': "%s/image_%s"%(lead, scale), 'title':item.Title, 'crop':crop}
+ return '<img src="%(url)s" alt="%(title)s" title="%(title)s" />'%{'url': "%s/image_%s"%(lead, scale), 'title':item.Title}
else:
- return '<img src="%(url)s" alt="%(title)s" title="%(title)s" />%(crop)s'%{'url': "%s/image_%s"%(lead, scale), 'title':item.Title(), 'crop':crop}
+ return '<img src="%(url)s" alt="%(title)s" title="%(title)s" />'%{'url': "%s/image_%s"%(lead, scale), 'title':item.Title()}
else:
return ""
@@ -317,16 +372,30 @@
"""
Formats the start and end dates properly and marks the event as past or future
"""
+ portal_timezone = None
+ reg = queryUtility(IRegistry, context=getSite(), default=None)
+ if reg:
+ portal_timezone= reg.forInterface(
+ IEventSettings, prefix="plone.app.event").portal_timezone
+
+ if not portal_timezone:
+ portal_timezone = fallback_default_timezone()
+
if event.portal_type != 'Event' and event.portal_type != 'Media Event':
return ""
- if event.start() is None or event.end() is None:
- if event.start() is None and event.end() is None:
+ #start = event.start()
+ #end = event.end()
+ start = IEventAccessor(event).start
+ end = IEventAccessor(event).end
+
+ if start is None or end is None:
+ if start is None and end is None:
return ""
else:
samedate = True
else:
- samedate = event.start().strftime('%d - %m - %Y') == event.end().strftime('%d - %m - %Y')
+ samedate = start.strftime('%d - %m - %Y') == end.strftime('%d - %m - %Y')
exceptions = ""
@@ -335,10 +404,10 @@
finalDatesFmt = '<div class="dates %(class)s"><span class="dateText">%(dates)s%(hours)s %(exceptions)s</span></div>'
- dates = "%s"%(samedate and (event.start() is not None and event.start().strftime('%A %d %B %Y') or event.end().strftime('%A %d %B %Y')) or "%s to %s"%(event.start().strftime('%A %d %B %Y'), event.end().strftime('%A %d %B %Y')))
+ dates = "%s"%(samedate and (start is not None and start.strftime('%A %d %B %Y') or end.strftime('%A %d %B %Y')) or "%s to %s"%(start.strftime('%A %d %B %Y'), end.strftime('%A %d %B %Y')))
- openingHour = event.start() is not None and event.start().strftime('%H:%M') or ""
- closingHour = event.end() is not None and event.end().strftime('to %H:%M') or ""
+ openingHour = start is not None and start.strftime('%H:%M') or ""
+ closingHour = end is not None and end.strftime('to %H:%M') or ""
hoursExist = 'to %s'%openingHour != closingHour
hours = hoursExist and '<span class="hours">, %s %s</span>'%(openingHour, closingHour) or '<span class="hours">, %s</span>'%openingHour
@@ -648,6 +717,15 @@
else:
return u''
+
+class AppEventListingView(CommonBrowserView, AppEventListing):
+ """
+ plone.app.event event listing vie for the calendar
+ """
+
+
+
+
class SearchView(CommonBrowserView, Search):
"""
Adding to Search view
@@ -888,4 +966,4 @@
"""
WeekDayFormView = wrap_form(WeekDayForm)
-
\ No newline at end of file
+
Modified: plonetheme.arnolfini/trunk/plonetheme/arnolfini/profiles/default/metadata.xml
==============================================================================
--- plonetheme.arnolfini/trunk/plonetheme/arnolfini/profiles/default/metadata.xml (original)
+++ plonetheme.arnolfini/trunk/plonetheme/arnolfini/profiles/default/metadata.xml Fri Jul 5 11:37:40 2013
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<metadata>
- <version>0.90</version>
+ <version>0.91</version>
<dependencies>
<dependency>profile-plonetheme.intkBase:default</dependency>
</dependencies>
Modified: plonetheme.arnolfini/trunk/setup.py
==============================================================================
--- plonetheme.arnolfini/trunk/setup.py (original)
+++ plonetheme.arnolfini/trunk/setup.py Fri Jul 5 11:37:40 2013
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
import os
-version = '0.90'
+version = '0.91'
setup(name='plonetheme.arnolfini',
version=version,
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:
Build for Windows Store.
http://p.sf.net/sfu/windows-dev2dev