[kupu-checkins] r52777 - in kupu/trunk/kupu: common common/kupudrawers doc plone plone/kupu_plone_layer

duncan at codespeak.net duncan at codespeak.net
Thu Mar 20 16:05:58 CET 2008


Author: duncan
Date: Thu Mar 20 16:05:56 2008
New Revision: 52777

Modified:
   kupu/trunk/kupu/common/kupudrawers.js
   kupu/trunk/kupu/common/kupudrawers/drawer.xsl
   kupu/trunk/kupu/doc/CHANGES.txt
   kupu/trunk/kupu/plone/kupu_plone_layer/kupucollection.xml.pt
   kupu/trunk/kupu/plone/plonedrawers.py
   kupu/trunk/kupu/plone/plonelibrarytool.py
Log:
Image upload now has same options as image insertion (list of sizes & styles is taken from content type 'Image' so may not be appropriate for 
uploading other types).



Modified: kupu/trunk/kupu/common/kupudrawers.js
==============================================================================
--- kupu/trunk/kupu/common/kupudrawers.js	(original)
+++ kupu/trunk/kupu/common/kupudrawers.js	Thu Mar 20 16:05:56 2008
@@ -1442,6 +1442,7 @@
             alert("Please enter a title for the image you are uploading");
             return;
         };
+        this.upload_title = form.node_prop_title.value;
         form.node_prop_desc.value = form.node_prop_desc.value.replace(/^\xa0|\xa0$/g,'');
         form.submit();
     };
@@ -1457,13 +1458,33 @@
     };
 
     // called by onLoad within document sent by server
-    this.finishUpload = function(url) {
+    this.finishUpload = function(uri) {
         this.editor.resumeEditing();
-        var imgclass = 'image-inline';
-        if (this.editor.config && !!this.editor.config.captions) {
+        var sizeselector = document.getElementsByName('image-size-selector');
+        if (sizeselector && sizeselector.length > 0) {
+            sizeselector = sizeselector[0];
+            uri += sizeselector.options[sizeselector.selectedIndex].value;
+        }
+        var radios = document.getElementsByName('image-align');
+        var imgclass = "";
+        for (var i = 0; i < radios.length; i++) {
+            if (radios[i].checked) {
+                imgclass = radios[i].value;
+            };
+        };
+        var caption = document.getElementsByName('image-caption');
+        if (caption && caption.length>0 && caption[0].checked) {
             imgclass += " captioned";
         };
-        this.tool.createImage(url, null, imgclass);
+        var classnames = document.getElementById('kupu-image-class');
+        if (classnames && classnames.selectedIndex >= 0) {
+            imgclass += " "+classnames.options[classnames.selectedIndex].value;
+        } else {
+            imgclass += ' image-inline';
+        }
+        imgclass = imgclass.strip();
+
+        this.tool.createImage(uri, this.upload_title, imgclass);
         this.shared.newimages = 1;
         this.drawertool.closeDrawer();
     };

Modified: kupu/trunk/kupu/common/kupudrawers/drawer.xsl
==============================================================================
--- kupu/trunk/kupu/common/kupudrawers/drawer.xsl	(original)
+++ kupu/trunk/kupu/common/kupudrawers/drawer.xsl	Thu Mar 20 16:05:56 2008
@@ -341,8 +341,7 @@
        </xsl:choose>
     </xsl:template>
 
-    <xsl:template match="resource|collection" mode="image-properties">
-       <xsl:apply-templates select="." mode="base-properties"/>
+    <xsl:template match="resource|collection|uploadbutton" mode="image-extra-properties">
        <div class="kupu-image-fields">
           <input id="kupu-media" type="hidden" value="{media}" />
           <input id="kupu-width" type="hidden" value="{width}" />
@@ -429,6 +428,10 @@
           </textarea>
        </div>
     </xsl:template>
+    <xsl:template match="resource|collection" mode="image-properties">
+       <xsl:apply-templates select="." mode="base-properties"/>
+       <xsl:apply-templates select="." mode="image-extra-properties"/>
+    </xsl:template>
     <xsl:template match="class">
        <option value="{@name}">
           <xsl:if test="$image-class=@name">
@@ -527,6 +530,7 @@
             </form>
             <iframe id="kupu_upload_form_target" name="kupu_upload_form_target" src="javascript:''"
                 scrolling="off" frameborder="0" width="0px" height="0px" display="None">&#160;</iframe>
+            <xsl:apply-templates select="." mode="image-extra-properties"/>
     </xsl:template>
     <xsl:template match="breadcrumbs">
         <span>

Modified: kupu/trunk/kupu/doc/CHANGES.txt
==============================================================================
--- kupu/trunk/kupu/doc/CHANGES.txt	(original)
+++ kupu/trunk/kupu/doc/CHANGES.txt	Thu Mar 20 16:05:56 2008
@@ -9,6 +9,8 @@
 
   - timte fixed a possible unicode decode error
 
+  - Image upload now has same style options as image insertion.
+
   - Plone tickets
 
     * 6915 Kupu can't find anchors inside table cells

Modified: kupu/trunk/kupu/plone/kupu_plone_layer/kupucollection.xml.pt
==============================================================================
--- kupu/trunk/kupu/plone/kupu_plone_layer/kupucollection.xml.pt	(original)
+++ kupu/trunk/kupu/plone/kupu_plone_layer/kupucollection.xml.pt	Thu Mar 20 16:05:56 2008
@@ -91,8 +91,26 @@
       </collection>
 
     </tal:loop>
-    <uploadbutton tal:condition="python:exists('upload') and kupu.isUploadSupported(context)">
+    <uploadbutton tal:condition="python:exists('upload') and kupu.isUploadSupported(context)"
+                  tal:define="classes kupu/getUploadImageClasses;
+                  sizes kupu/getUploadImageSizes;
+                  defscale kupu/getDefaultScaleForType; origok kupu/getAllowOriginalImageSize;">
        <uri tal:content="string:${here/absolute_url}/kupuUploadImage" />
+       <class tal:condition="classes" tal:repeat="c classes"
+             tal:attributes="title c/title; name c/classname" />
+       <sizes>
+          <size tal:repeat="size sizes">
+             <selected tal:define="action size/action;"
+                    tal:condition="python:action==defscale" />
+             <label tal:content="size/label" />
+             <uri tal:content="size/uri" />
+          </size>
+          <size tal:condition="origok">
+             <selected tal:condition="python:defscale in ('original', '')" />
+             <label i18n:translate="option_original">Original</label>
+             <uri tal:content="info/url" />
+          </size>
+       </sizes>
     </uploadbutton>
   </items>
 

Modified: kupu/trunk/kupu/plone/plonedrawers.py
==============================================================================
--- kupu/trunk/kupu/plone/plonedrawers.py	(original)
+++ kupu/trunk/kupu/plone/plonedrawers.py	Thu Mar 20 16:05:56 2008
@@ -877,6 +877,40 @@
                 base = base[:posfactory]
         return base
 
+    security.declareProtected("View", "getUploadImageSizes")
+    def getUploadImageSizes(self, portal_type=None):
+        resource_type = self.getResourceType()
+        portal = getToolByName(self, 'portal_url').getPortalObject()
+        mediatypes = resource_type.get_portal_types()
+        catalog = getToolByName(self, 'portal_catalog')
+        adaptor = InfoAdaptor(self, resource_type, portal)
+        if portal_type is None:
+            portal_type = self.getDefaultImageType()
+
+        brains = catalog.searchResults(portal_type=portal_type, limit=1)[:1]
+        if brains:
+            info = adaptor.get_image_sizes(brains[0], portal_type, '')
+            return info
+        return []
+
+    security.declareProtected("View", "getUploadImageClasses")
+    def getUploadImageClasses(self, portal_type=None):
+        if portal_type is None:
+            portal_type = self.getDefaultImageType()
+        stored = self.getClassesForType(portal_type)
+        classes = []
+        for c in stored:
+            c = c.strip()
+            if not c:
+                continue
+            if '|' in c:
+                title, classname = c.split('|', 1)
+                classes.append({'title': title, 'classname': classname})
+            else:
+                classes.append({'title': c, 'classname': c})
+        return classes
+
+
     def _getImageSizes(self):
         resource_type = self.getResourceType()
         portal = getToolByName(self, 'portal_url').getPortalObject()

Modified: kupu/trunk/kupu/plone/plonelibrarytool.py
==============================================================================
--- kupu/trunk/kupu/plone/plonelibrarytool.py	(original)
+++ kupu/trunk/kupu/plone/plonelibrarytool.py	Thu Mar 20 16:05:56 2008
@@ -709,8 +709,14 @@
         value = action_map.get(portal_type, {}).get('scalefield', 'image')
         return value
 
+    security.declareProtected(permissions.ManageLibraries, "getDefaultImageType")
+    def getDefaultImageType(self):
+        return 'Image'
+
     security.declareProtected(permissions.ManageLibraries, "getDefaultScaleForType")
-    def getDefaultScaleForType(self, portal_type):
+    def getDefaultScaleForType(self, portal_type = None):
+        if not portal_type:
+            portal_type = self.getDefaultImageType()
         action_map = getattr(self, '_preview_actions', {})
         value = action_map.get(portal_type, {}).get('defscale', 'image_preview')
         return value


More information about the kupu-checkins mailing list