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&amp;byline=0&amp;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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.