[Checkins] SVN: z3c.widget/trunk/ using passed config url instead
of hard coded flashuploadvars.xml
Bernd Roessl
bernd.roessl at lovelysystems.com
Mon Sep 3 09:46:30 EDT 2007
Log message for revision 79449:
using passed config url instead of hard coded flashuploadvars.xml
Changed:
U z3c.widget/trunk/CHANGES.txt
U z3c.widget/trunk/flash/fla/upload.fla
U z3c.widget/trunk/flash/src/z3c/widget/flashupload/Upload.as
U z3c.widget/trunk/setup.py
U z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.js
U z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.swf
U z3c.widget/trunk/src/z3c/widget/flashupload/upload.py
U z3c.widget/trunk/src/z3c/widget/flashupload/uploadform.pt
-=-
Modified: z3c.widget/trunk/CHANGES.txt
===================================================================
--- z3c.widget/trunk/CHANGES.txt 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/CHANGES.txt 2007-09-03 13:46:30 UTC (rev 79449)
@@ -3,20 +3,23 @@
======================
-After:
-======
+2007/09/03 0.1.2
+================
+ - using passed config url instead of hard coded flashuploadvars.xml
+
+
2007/08/06 0.1.1
================
-- flashupload: better skinnability for upload.swf. cleanup folder
- structure for flash stuff.
+ - flashupload: better skinnability for upload.swf. cleanup folder
+ structure for flash stuff.
2007/06/14 0.1.0:
=================
-- z3c.widget.image: added translations for es
+ - z3c.widget.image: added translations for es
-- update to newest bootstrap.py version
+ - update to newest bootstrap.py version
Modified: z3c.widget/trunk/flash/fla/upload.fla
===================================================================
(Binary files differ)
Modified: z3c.widget/trunk/flash/src/z3c/widget/flashupload/Upload.as
===================================================================
--- z3c.widget/trunk/flash/src/z3c/widget/flashupload/Upload.as 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/flash/src/z3c/widget/flashupload/Upload.as 2007-09-03 13:46:30 UTC (rev 79449)
@@ -1,24 +1,24 @@
/**
- Widget for uploading one or more Files to a Zope3 Server.
+ Widget for uploading one or more Files to a Zope3 Server.
for autentication we need to get a ticket id befor sending the post request.
-
+
step1: get the ticket:
-
+
./ticket.html/filename=myfile.jpg
this returns us a target path:
- targeturl=http://......
+ targeturl=http://......
this is the target where we post the file
-
+
step2: send file to the given url
-
+
configuration:
on _level0 we receive the information about where to get the ticket - inside
- the ticket we receive the url where to upload.
-
+ the ticket we receive the url where to upload.
+
_level0.target_path -> where to get the ticket
- _level0.allowed_types -> space seperated files of allowed types.
-
+ _level0.allowed_types -> space seperated files of allowed types.
+
_level0.allowed_types = "Images (all jpgs and pngs); jpg jpeg png gif|
@author <manfred.schwendinger at lovelysystems.com>
@@ -29,64 +29,64 @@
import flash.net.FileReference;
class z3c.widget.flashupload.Upload extends MovieClip{
-
-
+
+
private var info_mc:MovieClip;
-
+
private var file_array:Array;
private var fileref:FileReferenceList;
private var file:FileReference; // currently active file for upload
-
+
private var allowed_types:Array;
private var debug_txt:TextField;
-
+
private var upload_complete_str:String;
-
+
private var load_vars:LoadVars;
-
+
private var overall_total:Number;
private var overall_loaded:Number;
-
+
private var file_counter:Number;
private var file_amount:Number;
-
+
private var data_xml:XML;
-
+
private var error_msg:String;
-
- private var js_command_queue:Array; // only one getURL can be called inside one frame. so lets make a queue to avoid troubles.
-
+
+ private var js_command_queue:Array; // only one getURL can be called inside one frame. so lets make a queue to avoid troubles.
+
public function Upload(){
-
+
allowed_types = new Array();
js_command_queue = new Array();
-
+
overall_total = 0;
overall_loaded = 0;
file_counter = 0;
-
+
log("initialize. target: "+_level0.target_path);
-
+
// allow upload from the local host
System.security.allowDomain("http://localhost/");
-
+
fileref = new FileReferenceList();
fileref.addListener(this);
-
+
// we do not want to have an overall info if there is only 1 file uploading...
info_mc.overallinfo_mc._visible = false;
-
+
info_mc.fileinfo_mc.progress_mc.bar_mc.gotoAndStop(1);
info_mc.overallinfo_mc.progress_mc.bar_mc.gotoAndStop(1);
-
+
info_mc._visible = false;
this.onResize();
Stage.addListener(this)
-
- var xml_url:String = _level0.site_path+"/@@flashuploadvars.xml";
-
+
+ var xml_url:String = _level0.config_path;
+
data_xml = new XML();
data_xml["ptr"] = this;
data_xml.ignoreWhite = true;
@@ -94,44 +94,44 @@
data_xml.load(xml_url);
//log("vars url: "+xml_url);
-
+
}
private function onResize(){
var margin:Number = 5;
var width:Number = Stage.width - 2*margin;
-
+
// position of the file info (current file name + number)
- info_mc.filenum_txt._x = width - info_mc.filenum_txt._width;
- info_mc.filename_txt._width = info_mc.filenum_txt._x - info_mc.filename_txt._x;
+ info_mc.filenum_txt._x = width - info_mc.filenum_txt._width;
+ info_mc.filename_txt._width = info_mc.filenum_txt._x - info_mc.filename_txt._x;
info_mc.progress_txt.text = "";
info_mc.progress_txt._x = width - info_mc.progress_txt._width;
-
+
// file progress positions
this.setProgressSize(info_mc.fileinfo_mc, width);
// overall progress positions
this.setProgressSize(info_mc.overallinfo_mc, width);
}
-
+
/*
sets the size of a bar line (overall and file bars)
*/
private function setProgressSize(mc:MovieClip, width:Number):Void{
mc.label_txt._width = width - mc.progress_txt._width;
mc.progress_txt._x = width - mc.progress_txt._width;
- mc.progress_mc._width = width;
+ mc.progress_mc._width = width;
}
-
-
+
+
/**
- parses the language dependend strings.
+ parses the language dependend strings.
*/
private function parseDataXML(obj_xml:XML):Void{
log("xml loaded: "+obj_xml.firstChild);
var nodes = obj_xml.firstChild.childNodes;
for (var i=0; i<nodes.length; i++){
- var nodeval:String = nodes[i].firstChild.nodeValue;
+ var nodeval:String = nodes[i].firstChild.nodeValue;
switch(nodes[i].attributes.name){
case "file_progress" :
info_mc.fileinfo_mc.label_txt.text = nodeval;
@@ -159,12 +159,12 @@
}
}
}
-
-
+
+
/**
creates an array with all allowed types
the data gets parsed from the variable of _level0.allowed_types
-
+
var file:FileReference;
var allTypes:Array = new Array();
@@ -177,19 +177,19 @@
textTypes.description = "Text Files (*.txt, *.rtf)";
textTypes.extension = "*.txt;*.rtf";
allTypes.push(textTypes);
-
+
arr = [{description:'a description', extension:'*.jpg'}, .....]
*/
public function saveAllowedTypes(arr:Array):Void{
allowed_types = arr;
}
-
+
/**
starts the browsing process for uploading files
*/
public function browse():Void{
js_command_queue.push("javascript:z3cFlashUploadDisableBrowseButton()");
-
+
if (allowed_types.length>0){
log("browse with limited filetypes: "+allowed_types);
var allTypes:Array = new Array();
@@ -208,24 +208,24 @@
log("browse");
fileref.browse();
}
-
+
}
/**
starts the upload queue
*/
public function onSelect(fileRefList:FileReferenceList):Void{
-
+
file_array = fileRefList.fileList;
- log("uploadFiles: "+file_array.length);
-
- // overall progress should be visible on mutliple fileupload only.
+ log("uploadFiles: "+file_array.length);
+
+ // overall progress should be visible on mutliple fileupload only.
info_mc.overallinfo_mc._visible = (file_array.length > 1);
-
+
for (var i=0; i<file_array.length; i++){
overall_total+=file_array[i].size;
}
-
+
if (file_array.length>0){
info_mc._visible = true;
file_counter = 0;
@@ -233,10 +233,10 @@
loadNextTicket();
}
}
-
+
/**
loads the next upload ticket via loadvars
- the ticket holds some security information which
+ the ticket holds some security information which
are required for the upload
*/
public function loadNextTicket():Void{
@@ -245,17 +245,17 @@
// fired because the file was so small that onProgress was
// never fired
this.updateFileProgress(100);
-
+
if (file_array.length == 0){
log("all files uploaded.");
// all files uploaded. Fire JavaScript Event
js_command_queue.push("javascript:z3cFlashUploadOnUploadCompleteFEvent()");
-
+
info_mc.filename_txt.text = upload_complete_str;
this.updateOverallProgress(100);
return;
}
-
+
load_vars = new LoadVars();
load_vars["ptr"] = this;
load_vars.onData = function(d:String){
@@ -264,52 +264,52 @@
}
load_vars.load(_level0.target_path+"/@@ticket");
}
-
-
+
+
/**
loads the next file inside the file_array
*/
- public function loadNextFile(ticket:String):Void{
+ public function loadNextFile(ticket:String):Void{
file = FileReference(file_array.pop());
-
+
var url:String = _level0.target_path+"?ticket="+ticket;
-
+
log("uploadNextFile: "+url);
-
+
file.addListener(this);
file.upload(url);
}
-
-
+
+
public function log(msg:String):Void{
trace(msg);
-
+
if (msg.length>500) msg = msg.substring(msg.length-100, msg.length);
-
+
_level0.debug_txt.text+=msg+"\n";
_level0.debug_txt.scroll = _level0.debug_mc.debug_txt.maxscroll;
}
-
-
-
+
+
+
/**
FileReference Listeners....
*/
public function onProgress(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void{
-
+
var percent:Number = Math.round(bytesLoaded/bytesTotal * 100);
if (percent>100) percent=100; // for any strange reason, the totalbytes can be smaller then the loade bytes :)
log("onProgress " + bytesLoaded + " bytesTotal: " + bytesTotal+" = "+percent+"%");
this.updateFileProgress(percent);
-
+
var percent_complete:Number = Math.round((overall_loaded+bytesLoaded) / overall_total * 100);
// hack for waiting time after last upload is done
- // 100% should only be displayed when the LAST object fired his READY event.
- if (percent_complete > 95) percent_complete = 95;
+ // 100% should only be displayed when the LAST object fired his READY event.
+ if (percent_complete > 95) percent_complete = 95;
this.updateOverallProgress(percent_complete);
-
+
info_mc.progress_txt.text = getByteString(overall_loaded + bytesLoaded) + "/" + getByteString(overall_total);
}
@@ -318,13 +318,13 @@
info_mc.fileinfo_mc.progress_mc.bar_mc.gotoAndStop(percent);
info_mc.fileinfo_mc.progress_txt.text = percent+"%";
}
-
+
public function updateOverallProgress(percent:Number):Void{
if (percent>100) percent = 100;
info_mc.overallinfo_mc.progress_mc.bar_mc.gotoAndStop(percent);
info_mc.overallinfo_mc.progress_txt.text = percent+"%";
}
-
+
/**
returns a nice prepared string
*/
@@ -342,14 +342,14 @@
return String(Math.round(bytes/1024)+"KB");
}
}
-
+
public function onComplete(file:FileReference):Void{
log("file upload complete");
-
+
overall_loaded+=file.size;
this.loadNextTicket();
-
- // tell javascript that the file is uploaded.
+
+ // tell javascript that the file is uploaded.
js_command_queue.push("javascript:z3cFlashUploadOnFileCompleteFEvent('"+file.name+"')");
}
@@ -357,11 +357,11 @@
log("onCancel");
js_command_queue.push("javascript:z3cFlashUploadOnCancelFEvent()");
}
-
+
public function onOpen(file:FileReference):Void{
log("onOpen: "+file.name+" : "+file.size);
file_counter++;
-
+
info_mc.filename_txt.text = file.name +" ("+Math.round(file.size/1024)+"kb)";
info_mc.filenum_txt.text = file_counter+"/"+file_amount;
}
@@ -373,12 +373,12 @@
public function onIOError(file:FileReference):Void {
log("onIOError: " + file.name);
- js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
+ js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
}
-
+
public function onSecurityError(file:FileReference, errorString:String):Void {
log("onSecurityError: " + file.name + " errorString: " + errorString);
- js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
+ js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
}
public function onEnterFrame():Void{
@@ -387,12 +387,12 @@
_level0.startBrowse = "";
this.browse();
}
-
+
if (js_command_queue.length>0){
var command = js_command_queue.shift();
getURL(command);
}
-
+
}
-
+
}
Modified: z3c.widget/trunk/setup.py
===================================================================
--- z3c.widget/trunk/setup.py 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/setup.py 2007-09-03 13:46:30 UTC (rev 79449)
@@ -2,7 +2,7 @@
from setuptools import setup, find_packages
setup(name='z3c.widget',
- version='0.1.1',
+ version='0.1.2',
author = "Zope Community",
author_email = "zope3-dev at zope.org",
description = "Additional Zope3 Widgets",
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.js
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.js 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.js 2007-09-03 13:46:30 UTC (rev 79449)
@@ -4,7 +4,7 @@
window.document["fuploader"].SetVariable("startBrowse", "go");
}else if(document.fuploader){
document.fuploader.SetVariable("startBrowse", "go");
- }
+ }
}
function z3cFlashUploadDisableBrowseButton(){
@@ -28,24 +28,28 @@
/**
called when the user presses the cancel button while browsing
-*/
+*/
function z3cFlashUploadOnCancelFEvent(){
if (typeof(z3cFlashUploadOnCancelEvent) =="function"){
z3cFlashUploadOnCancelEvent();
- }
+ }
}
/**
- called if an error occured during the upload progress
+ called if an error occured during the upload progress
*/
function z3cFlashUploadOnErrorFEvent(error_str){
if (typeof(z3cFlashUploadOnErrorEvent) =="function"){
z3cFlashUploadOnErrorEvent(error_str);
- }
+ }
}
+
+function prepareUrlForFlash(url){
+ return escape(url).split("+").join("%2B");
+}
/**
creates a instance of the multifile upload widget
- insidde the target div.
+ insidde the target div.
Required global variable: swf_upload_target_path
*/
function createFlashUpload()
@@ -55,12 +59,12 @@
so.addParam("wmode", "transparent");
// we need to manually quote the "+" signs to make sure they do not
- // result in a " " sign inside flash
- var quoted_location_url = escape(window.location.href).split("+").join("%2B");
- so.addVariable("target_path", swf_upload_target_path);
- so.addVariable("base_path", quoted_location_url);
- so.addVariable("site_path", swf_upload_site_url);
+ // result in a " " sign inside flash
+ so.addVariable("target_path", prepareUrlForFlash(swf_upload_target_path));
+ so.addVariable("site_path", prepareUrlForFlash(swf_upload_site_url));
+ so.addVariable("config_path", prepareUrlForFlash(swf_upload_config_url));
+
var success = so.write("flashuploadtarget");
if (!success){
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.swf
===================================================================
(Binary files differ)
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/upload.py
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/upload.py 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/upload.py 2007-09-03 13:46:30 UTC (rev 79449)
@@ -27,19 +27,19 @@
to configure the flash upload swf"""
allowedFileTypes = () # empty tuple for all file types
-
-
+
+
class UploadFile(object):
"""handles file upload for the flash client.
flash client sends the data via post as u'Filedata'
the filename gets sent as: u'Filename'
"""
interface.implements(IUploadFileView)
-
+
def __call__(self):
ticket = self.request.form.get('ticket',None)
-
+
url = None
if ticket is None:
# we cannot set post headers in flash, so get the
@@ -65,33 +65,35 @@
# get the namechooser for the container by adapting the
# container to INameChooser
nameChooser = INameChooser(self.context)
-
+
# namechooser selects a name for us
name = nameChooser.chooseName(fileName, f)
# check precondition
checkObject(self.context, name, f)
-
+
# store the file inside the container
removeSecurityProxy(self.context)[name]=f
event.notify(FlashUploadedEvent(f))
return "filename=%s" %name
-
-
+
+
class UploadForm(BrowserView):
"""displays the swf for uploading files
"""
-
+
template = ViewPageTemplateFile('uploadform.pt')
interface.implements(IFlashUploadForm)
@property
+ def configUrl(self):
+ return '%s/@@flashuploadvars.xml' % self.siteUrl
+
+ @property
def siteUrl(self):
- import pdb; pdb.set_trace()
+ return absoluteURL(ISite(None), self.request)
- return absoluteURL(ISite(None), self.request)
-
def __call__(self, *args, **kw):
if haveResourceLibrary:
resourcelibrary.need('z3c.widget.flashupload')
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/uploadform.pt
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/uploadform.pt 2007-09-03 12:27:08 UTC (rev 79448)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/uploadform.pt 2007-09-03 13:46:30 UTC (rev 79449)
@@ -12,6 +12,7 @@
var swf_upload_url='${context/++resource++upload.swf}';
var swf_upload_target_path='${context/@@absolute_url/url:quote}/uploadfile';
var swf_upload_site_url='${view/siteUrl}';
+ var swf_upload_config_url = '${view/configUrl}';
">
</script>
More information about the Checkins
mailing list