[Checkins] SVN: z3c.widget/trunk/src/z3c/widget/flashupload/ added
filetype limitation support
Manfred Schwendinger
manfred.schwendiger at lovelysystems.com
Tue Dec 12 12:02:14 EST 2006
Log message for revision 71539:
added filetype limitation support
Changed:
A z3c.widget/trunk/src/z3c/widget/flashupload/README.txt
U z3c.widget/trunk/src/z3c/widget/flashupload/configure.zcml
U z3c.widget/trunk/src/z3c/widget/flashupload/flashuploadvars.pt
U z3c.widget/trunk/src/z3c/widget/flashupload/resources/Upload.as
U z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.swf
U z3c.widget/trunk/src/z3c/widget/flashupload/tests.py
U z3c.widget/trunk/src/z3c/widget/flashupload/upload.py
-=-
Added: z3c.widget/trunk/src/z3c/widget/flashupload/README.txt
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/README.txt 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/README.txt 2006-12-12 17:02:13 UTC (rev 71539)
@@ -0,0 +1,31 @@
+===================
+FLASH UPLOAD WIDGET
+===================
+
+the flashupload vars page configures the flash frontend
+ >>> from z3c.widget.flashupload import upload
+ >>> from zope.testing.doctestunit import DocTestSuite
+ >>> from zope.publisher.browser import TestRequest
+ >>> from zope.app.pagetemplate import ViewPageTemplateFile
+ >>> from zope.app.pagetemplate.simpleviewclass import SimpleViewClass
+ >>> request = TestRequest()
+ >>> context = object()
+ >>> viewClass = SimpleViewClass('flashuploadvars.pt', bases=(upload.FlashUploadVars,))
+ >>> view = viewClass(context, request)
+ >>> print view()
+ <?xml version="1.0" ?>
+ <var>
+ <var name="file_progress">File Progress</var>
+ <var name="overall_progress">Overall Progress</var>
+ <var name="error">Error on uploading files</var>
+ <var name="uploadcomplete">all files uploaded</var>
+ </var>
+ >>> view.allowedFileTypes = ('.jpg', '.gif')
+ >>> print view()
+ <?xml version="1.0" ?>
+ <var>
+ ...
+ <var name="allowedFileType">.jpg</var>
+ <var name="allowedFileType">.gif</var>
+ </var>
+
Property changes on: z3c.widget/trunk/src/z3c/widget/flashupload/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/configure.zcml
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/configure.zcml 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/configure.zcml 2006-12-12 17:02:13 UTC (rev 71539)
@@ -5,38 +5,39 @@
xmlns:zcml="http://namespaces.zope.org/zcml"
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n:domain="z3c.widget.flashupload">
-
- <!-- target for flash upload client -->
+
+ <!-- target for flash upload client -->
<browser:page
for="zope.app.container.interfaces.IContainer"
name="uploadfile"
class=".upload.UploadFile"
permission="zope.Public"
- />
-
+ />
+
<configure zcml:condition="have zc.resourcelibrary">
- <resourceLibrary name="z3c.widget.flashupload"
- require="z3c.javascript.prototype">
- <directory source="resources" include="upload.js swfobject.js"/>
+ <resourceLibrary name="z3c.widget.flashupload"
+ require="z3c.javascript.prototype">
+ <directory source="resources" include="upload.js swfobject.js"/>
</resourceLibrary>
</configure>
<!-- ticket view -->
-
+
<browser:page
- for=".interfaces.IUploadFileView"
- name="ticket"
- class=".ticket.TicketView"
- permission="zope.ManageContent"
- />
-
+ for=".interfaces.IUploadFileView"
+ name="ticket"
+ class=".ticket.TicketView"
+ permission="zope.ManageContent"
+ />
+
<browser:page
- for=".interfaces.IFlashUploadForm"
- name="flashuploadvars.xml"
- template="flashuploadvars.pt"
- permission="zope.Public"
- />
-
- <i18n:registerTranslations directory="locales" />
+ for=".interfaces.IFlashUploadForm"
+ name="flashuploadvars.xml"
+ class=".upload.FlashUploadVars"
+ template="flashuploadvars.pt"
+ permission="zope.Public"
+ />
+ <i18n:registerTranslations directory="locales" />
+
</configure>
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/flashuploadvars.pt
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/flashuploadvars.pt 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/flashuploadvars.pt 2006-12-12 17:02:13 UTC (rev 71539)
@@ -6,4 +6,10 @@
<var name="overall_progress" i18n:translate="">Overall Progress</var>
<var name="error" i18n:translate="">Error on uploading files</var>
<var name="uploadcomplete" i18n:translate="">all files uploaded</var>
+ <tal:block
+ tal:condition="view/allowedFileTypes"
+ tal:repeat="allowedType view/allowedFileTypes">
+ <var name="allowedFileType" tal:content="allowedType">jpg</var>
+ </tal:block>
+
</var>
\ No newline at end of file
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/resources/Upload.as
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/resources/Upload.as 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/resources/Upload.as 2006-12-12 17:02:13 UTC (rev 71539)
@@ -1 +1 @@
-/**
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://......
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.
_level0.target_path -> where to get the ticket
_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>
*/
import flash.net.FileReferenceList;
import flash.net.FileReference;
class 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.
public function Upload(){
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.base_path+"/@@flashuploadvars.xml";
data_xml = new XML();
data_xml["ptr"] = this;
data_xml.ignoreWhite = true;
data_xml.onLoad = function(){ this.ptr.parseDataXML(this); }
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.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.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;
}
/**
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;
switch(nodes[i].attributes.name){
case "file_progress" :
info_mc.fileinfo_mc.label_txt.text = nodeval;
break;
case "overall_progress" :
info_mc.overallinfo_mc.label_txt.text = nodeval;
break;
case "error" :
error_msg = nodeval;
break;
case "uploadcomplete" :
upload_complete_str = nodeval;
break;
default:
log("error: unexpected attribute: "+nodes[i].attributes.name);
break;
}
}
}
/**
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();
var imageTypes:Object = new Object();
imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";
imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
allTypes.push(imageTypes);
var textTypes:Object = new Object();
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){
fileref.browse(allowed_types);
}
else{
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.
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;
file_amount = file_array.length;
loadNextTicket();
}
}
/**
loads the next upload ticket via loadvars
the ticket holds some security information which
are required for the upload
*/
public function loadNextTicket():Void{
// we want to have a 100% bar, even if onProgress was never
// 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){
this["ptr"].log("load data: "+d);
this["ptr"].loadNextFile(d);
}
load_vars.load(_level0.target_path+"/@@ticket");
}
/**
loads the next file inside the file_array
*/
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;
this.updateOverallProgress(percent_complete);
info_mc.progress_txt.text = getByteString(overall_loaded + bytesLoaded) + "/" + getByteString(overall_total);
}
public function updateFileProgress(percent:Number):Void{
if (percent>100) percent = 100;
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
*/
public function getByteString(bytes:Number):String{
if (bytes<1024){
// bytes
return String(Math.round(bytes)+"B");
}
else if (bytes>(1024*1024)){
// MB
return String(Math.round(bytes/(1024*1024))+"MB");
}
else{
// KB
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.
js_command_queue.push("javascript:z3cFlashUploadOnFileCompleteFEvent('"+file.name+"')");
}
public function onCancel(file:FileReference):Void{
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;
}
public function onHTTPError(file:FileReference):Void {
log("onHTTPError: " + file.name);
js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
}
public function onIOError(file:FileReference):Void {
log("onIOError: " + file.name);
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+"')");
}
public function onEnterFrame():Void{
if (_level0.startBrowse=="go"){
log("go event was fired");
_level0.startBrowse = "";
this.browse();
}
if (js_command_queue.length>0){
var command = js_command_queue.shift();
getURL(command);
}
}
}
\ No newline at end of file
+/**
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://......
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.
_level0.target_path -> where to get the ticket
_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>
*/
import flash.net.FileReferenceList;
import flash.net.FileReference;
class 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.
public function Upload(){
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.base_path+"/@@flashuploadvars.xml";
data_xml = new XML();
data_xml["ptr"] = this;
data_xml.ignoreWhite = true;
data_xml.onLoad = function(){ this.ptr.parseDataXML(this); }
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.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.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;
}
/**
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;
switch(nodes[i].attributes.name){
case "file_progress" :
info_mc.fileinfo_mc.label_txt.text = nodeval;
break;
case "overall_progress" :
info_mc.overallinfo_mc.label_txt.text = nodeval;
break;
case "error" :
error_msg = nodeval;
break;
case "uploadcomplete" :
upload_complete_str = nodeval;
break;
case "allowedFileType":
var allowedType = nodeval;
if (allowedType.chatAt(0) == ".") allowedType = "*"+allowedType;
if (allowed_types.length < 0) allowed_types = new Array();
allowed_types.push(allowedType);
break;
default:
log("error: unexpected attribute: "+nodes[i].attributes.name);
break;
}
}
}
/**
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();
var imageTypes:Object = new Object();
imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";
imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
allTypes.push(imageTypes);
var textTypes:Object = new Object();
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){
fileref.browse(allowed_types);
}
else{
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.
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;
file_amount = file_array.length;
loadNextTicket();
}
}
/**
loads the next upload ticket via loadvars
the ticket holds some security information which
are required for the upload
*/
public function loadNextTicket():Void{
// we want to have a 100% bar, even if onProgress was never
// 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){
this["ptr"].log("load data: "+d);
this["ptr"].loadNextFile(d);
}
load_vars.load(_level0.target_path+"/@@ticket");
}
/**
loads the next file inside the file_array
*/
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;
this.updateOverallProgress(percent_complete);
info_mc.progress_txt.text = getByteString(overall_loaded + bytesLoaded) + "/" + getByteString(overall_total);
}
public function updateFileProgress(percent:Number):Void{
if (percent>100) percent = 100;
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
*/
public function getByteString(bytes:Number):String{
if (bytes<1024){
// bytes
return String(Math.round(bytes)+"B");
}
else if (bytes>(1024*1024)){
// MB
return String(Math.round(bytes/(1024*1024))+"MB");
}
else{
// KB
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.
js_command_queue.push("javascript:z3cFlashUploadOnFileCompleteFEvent('"+file.name+"')");
}
public function onCancel(file:FileReference):Void{
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;
}
public function onHTTPError(file:FileReference):Void {
log("onHTTPError: " + file.name);
js_command_queue.push("javascript:z3cFlashUploadOnErrorFEvent('"+this.error_msg+"')");
}
public function onIOError(file:FileReference):Void {
log("onIOError: " + file.name);
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+"')");
}
public function onEnterFrame():Void{
if (_level0.startBrowse=="go"){
log("go event was fired");
_level0.startBrowse = "";
this.browse();
}
if (js_command_queue.length>0){
var command = js_command_queue.shift();
getURL(command);
}
}
}
\ No newline at end of file
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/resources/upload.swf
===================================================================
(Binary files differ)
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/tests.py
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/tests.py 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/tests.py 2006-12-12 17:02:13 UTC (rev 71539)
@@ -1,6 +1,6 @@
import doctest
import unittest
-from zope.testing.doctestunit import DocTestSuite
+from zope.testing.doctestunit import DocTestSuite, DocFileSuite
from zope.app.testing import setup
def setUp(test):
@@ -17,6 +17,11 @@
setUp=setUp,tearDown=tearDown,
optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
),
+ DocFileSuite('README.txt',
+ setUp=setUp,tearDown=tearDown,
+ optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+ ),
+
))
if __name__ == '__main__':
Modified: z3c.widget/trunk/src/z3c/widget/flashupload/upload.py
===================================================================
--- z3c.widget/trunk/src/z3c/widget/flashupload/upload.py 2006-12-12 15:35:50 UTC (rev 71538)
+++ z3c.widget/trunk/src/z3c/widget/flashupload/upload.py 2006-12-12 17:02:13 UTC (rev 71539)
@@ -10,6 +10,7 @@
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.app.container.constraints import checkObject
from zope import event
+
from i18n import _
from z3c.widget.flashupload.interfaces import IFlashUploadForm, IUploadFileView, FlashUploadedEvent
@@ -22,6 +23,14 @@
haveResourceLibrary = False
+class FlashUploadVars(BrowserView):
+ """simple view for the flashupload.pt
+ 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'
More information about the Checkins
mailing list