[Checkins] SVN: z3c.reference/branches/flash/ first step for
generic relation forms with reference widget for cropping images
Manfred Schwendinger
manfred.schwendiger at lovelysystems.com
Fri Sep 7 09:22:50 EDT 2007
Log message for revision 79522:
first step for generic relation forms with reference widget for cropping images
Changed:
U z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
U z3c.reference/branches/flash/setup.py
U z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
U z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
A z3c.reference/branches/flash/src/z3c/reference/browser/crop-image-widget.pt
U z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
U z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
U z3c.reference/branches/flash/src/z3c/reference/demo/browser/ftesting.zcml
U z3c.reference/branches/flash/src/z3c/reference/demo/browser/views.py
-=-
Modified: z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as
===================================================================
--- z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/flash/src/z3c/reference/imagetool/core/FlashvarManager.as 2007-09-07 13:22:49 UTC (rev 79522)
@@ -1,82 +1,82 @@
-/*
- * FlashvarManager.as
- *
- * Manager for flashvars, use this instead of _level0.xxx to access a flashvar.
- * Call oneTimeInit at the beginning of your application, the manager collects
- * all variables on _level0, copies them to a object, decodes strings ('+' and '=')
- * and parses numbers correctly...
- *
- * @author <gerold.boehler at lovelysystems.com>
- *
- */
-
-class z3c.reference.imagetool.core.FlashvarManager extends z3c.reference.imagetool.core.EventBroadcaster
-{
- private static var _instance:z3c.reference.imagetool.core.FlashvarManager;
- private var flashVars:Object;
-
-
- function FlashvarManager()
- {
- flashVars = new Object();
- }
-
- public static function oneTimeInit():Void
- {
- for (var flashvar in _level0)
- {
- if (flashvar.indexOf("$") == 0)
- continue;
-
- getInstance().setVar(flashvar, decodeForFlash(_level0[flashvar]));
- delete _level0[flashvar];
- }
- }
-
- private static function decodeForFlash(str:String)
- {
- if (!isNaN(parseFloat(str)))
- return parseFloat(str);
-
- if (typeof(str) == "boolean")
- return str;
-
- if (str == "true" || str == "false")
- return str == "true";
-
- str = str.split("[p]").join("+");
- str = str.split("[e]").join("=");
-
- return str;
- }
-
- private function getVar(name:String):String
- {
- if (flashVars[name])
- return flashVars[name];
-
- return undefined;
- }
-
- private function setVar(name:String, value:String):Void
- {
- flashVars[name] = value;
- trace("SETTING: " + name + " " + value)
- }
-
- public static function get(name:String)
- {
- if (!getInstance().getVar(name)) {
- //getInstance().log("!ERROR! Flashvar " + name + " not found!");
- }
- return getInstance().getVar(name);
- }
-
- public static function getInstance():FlashvarManager
- {
- if (!_instance)
- _instance = new FlashvarManager();
-
- return _instance;
- }
+/*
+ * FlashvarManager.as
+ *
+ * Manager for flashvars, use this instead of _level0.xxx to access a flashvar.
+ * Call oneTimeInit at the beginning of your application, the manager collects
+ * all variables on _level0, copies them to a object, decodes strings ('+' and '=')
+ * and parses numbers correctly...
+ *
+ * @author <gerold.boehler at lovelysystems.com>
+ *
+ */
+
+class z3c.reference.imagetool.core.FlashvarManager extends z3c.reference.imagetool.core.EventBroadcaster
+{
+ private static var _instance:z3c.reference.imagetool.core.FlashvarManager;
+ private var flashVars:Object;
+
+
+ function FlashvarManager()
+ {
+ flashVars = new Object();
+ }
+
+ public static function oneTimeInit():Void
+ {
+ for (var flashvar in _level0)
+ {
+ if (flashvar.indexOf("$") == 0)
+ continue;
+
+ getInstance().setVar(flashvar, decodeForFlash(_level0[flashvar]));
+ delete _level0[flashvar];
+ }
+ }
+
+ private static function decodeForFlash(str:String)
+ {
+ if (!isNaN(parseFloat(str)))
+ return parseFloat(str);
+
+ if (typeof(str) == "boolean")
+ return str;
+
+ if (str.toLowerCase() == "true" || str.toLowerCase == "false")
+ return str.toLowerCase() == "true";
+
+ str = str.split("[p]").join("+");
+ str = str.split("[e]").join("=");
+
+ return str;
+ }
+
+ private function getVar(name:String):String
+ {
+ if (flashVars[name])
+ return flashVars[name];
+
+ return undefined;
+ }
+
+ private function setVar(name:String, value:String):Void
+ {
+ flashVars[name] = value;
+ trace("SETTING: " + name + " " + value)
+ }
+
+ public static function get(name:String)
+ {
+ if (!getInstance().getVar(name)) {
+ //getInstance().log("!ERROR! Flashvar " + name + " not found!");
+ }
+ return getInstance().getVar(name);
+ }
+
+ public static function getInstance():FlashvarManager
+ {
+ if (!_instance)
+ _instance = new FlashvarManager();
+
+ return _instance;
+ }
}
\ No newline at end of file
Modified: z3c.reference/branches/flash/setup.py
===================================================================
--- z3c.reference/branches/flash/setup.py 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/setup.py 2007-09-07 13:22:49 UTC (rev 79522)
@@ -39,7 +39,9 @@
'zope.traversing',
'lovely.relation>=0.3.0',
'z3c.javascript',
- 'z3c.viewtemplate'
+ 'z3c.viewtemplate',
+ 'cElementTree',
+ 'elementtree'
],
dependency_links = ['http://download.zope.org/distribution']
)
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/README.txt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/README.txt 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/README.txt 2007-09-07 13:22:49 UTC (rev 79522)
@@ -201,3 +201,33 @@
>>> refid == intids.getId(same)
True
+
+
+CropImageWidget
+===============
+
+ we need some resources
+
+ >>> from zope import schema, interface
+ >>> from zope.publisher.browser import TestRequest
+ >>> from z3c.reference.browser.widget import CropImageWidget
+ >>> from zope.app.container.contained import Contained
+ >>> class IContent(interface.Interface):
+ ... imageCropData = ViewReferenceField(title=u'image crop data',
+ ... required = False)
+ >>> class Content(Contained):
+ ... pass
+ >>> content = Content()
+ >>> site['content'] = content
+
+ >>> field = IContent['imageCropData']
+ >>> field = field.bind(content)
+
+ >>> request = TestRequest()
+ >>> widget = CropImageWidget(field, request)
+ >>> rendered = widget()
+ >>> 'addVariable' in rendered
+ True
+ >>> 'http://127.0.0.1/content' in rendered
+ True
+
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/configure.zcml 2007-09-07 13:22:49 UTC (rev 79522)
@@ -52,7 +52,8 @@
/>
<resourceLibrary name="z3c.reference"
- require="z3c.javascript.jquery">
+ require="z3c.javascript.jquery
+ z3c.javascript.swfobject">
<directory source="resources"
include="jquery.popupwindow.js z3c_reference.js"
/>
Added: z3c.reference/branches/flash/src/z3c/reference/browser/crop-image-widget.pt
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/crop-image-widget.pt (rev 0)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/crop-image-widget.pt 2007-09-07 13:22:49 UTC (rev 79522)
@@ -0,0 +1,49 @@
+<div id="image-tool-target">
+
+</div>
+
+<input tal:replace="structure view/inputField" />
+
+<script type="text/javascript" tal:content='string:
+function encodeForFlash(str) {
+ str=str.split("+").join("[p]");
+ str=str.split("=").join("[e]");
+ return str;
+}
+
+function cropImage(crop_x, crop_y, crop_w, crop_h, size_w, size_h, rotation){
+ var url = "@@processed?";
+ url = url + "remote.adjust.rotate=" + rotation;
+ url = url + "&remote.size.w=" + size_w;
+ url = url + "&remote.size.h=" + size_h;
+ url = url + "&local.crop.h=" + crop_h;
+ url = url + "&local.crop.w=" + crop_w;
+ url = url + "&local.crop.x=" + crop_x;
+ url = url + "&local.crop.y=" + crop_y;
+ document.getElementById("${view/escapedName}").value = url;
+}
+
+'>
+</script>
+
+<script type="text/javascript"
+ tal:content="string:
+ var url='${context/++resource++imagetool.swf}';
+ var img='${view/url}';
+ url = url + '?url=' + encodeForFlash(img) + '/@@resized';
+ var so = new SWFObject(url, 'image-tool-target', '100%', '490px', '8', 0x000000);
+ so.addParam('allowScriptAccess', 'sameDomain');
+ so.addParam('movie', url);
+ so.addParam('quality', 'high');
+ so.addVariable('crop_x', '100');
+ so.addVariable('crop_y', '100');
+ so.addVariable('crop_w', '100');
+ so.addVariable('crop_h', '100');
+ so.addVariable('original_w', '600');
+ so.addVariable('original_h', '400');
+ so.addVariable('zoomfactor', '0.33');
+ so.addVariable('rotation', '90');
+ so.addVariable('keepAspectRatio', '${view/keepAspect}');
+ var ok = so.write('image-tool-target');
+ ">
+</script>
\ No newline at end of file
Property changes on: z3c.reference/branches/flash/src/z3c/reference/browser/crop-image-widget.pt
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/tests.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/tests.py 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/tests.py 2007-09-07 13:22:49 UTC (rev 79522)
@@ -16,8 +16,12 @@
"""
__docformat__ = 'restructuredtext'
+import os
import doctest
import unittest
+import zope
+from zope.traversing.interfaces import ITraverser, ITraversable
+
from zope.testing.doctestunit import DocFileSuite, DocTestSuite
from zope.app.testing import setup
from zope.app.intid import IntIds
@@ -32,21 +36,45 @@
from z3c.reference.interfaces import IViewReference
from zope.traversing.browser.absoluteurl import AbsoluteURL
from zope.publisher.browser import BrowserPage
+from zope.app.publisher.browser.fileresource import FileResource, File
+from zope.app.testing.ztapi import browserResource
+from zope.traversing.namespace import resource, view
+
from lovely.relation import configurator
from views import ViewReferenceAbsoluteURL
+from zope.traversing.testing import setUp as setUpTraversing
class TestPage(BrowserPage):
def __call__(self):
return "testpage"
+class Resource(object):
+
+ def __init__(self, request):
+ pass
+
def setUp(test):
+
site = setup.placefulSetUp(True)
test.globs['site'] = site
util = configurator.SetUpO2OStringTypeRelationships(site)
util({})
+ setUpTraversing()
+ zope.component.provideAdapter(resource, (None,), ITraversable, name="resource")
+ zope.component.provideAdapter(resource, (None, None), ITraversable, name="resource")
+ zope.component.provideAdapter(view, (None,), ITraversable, name="view")
+ zope.component.provideAdapter(view, (None, None), ITraversable, name="view")
+
+# path = os.path.dirname(__file__)
+# path = os.path.join(path, 'resources', 'imagetool.swf')
+# toolFile = File(path, 'imagetool.swf')
+# FileResource(toolFile, None)
+# toolFileResource = Resource
+ browserResource('imagetool.swf', Resource)
+
component.provideAdapter(SimpleKeyReference)
component.provideAdapter(ZDCAnnotatableAdapter,
provides=IWriteZopeDublinCore)
@@ -62,7 +90,7 @@
def test_suite():
-
+
return unittest.TestSuite((
DocFileSuite('serialize.txt',
setUp=setUp,tearDown=tearDown,
Modified: z3c.reference/branches/flash/src/z3c/reference/browser/widget.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/browser/widget.py 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/browser/widget.py 2007-09-07 13:22:49 UTC (rev 79522)
@@ -29,6 +29,8 @@
from zope.app.form.browser.textwidgets import TextWidget
from zope.app.component import hooks
from zope.app.form.browser.widget import renderElement
+from zope.app.form.browser.textwidgets import BytesWidget
+from zope.app.pagetemplate import ViewPageTemplateFile
from zc import resourcelibrary
from z3c.reference import interfaces
@@ -301,3 +303,26 @@
except TypeError:
return self._missing
return url
+
+
+class CropImageWidget(BytesWidget):
+ """widget for cropping images"""
+
+ template = ViewPageTemplateFile('crop-image-widget.pt')
+ keepAspect = False
+
+ def url(self):
+ return absoluteURL(self.context.context, self.request)
+
+ def inputField(self):
+ return super(CropImageWidget, self).__call__()
+
+ def escapedName(self):
+ return self.name.replace('.', r'\.')
+
+ def __call__(self, *args, **kw):
+ resourcelibrary.need('z3c.javascript.swfobject')
+ return self.template(*args, **kw)
+
+
+
Modified: z3c.reference/branches/flash/src/z3c/reference/demo/browser/ftesting.zcml
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/browser/ftesting.zcml 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/browser/ftesting.zcml 2007-09-07 13:22:49 UTC (rev 79522)
@@ -5,6 +5,7 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="zope">
+
<include package="zope.app.securitypolicy" file="meta.zcml" />
<include
zcml:condition="installed zope.app.zcmlfiles"
@@ -64,6 +65,7 @@
<include package="zope.app.file"/>
<include package="zc.resourcelibrary" />
<include package="z3c.javascript.jquery"/>
+ <include package="z3c.javascript.swfobject"/>
<include package="lovely.relation" />
<include package="lovely.relation" file="o2o.zcml" />
Modified: z3c.reference/branches/flash/src/z3c/reference/demo/browser/views.py
===================================================================
--- z3c.reference/branches/flash/src/z3c/reference/demo/browser/views.py 2007-09-07 12:20:29 UTC (rev 79521)
+++ z3c.reference/branches/flash/src/z3c/reference/demo/browser/views.py 2007-09-07 13:22:49 UTC (rev 79522)
@@ -29,8 +29,10 @@
from z3c.reference.demo.interfaces import (IDemoFolder, IDemoImage)
from z3c.reference.interfaces import IViewReferenceEditorSearch
-from z3c.reference.interfaces import IViewReferenceEditor
+from z3c.reference.interfaces import IViewReferenceEditor, \
+ IViewReference
+from z3c.reference.browser.widget import CropImageWidget
class DemoFolderEdit(form.EditForm):
"""Demo folder edit form."""
@@ -108,10 +110,15 @@
def __call__(self):
return self.template()
-
-class ViewReferenceEditor(object):
+class ViewReferenceEditor(form.EditForm):
"""Represents the IViewReferenceEditor form."""
+ action = form.Actions()
+ form_fields = form.Fields(IZopeDublinCore['title'],
+ IZopeDublinCore['description'],
+ IViewReference['view'])
+ form_fields['view'].custom_widget = CropImageWidget
+
interface.implements(IViewReferenceEditor)
template = ViewPageTemplateFile('editor_edit.pt')
settingNameStr = u''
@@ -126,3 +133,7 @@
def __call__(self):
return self.template()
+
+ def setUpWidgets(self, ignore_context=True):
+ return super(ViewReferenceEditor, self).setUpWidgets(
+ ignore_context)
More information about the Checkins
mailing list