From: Benoît Pin <pin@cri.ensmp.fr>
Date: Thu, 28 Aug 2014 11:48:18 +0000 (+0200)
Subject: Chargement des vignettes après coup pour les tables lumineuses.
X-Git-Url: https://svn.cri.ensmp.fr/git/Portfolio.git/commitdiff_plain/6f4e2f7cda25365c0ca9d1597270200d049daa61

Chargement des vignettes après coup pour les tables lumineuses.
---

diff --git a/skins/getLightboxPhotosInfos.py b/skins/getLightboxPhotosInfos.py
new file mode 100644
index 0000000..f5afc8c
--- /dev/null
+++ b/skins/getLightboxPhotosInfos.py
@@ -0,0 +1,50 @@
+##parameters=lightbox, pho_start=None, batch_size=None
+from Products.CMFCore.utils import getToolByName
+from Products.Plinn.PloneMisc import Batch
+
+utool = getToolByName(context, 'portal_url')
+portal = utool.getPortalObject()
+portalDepth = len(portal.getPhysicalPath())
+uidh = getToolByName(context, 'portal_uidhandler')
+pptool = getToolByName(context, 'portal_photo_print', None)
+req = context.REQUEST
+sd = context.session_data_manager.getSessionData(create = 1)
+path  = context.getPhysicalPath()
+
+start = pho_start if pho_start is not None else 0
+brains = [uidh.getBrain(uid) for uid in context.uids]
+batch_size = batch_size if batch_size is not None else context.default_batch_size
+batch = Batch(brains, batch_size, start, quantumleap=1)
+
+lightboxUrl = lightbox.absolute_url()
+cart = sd.get('cart', None)
+
+infos = []
+for index, b in enumerate(batch) :
+	path = '/'.join(b.getPath().split('/')[portalDepth:])
+	p = b.getObject()
+	if pptool :
+		buyable = bool(pptool.getPrintingOptionsFor(p))
+		if cart and cart.locked :
+			buyable = False
+	else :
+		buyable = False
+
+	d = {'href' : '%s/lightboxcontext/%s' % (lightboxUrl, path)
+		,'thumbUrl' : '%s/getThumbnail' % b.getURL()
+		,'thumbSize' : b.getThumbnailSize
+		,'title' : ('%s - %s' % (b.Title, b.Description)).strip(' -')
+		,'cmf_uid':b.cmf_uid
+		,'className':''
+		,'buyable' : buyable
+		,'o':b
+		}
+	infos.append(d)
+
+features = {}
+features['del'] = lambda b: '%s/remove_to_lightbox?uid=%s' % (lightboxUrl, b.cmf_uid)
+features['cart'] = lambda b : '%s/get_slide_buyable_items' % b.getURL()
+
+return {'infos' : infos,
+        'batch' : batch,
+        'features' : features}
\ No newline at end of file
diff --git a/skins/lightbox_view.py b/skins/lightbox_view.py
index 562c115..2463656 100755
--- a/skins/lightbox_view.py
+++ b/skins/lightbox_view.py
@@ -69,5 +69,6 @@ options['batch'] = batch
 options['features'] = features
 options['buttons'] = buttons
 options['lightboxSelected'] = lightboxSelected
+options['container_type'] = 'lightbox'
 
 return context.lightbox_view_template(**options)
diff --git a/skins/photo_layout_macros.pt b/skins/photo_layout_macros.pt
index c096822..68d9f1d 100644
--- a/skins/photo_layout_macros.pt
+++ b/skins/photo_layout_macros.pt
@@ -108,8 +108,10 @@
               tal:content="structure python:'''
               new Lightbox(document.getElementById('lightbox'),
                            document.getElementById('lightbox_toolbar'),
-                           %s);
-                           ''' % ('true' if not batch.next else 'false')">
+                           %(complete)s,
+                           '%(container_type)s');
+                           ''' % {'complete' : 'true' if not batch.next else 'false',
+                                  'container_type' : options.get('container_type', 'portfolio')}">
       </script>
       <script type="text/javascript"
               tal:condition="dropable"
@@ -118,7 +120,8 @@
                 var lb = document.getElementById('lightbox');
                 new Lightbox(lb,
                              document.getElementById('lightbox_toolbar'),
-                             %(complete)s);
+                             %(complete)s,
+                             '%(container_type)s');
                 var uploadUrl = '%(putUrl)s';
                 var options = {'slideSize' : %(slideSize)d,
                                'thumbnailSize' : %(thumbnailSize)d};
@@ -127,7 +130,8 @@
               ''' % {'putUrl' : '%s/put_upload' % here.absolute_url(),
                      'slideSize' : portal_object.slide_size,
                      'thumbnailSize' : portal_object.thumb_size,
-                     'complete': 'true' if not batch.next else 'false'}">
+                     'complete': 'true' if not batch.next else 'false',
+                     'container_type' : options.get('container_type', 'portfolio')}">
       </script>
     </div>
     <div metal:define-macro="film_bar" tal:omit-tag="">
diff --git a/skins/photo_lightbox_viewer.js b/skins/photo_lightbox_viewer.js
index c649dc2..8dfbaf4 100644
--- a/skins/photo_lightbox_viewer.js
+++ b/skins/photo_lightbox_viewer.js
@@ -11,12 +11,13 @@ var Lightbox;
 
 var reSelected = /.*selected.*/;
 
-Lightbox = function(grid, toolbar, complete) {
+Lightbox = function(grid, toolbar, complete, container_type) {
 	var self = this;
 	this.grid = grid;
 	this._buildSlidesIndex(); // set this.slides and this.lastSlide;
 	this.fetchingDisabled = false;
 	this.complete = complete;
+	this.container_type = container_type;
 	this.toolbar = toolbar;
 	if (toolbar) {
 		this.toolbarFixed = false;
@@ -374,7 +375,9 @@ Lightbox.prototype.fetchTail = function() {
 	var url = absolute_url() +
 			  '/portfolio_thumbnails_tail?start:int=' +
 			  String(this.slides.length) +
-			  '&size:int=10';
+			  '&size:int=10' +
+			  '&container_type=' +
+			  this.container_type;
 	req.open('GET', url, true);
 	req.send();
 };
diff --git a/skins/portfolio_thumbnails_tail.py b/skins/portfolio_thumbnails_tail.py
index 4f47bf3..9765629 100644
--- a/skins/portfolio_thumbnails_tail.py
+++ b/skins/portfolio_thumbnails_tail.py
@@ -1,6 +1,11 @@
-##parameters=start=0, size=10
+##parameters=start=0, size=10, container_type='portfolio'
 options={}
-options.update(context.getPhotosInfos(context,
-                                      pho_start=start,
-                                      batch_size=size))
+if container_type == 'portfolio' :
+    options.update(context.getPhotosInfos(context,
+                                          pho_start=start,
+                                          batch_size=size))
+elif container_type == 'lightbox' :
+    options.update(context.getLightboxPhotosInfos(context,
+                                          pho_start=start,
+                                          batch_size=size))
 return context.portfolio_thumbnails_tail_template(**options)
\ No newline at end of file