uploader 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +275 -0
  3. data/Rakefile +66 -0
  4. data/TODO +2 -0
  5. data/VERSION +1 -0
  6. data/app/controllers/uploader/uploads_controller.rb +122 -0
  7. data/app/helpers/uploader_helper.rb +17 -0
  8. data/app/views/uploads/_swf_javascript.html.erb +63 -0
  9. data/app/views/uploads/_swf_upload.html.erb +32 -0
  10. data/config/uploader_routes.rb +3 -0
  11. data/db/migrate/20090517040220_create_uploads.rb +38 -0
  12. data/lib/active_record/acts/uploader_upload.rb +235 -0
  13. data/lib/uploader/exceptions.rb +5 -0
  14. data/lib/uploader/initialize_routes.rb +8 -0
  15. data/lib/uploader/middleware/flash_session_cookie_middleware.rb +18 -0
  16. data/lib/uploader/mime_type_groups.rb +18 -0
  17. data/lib/uploader/tasks.rb +36 -0
  18. data/lib/uploader.rb +24 -0
  19. data/locales/ar.yml +17 -0
  20. data/locales/bg.yml +17 -0
  21. data/locales/ca.yml +17 -0
  22. data/locales/cs.yml +17 -0
  23. data/locales/da.yml +17 -0
  24. data/locales/de.yml +17 -0
  25. data/locales/el.yml +17 -0
  26. data/locales/en.yml +16 -0
  27. data/locales/es.yml +17 -0
  28. data/locales/fr.yml +17 -0
  29. data/locales/it.yml +17 -0
  30. data/locales/iw.yml +17 -0
  31. data/locales/ja.yml +17 -0
  32. data/locales/ko.yml +17 -0
  33. data/locales/lt.yml +17 -0
  34. data/locales/lv.yml +17 -0
  35. data/locales/nl.yml +17 -0
  36. data/locales/no.yml +18 -0
  37. data/locales/pl.yml +17 -0
  38. data/locales/pt.yml +17 -0
  39. data/locales/ro.yml +17 -0
  40. data/locales/ru.yml +17 -0
  41. data/locales/sk.yml +17 -0
  42. data/locales/sl.yml +17 -0
  43. data/locales/sr.yml +17 -0
  44. data/locales/sv.yml +17 -0
  45. data/locales/tl.yml +17 -0
  46. data/locales/uk.yml +17 -0
  47. data/locales/vi.yml +17 -0
  48. data/locales/zh-CN.yml +17 -0
  49. data/locales/zh-TW.yml +17 -0
  50. data/locales/zh.yml +17 -0
  51. data/pkg/uploader-0.1.0.gem +0 -0
  52. data/pkg/uploader-0.1.1.gem +0 -0
  53. data/pkg/uploader-0.1.2.gem +0 -0
  54. data/public/images/SWFUploadButton.png +0 -0
  55. data/public/images/file_icons/excel.gif +0 -0
  56. data/public/images/file_icons/file.gif +0 -0
  57. data/public/images/file_icons/mp3.gif +0 -0
  58. data/public/images/file_icons/pdf.gif +0 -0
  59. data/public/images/file_icons/text.gif +0 -0
  60. data/public/images/file_icons/word.gif +0 -0
  61. data/public/javascripts/swfupload/fileprogress.js +151 -0
  62. data/public/javascripts/swfupload/handlers.js +206 -0
  63. data/public/javascripts/swfupload/swfupload.cookies.js +53 -0
  64. data/public/javascripts/swfupload/swfupload.js +945 -0
  65. data/public/javascripts/swfupload/swfupload.queue.js +77 -0
  66. data/public/javascripts/swfupload/swfupload.swfobject.js +110 -0
  67. data/public/stylesheets/swfupload.css +26 -0
  68. data/public/swf/swfupload.swf +0 -0
  69. data/rails/init.rb +10 -0
  70. data/tasks/rails.rake +2 -0
  71. data/test/test_helper.rb +3 -0
  72. data/test/unit/upload_test.rb +5 -0
  73. data/uninstall.rb +0 -0
  74. data/uploader.gemspec +127 -0
  75. metadata +128 -0
@@ -0,0 +1,77 @@
1
+ /*
2
+ Queue Plug-in
3
+
4
+ Features:
5
+ *Adds a cancelQueue() method for cancelling the entire queue.
6
+ *All queued files are uploaded when startUpload() is called.
7
+ *If false is returned from uploadComplete then the queue upload is stopped.
8
+ If false is not returned (strict comparison) then the queue upload is continued.
9
+ *Adds a QueueComplete event that is fired when all the queued files have finished uploading.
10
+ Set the event handler with the queue_complete_handler setting.
11
+
12
+ */
13
+
14
+ var SWFUpload;
15
+ if (typeof(SWFUpload) === "function") {
16
+ SWFUpload.queue = {};
17
+
18
+ SWFUpload.prototype.initSettings = (function (oldInitSettings) {
19
+ return function () {
20
+ if (typeof(oldInitSettings) === "function") {
21
+ oldInitSettings.call(this);
22
+ }
23
+
24
+ this.customSettings.queue_cancelled_flag = false;
25
+ this.customSettings.queue_upload_count = 0;
26
+
27
+ this.settings.user_upload_complete_handler = this.settings.upload_complete_handler;
28
+ this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
29
+
30
+ this.settings.queue_complete_handler = this.settings.queue_complete_handler || null;
31
+ };
32
+ })(SWFUpload.prototype.initSettings);
33
+
34
+ SWFUpload.prototype.startUpload = function (fileID) {
35
+ this.customSettings.queue_cancelled_flag = false;
36
+ this.callFlash("StartUpload", false, [fileID]);
37
+ };
38
+
39
+ SWFUpload.prototype.cancelQueue = function () {
40
+ this.customSettings.queue_cancelled_flag = true;
41
+ this.stopUpload();
42
+
43
+ var stats = this.getStats();
44
+ while (stats.files_queued > 0) {
45
+ this.cancelUpload();
46
+ stats = this.getStats();
47
+ }
48
+ };
49
+
50
+ SWFUpload.queue.uploadCompleteHandler = function (file) {
51
+ var user_upload_complete_handler = this.settings.user_upload_complete_handler;
52
+ var continueUpload;
53
+
54
+ if (file.file_status === SWFUpload.FILE_STATUS.COMPLETE) {
55
+ this.customSettings.queue_upload_count++;
56
+ }
57
+
58
+ if (typeof(user_upload_complete_handler) === "function") {
59
+ continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
60
+ } else {
61
+ continueUpload = true;
62
+ }
63
+
64
+ if (continueUpload) {
65
+ var stats = this.getStats();
66
+ if (stats.files_queued > 0 && this.customSettings.queue_cancelled_flag === false) {
67
+ this.startUpload();
68
+ } else if (this.customSettings.queue_cancelled_flag === false) {
69
+ this.queueEvent("queue_complete_handler", [this.customSettings.queue_upload_count]);
70
+ this.customSettings.queue_upload_count = 0;
71
+ } else {
72
+ this.customSettings.queue_cancelled_flag = false;
73
+ this.customSettings.queue_upload_count = 0;
74
+ }
75
+ }
76
+ };
77
+ }
@@ -0,0 +1,110 @@
1
+ /*
2
+ SWFUpload.SWFObject Plugin
3
+
4
+ Summary:
5
+ This plugin uses SWFObject to embed SWFUpload dynamically in the page. SWFObject provides accurate Flash Player detection and DOM Ready loading.
6
+ This plugin replaces the Graceful Degradation plugin.
7
+
8
+ Features:
9
+ * swfupload_load_failed_hander event
10
+ * swfupload_pre_load_handler event
11
+ * minimum_flash_version setting (default: "9.0.28")
12
+ * SWFUpload.onload event for early loading
13
+
14
+ Usage:
15
+ Provide handlers and settings as needed. When using the SWFUpload.SWFObject plugin you should initialize SWFUploading
16
+ in SWFUpload.onload rather than in window.onload. When initialized this way SWFUpload can load earlier preventing the UI flicker
17
+ that was seen using the Graceful Degradation plugin.
18
+
19
+ <script type="text/javascript">
20
+ var swfu;
21
+ SWFUpload.onload = function () {
22
+ swfu = new SWFUpload({
23
+ minimum_flash_version: "9.0.28",
24
+ swfupload_pre_load_handler: swfuploadPreLoad,
25
+ swfupload_load_failed_handler: swfuploadLoadFailed
26
+ });
27
+ };
28
+ </script>
29
+
30
+ Notes:
31
+ You must provide set minimum_flash_version setting to "8" if you are using SWFUpload for Flash Player 8.
32
+ The swfuploadLoadFailed event is only fired if the minimum version of Flash Player is not met. Other issues such as missing SWF files, browser bugs
33
+ or corrupt Flash Player installations will not trigger this event.
34
+ The swfuploadPreLoad event is fired as soon as the minimum version of Flash Player is found. It does not wait for SWFUpload to load and can
35
+ be used to prepare the SWFUploadUI and hide alternate content.
36
+ swfobject's onDomReady event is cross-browser safe but will default to the window.onload event when DOMReady is not supported by the browser.
37
+ Early DOM Loading is supported in major modern browsers but cannot be guaranteed for every browser ever made.
38
+ */
39
+
40
+
41
+ /* SWFObject v2.0 rc4 <http://code.google.com/p/swfobject/>
42
+ Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
43
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
44
+ */
45
+ var swfobject=function(){var X="undefined",P="object",a="visibility:visible",e="visibility:hidden",B="Shockwave Flash",h="ShockwaveFlash.ShockwaveFlash",V="application/x-shockwave-flash",K="SWFObjectExprInst",G=window,g=document,N=navigator,f=[],H=[],Q=null,L=null,S=false,C=false;var Y=function(){var l=typeof g.getElementById!=X&&typeof g.getElementsByTagName!=X&&typeof g.createElement!=X&&typeof g.appendChild!=X&&typeof g.replaceChild!=X&&typeof g.removeChild!=X&&typeof g.cloneNode!=X,t=[0,0,0],n=null;if(typeof N.plugins!=X&&typeof N.plugins[B]==P){n=N.plugins[B].description;if(n){n=n.replace(/^.*\s+(\S+\s+\S+$)/,"$1");t[0]=parseInt(n.replace(/^(.*)\..*$/,"$1"),10);t[1]=parseInt(n.replace(/^.*\.(.*)\s.*$/,"$1"),10);t[2]=/r/.test(n)?parseInt(n.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof G.ActiveXObject!=X){var o=null,s=false;try{o=new ActiveXObject(h+".7")}catch(k){try{o=new ActiveXObject(h+".6");t=[6,0,21];o.AllowScriptAccess="always"}catch(k){if(t[0]==6){s=true}}if(!s){try{o=new ActiveXObject(h)}catch(k){}}}if(!s&&o){try{n=o.GetVariable("$version");if(n){n=n.split(" ")[1].split(",");t=[parseInt(n[0],10),parseInt(n[1],10),parseInt(n[2],10)]}}catch(k){}}}}var v=N.userAgent.toLowerCase(),j=N.platform.toLowerCase(),r=/webkit/.test(v)?parseFloat(v.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,i=false,q=j?/win/.test(j):/win/.test(v),m=j?/mac/.test(j):/mac/.test(v);/*@cc_on i=true;@if(@_win32)q=true;@elif(@_mac)m=true;@end@*/return{w3cdom:l,pv:t,webkit:r,ie:i,win:q,mac:m}}();var d=function(){if(!Y.w3cdom){return }J(I);if(Y.ie&&Y.win){try{g.write("<script id=__ie_ondomload defer=true src=//:><\/script>");var i=b("__ie_ondomload");if(i){i.onreadystatechange=function(){if(this.readyState=="complete"){this.parentNode.removeChild(this);U()}}}}catch(j){}}if(Y.webkit&&typeof g.readyState!=X){Q=setInterval(function(){if(/loaded|complete/.test(g.readyState)){U()}},10)}if(typeof g.addEventListener!=X){g.addEventListener("DOMContentLoaded",U,null)}M(U)}();function U(){if(S){return }if(Y.ie&&Y.win){var m=W("span");try{var l=g.getElementsByTagName("body")[0].appendChild(m);l.parentNode.removeChild(l)}catch(n){return }}S=true;if(Q){clearInterval(Q);Q=null}var j=f.length;for(var k=0;k<j;k++){f[k]()}}function J(i){if(S){i()}else{f[f.length]=i}}function M(j){if(typeof G.addEventListener!=X){G.addEventListener("load",j,false)}else{if(typeof g.addEventListener!=X){g.addEventListener("load",j,false)}else{if(typeof G.attachEvent!=X){G.attachEvent("onload",j)}else{if(typeof G.onload=="function"){var i=G.onload;G.onload=function(){i();j()}}else{G.onload=j}}}}}function I(){var l=H.length;for(var j=0;j<l;j++){var m=H[j].id;if(Y.pv[0]>0){var k=b(m);if(k){H[j].width=k.getAttribute("width")?k.getAttribute("width"):"0";H[j].height=k.getAttribute("height")?k.getAttribute("height"):"0";if(O(H[j].swfVersion)){if(Y.webkit&&Y.webkit<312){T(k)}}else{if(H[j].expressInstall&&!C&&O("6.0.65")&&(Y.win||Y.mac)){D(H[j])}else{c(k)}}}}A("#"+m,a)}}function T(m){var k=m.getElementsByTagName(P)[0];if(k){var p=W("embed"),r=k.attributes;if(r){var o=r.length;for(var n=0;n<o;n++){if(r[n].nodeName.toLowerCase()=="data"){p.setAttribute("src",r[n].nodeValue)}else{p.setAttribute(r[n].nodeName,r[n].nodeValue)}}}var q=k.childNodes;if(q){var s=q.length;for(var l=0;l<s;l++){if(q[l].nodeType==1&&q[l].nodeName.toLowerCase()=="param"){p.setAttribute(q[l].getAttribute("name"),q[l].getAttribute("value"))}}}m.parentNode.replaceChild(p,m)}}function F(i){if(Y.ie&&Y.win&&O("8.0.0")){G.attachEvent("onunload",function(){var k=b(i);for(var j in k){if(typeof k[j]=="function"){k[j]=function(){}}}k.parentNode.removeChild(k)})}}function D(j){C=true;var o=b(j.id);if(o){if(j.altContentId){var l=b(j.altContentId);if(l){L=l}}else{L=Z(o)}if(!(/%$/.test(j.width))&&parseInt(j.width,10)<310){j.width="310"}if(!(/%$/.test(j.height))&&parseInt(j.height,10)<137){j.height="137"}g.title=g.title.slice(0,47)+" - Flash Player Installation";var n=Y.ie&&Y.win?"ActiveX":"PlugIn",k=g.title,m="MMredirectURL="+G.location+"&MMplayerType="+n+"&MMdoctitle="+k,p=j.id;if(Y.ie&&Y.win&&o.readyState!=4){var i=W("div");p+="SWFObjectNew";i.setAttribute("id",p);o.parentNode.insertBefore(i,o);o.style.display="none";G.attachEvent("onload",function(){o.parentNode.removeChild(o)})}R({data:j.expressInstall,id:K,width:j.width,height:j.height},{flashvars:m},p)}}function c(j){if(Y.ie&&Y.win&&j.readyState!=4){var i=W("div");j.parentNode.insertBefore(i,j);i.parentNode.replaceChild(Z(j),i);j.style.display="none";G.attachEvent("onload",function(){j.parentNode.removeChild(j)})}else{j.parentNode.replaceChild(Z(j),j)}}function Z(n){var m=W("div");if(Y.win&&Y.ie){m.innerHTML=n.innerHTML}else{var k=n.getElementsByTagName(P)[0];if(k){var o=k.childNodes;if(o){var j=o.length;for(var l=0;l<j;l++){if(!(o[l].nodeType==1&&o[l].nodeName.toLowerCase()=="param")&&!(o[l].nodeType==8)){m.appendChild(o[l].cloneNode(true))}}}}}return m}function R(AE,AC,q){var p,t=b(q);if(typeof AE.id==X){AE.id=q}if(Y.ie&&Y.win){var AD="";for(var z in AE){if(AE[z]!=Object.prototype[z]){if(z=="data"){AC.movie=AE[z]}else{if(z.toLowerCase()=="styleclass"){AD+=' class="'+AE[z]+'"'}else{if(z!="classid"){AD+=" "+z+'="'+AE[z]+'"'}}}}}var AB="";for(var y in AC){if(AC[y]!=Object.prototype[y]){AB+='<param name="'+y+'" value="'+AC[y]+'" />'}}t.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AD+">"+AB+"</object>";F(AE.id);p=b(AE.id)}else{if(Y.webkit&&Y.webkit<312){var AA=W("embed");AA.setAttribute("type",V);for(var x in AE){if(AE[x]!=Object.prototype[x]){if(x=="data"){AA.setAttribute("src",AE[x])}else{if(x.toLowerCase()=="styleclass"){AA.setAttribute("class",AE[x])}else{if(x!="classid"){AA.setAttribute(x,AE[x])}}}}}for(var w in AC){if(AC[w]!=Object.prototype[w]){if(w!="movie"){AA.setAttribute(w,AC[w])}}}t.parentNode.replaceChild(AA,t);p=AA}else{var s=W(P);s.setAttribute("type",V);for(var v in AE){if(AE[v]!=Object.prototype[v]){if(v.toLowerCase()=="styleclass"){s.setAttribute("class",AE[v])}else{if(v!="classid"){s.setAttribute(v,AE[v])}}}}for(var u in AC){if(AC[u]!=Object.prototype[u]&&u!="movie"){E(s,u,AC[u])}}t.parentNode.replaceChild(s,t);p=s}}return p}function E(k,i,j){var l=W("param");l.setAttribute("name",i);l.setAttribute("value",j);k.appendChild(l)}function b(i){return g.getElementById(i)}function W(i){return g.createElement(i)}function O(k){var j=Y.pv,i=k.split(".");i[0]=parseInt(i[0],10);i[1]=parseInt(i[1],10);i[2]=parseInt(i[2],10);return(j[0]>i[0]||(j[0]==i[0]&&j[1]>i[1])||(j[0]==i[0]&&j[1]==i[1]&&j[2]>=i[2]))?true:false}function A(m,j){if(Y.ie&&Y.mac){return }var l=g.getElementsByTagName("head")[0],k=W("style");k.setAttribute("type","text/css");k.setAttribute("media","screen");if(!(Y.ie&&Y.win)&&typeof g.createTextNode!=X){k.appendChild(g.createTextNode(m+" {"+j+"}"))}l.appendChild(k);if(Y.ie&&Y.win&&typeof g.styleSheets!=X&&g.styleSheets.length>0){var i=g.styleSheets[g.styleSheets.length-1];if(typeof i.addRule==P){i.addRule(m,j)}}}return{registerObject:function(l,i,k){if(!Y.w3cdom||!l||!i){return }var j={};j.id=l;j.swfVersion=i;j.expressInstall=k?k:false;H[H.length]=j;A("#"+l,e)},getObjectById:function(l){var i=null;if(Y.w3cdom&&S){var j=b(l);if(j){var k=j.getElementsByTagName(P)[0];if(!k||(k&&typeof j.SetVariable!=X)){i=j}else{if(typeof k.SetVariable!=X){i=k}}}}return i},embedSWF:function(n,u,r,t,j,m,k,p,s){if(!Y.w3cdom||!n||!u||!r||!t||!j){return }r+="";t+="";if(O(j)){A("#"+u,e);var q=(typeof s==P)?s:{};q.data=n;q.width=r;q.height=t;var o=(typeof p==P)?p:{};if(typeof k==P){for(var l in k){if(k[l]!=Object.prototype[l]){if(typeof o.flashvars!=X){o.flashvars+="&"+l+"="+k[l]}else{o.flashvars=l+"="+k[l]}}}}J(function(){R(q,o,u);A("#"+u,a)})}else{if(m&&!C&&O("6.0.65")&&(Y.win||Y.mac)){A("#"+u,e);J(function(){var i={};i.id=i.altContentId=u;i.width=r;i.height=t;i.expressInstall=m;D(i);A("#"+u,a)})}}},getFlashPlayerVersion:function(){return{major:Y.pv[0],minor:Y.pv[1],release:Y.pv[2]}},hasFlashPlayerVersion:O,createSWF:function(k,j,i){if(Y.w3cdom&&S){return R(k,j,i)}else{return undefined}},createCSS:function(j,i){if(Y.w3cdom){A(j,i)}},addDomLoadEvent:J,addLoadEvent:M,getQueryParamValue:function(m){var l=g.location.search||g.location.hash;if(m==null){return l}if(l){var k=l.substring(1).split("&");for(var j=0;j<k.length;j++){if(k[j].substring(0,k[j].indexOf("="))==m){return k[j].substring((k[j].indexOf("=")+1))}}}return""},expressInstallCallback:function(){if(C&&L){var i=b(K);if(i){i.parentNode.replaceChild(L,i);L=null;C=false}}}}}();
46
+
47
+
48
+ var SWFUpload;
49
+ if (typeof(SWFUpload) === "function") {
50
+ SWFUpload.onload = function () {};
51
+
52
+ swfobject.addDomLoadEvent(function () {
53
+ if (typeof(SWFUpload.onload) === "function") {
54
+ SWFUpload.onload.call(window);
55
+ }
56
+ });
57
+
58
+ SWFUpload.prototype.initSettings = (function (oldInitSettings) {
59
+ return function () {
60
+ if (typeof(oldInitSettings) === "function") {
61
+ oldInitSettings.call(this);
62
+ }
63
+
64
+ this.ensureDefault = function (settingName, defaultValue) {
65
+ this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
66
+ };
67
+
68
+ this.ensureDefault("minimum_flash_version", "9.0.28");
69
+ this.ensureDefault("swfupload_pre_load_handler", null);
70
+ this.ensureDefault("swfupload_load_failed_handler", null);
71
+
72
+ delete this.ensureDefault;
73
+
74
+ };
75
+ })(SWFUpload.prototype.initSettings);
76
+
77
+
78
+ SWFUpload.prototype.loadFlash = function (oldLoadFlash) {
79
+ return function () {
80
+ var hasFlash = swfobject.hasFlashPlayerVersion(this.settings.minimum_flash_version);
81
+
82
+ if (hasFlash) {
83
+ this.queueEvent("swfupload_pre_load_handler");
84
+ if (typeof(oldLoadFlash) === "function") {
85
+ oldLoadFlash.call(this);
86
+ }
87
+ } else {
88
+ this.queueEvent("swfupload_load_failed_handler");
89
+ }
90
+ };
91
+
92
+ }(SWFUpload.prototype.loadFlash);
93
+
94
+ SWFUpload.prototype.displayDebugInfo = function (oldDisplayDebugInfo) {
95
+ return function () {
96
+ if (typeof(oldDisplayDebugInfo) === "function") {
97
+ oldDisplayDebugInfo.call(this);
98
+ }
99
+
100
+ this.debug(
101
+ [
102
+ "SWFUpload.SWFObject Plugin settings:", "\n",
103
+ "\t", "minimum_flash_version: ", this.settings.minimum_flash_version, "\n",
104
+ "\t", "swfupload_pre_load_handler assigned: ", (typeof(this.settings.swfupload_pre_load_handler) === "function").toString(), "\n",
105
+ "\t", "swfupload_load_failed_handler assigned: ", (typeof(this.settings.swfupload_load_failed_handler) === "function").toString(), "\n",
106
+ ].join("")
107
+ );
108
+ };
109
+ }(SWFUpload.prototype.displayDebugInfo);
110
+ }
@@ -0,0 +1,26 @@
1
+ div.uploadStatus{margin:5px;}
2
+ #swf_fs_upload_progress{font-size:1.3em;}
3
+ #deliver-uploads #upload-list{font-size:1.3em;}
4
+ #deliver-uploads #upload-list table {border-collapse:collapse;}
5
+ #deliver-uploads #upload-list td{padding:3px 6px;}
6
+ #deliver-uploads #upload-controls{width:365px;}
7
+ #deliver-uploads #swfupload_container .legend{color:#231F20;font-size:1.1em;font-weight:bold;}
8
+
9
+ #swfupload_container .progressWrapper{width:357px;overflow:hidden;}
10
+ #swfupload_container .progressContainer{margin:5px;padding:4px;border:solid 1px #E8E8E8;background-color:#F7F7F7;overflow:hidden;}
11
+ #swfupload_container .message{margin:1em 0;padding:10px 20px;border:solid 1px #FFDD99;background-color:#FFFFCC;overflow:hidden;}
12
+ #swfupload_container .red{border:solid 1px #B50000;background-color:#FFEBEB;}
13
+ #swfupload_container .green{border:solid 1px #DDF0DD;background-color:#EBFFEB;}
14
+ #swfupload_container .blue{border:solid 1px #CEE2F2;background-color:#F0F5FF;}
15
+ #swfupload_container .progressName{font-size:8pt;font-weight:700;color:#555;width:323px;height:14px;text-align:left;white-space:nowrap;overflow:hidden;}
16
+ #swfupload_container .progressBarInProgress,
17
+ #swfupload_container .progressBarComplete,
18
+ #swfupload_container .progressBarError{font-size:0;width:0%;height:2px;background-color:blue;margin-top:2px;}
19
+ #swfupload_container .progressBarComplete{width:100%;background-color:green;visibility:hidden;}
20
+ #swfupload_container .progressBarError{width:100%;background-color:red;visibility:hidden;}
21
+ #swfupload_container .progressBarStatus{margin-top:2px;width:337px;font-size:7pt;font-family:Arial;text-align:left;white-space:nowrap;}
22
+ #swfupload_container a.progressCancel{font-size:0;display:block;height:14px;width:14px;background-image:url(../images/cancelbutton.gif);background-repeat:no-repeat;background-position:-14px 0px;float:right;}
23
+ #swfupload_container a.progressCancel:hover{background-position:0px 0px;}
24
+
25
+ .swf-error-msg{background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px;}
26
+ #swf_cancel_button{margin-left: 2px; height: 22px; font-size: 8pt;}
Binary file
data/rails/init.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'uploader'
2
+ require 'uploader/initialize_routes'
3
+
4
+ ActiveRecord::Base.class_eval { include ActiveRecord::Acts::UploaderUpload }
5
+ ActionController::Base.send :helper, UploaderHelper
6
+ I18n.load_path += Dir[ File.join(File.dirname(__FILE__), '..', 'locales', '*.{rb,yml}') ]
7
+
8
+ config.after_initialize do
9
+ ActionController::Dispatcher.middleware.use Uploader::FlashSessionCookieMiddleware, ActionController::Base.session_options[:key]
10
+ end
data/tasks/rails.rake ADDED
@@ -0,0 +1,2 @@
1
+ require File.join(File.dirname(__FILE__), '/../lib/uploader')
2
+ require File.join(File.dirname(__FILE__), '/../lib/uploader/tasks')
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class UploaderTest < ActiveSupport::TestCase
4
+
5
+ end
data/uninstall.rb ADDED
File without changes
data/uploader.gemspec ADDED
@@ -0,0 +1,127 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{uploader}
5
+ s.version = "0.1.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Justin Ball", "David South"]
9
+ s.date = %q{2009-05-22}
10
+ s.description = %q{Uploader gem that makes it simple add multiple file uploads to your Rails project using SWFUpload and Paperclip}
11
+ s.email = %q{justinball@gmail.com}
12
+ s.extra_rdoc_files = [
13
+ "README.rdoc"
14
+ ]
15
+ s.files = [
16
+ "MIT-LICENSE",
17
+ "README.rdoc",
18
+ "Rakefile",
19
+ "TODO",
20
+ "VERSION",
21
+ "app/controllers/uploader/uploads_controller.rb",
22
+ "app/helpers/uploader_helper.rb",
23
+ "app/views/uploads/_swf_javascript.html.erb",
24
+ "app/views/uploads/_swf_javascript.html.erb",
25
+ "app/views/uploads/_swf_upload.html.erb",
26
+ "app/views/uploads/_swf_upload.html.erb",
27
+ "config/uploader_routes.rb",
28
+ "db/migrate/20090517040220_create_uploads.rb",
29
+ "db/migrate/20090517040220_create_uploads.rb",
30
+ "lib/active_record/acts/uploader_upload.rb",
31
+ "lib/uploader.rb",
32
+ "lib/uploader/exceptions.rb",
33
+ "lib/uploader/exceptions.rb",
34
+ "lib/uploader/initialize_routes.rb",
35
+ "lib/uploader/initialize_routes.rb",
36
+ "lib/uploader/middleware/flash_session_cookie_middleware.rb",
37
+ "lib/uploader/middleware/flash_session_cookie_middleware.rb",
38
+ "lib/uploader/mime_type_groups.rb",
39
+ "lib/uploader/mime_type_groups.rb",
40
+ "lib/uploader/tasks.rb",
41
+ "lib/uploader/tasks.rb",
42
+ "locales/ar.yml",
43
+ "locales/bg.yml",
44
+ "locales/ca.yml",
45
+ "locales/cs.yml",
46
+ "locales/da.yml",
47
+ "locales/de.yml",
48
+ "locales/el.yml",
49
+ "locales/en.yml",
50
+ "locales/es.yml",
51
+ "locales/fr.yml",
52
+ "locales/it.yml",
53
+ "locales/iw.yml",
54
+ "locales/ja.yml",
55
+ "locales/ko.yml",
56
+ "locales/lt.yml",
57
+ "locales/lv.yml",
58
+ "locales/nl.yml",
59
+ "locales/no.yml",
60
+ "locales/pl.yml",
61
+ "locales/pt.yml",
62
+ "locales/ro.yml",
63
+ "locales/ru.yml",
64
+ "locales/sk.yml",
65
+ "locales/sl.yml",
66
+ "locales/sr.yml",
67
+ "locales/sv.yml",
68
+ "locales/tl.yml",
69
+ "locales/uk.yml",
70
+ "locales/vi.yml",
71
+ "locales/zh-CN.yml",
72
+ "locales/zh-TW.yml",
73
+ "locales/zh.yml",
74
+ "pkg/uploader-0.1.0.gem",
75
+ "pkg/uploader-0.1.1.gem",
76
+ "pkg/uploader-0.1.2.gem",
77
+ "public/images/SWFUploadButton.png",
78
+ "public/images/file_icons/excel.gif",
79
+ "public/images/file_icons/excel.gif",
80
+ "public/images/file_icons/file.gif",
81
+ "public/images/file_icons/file.gif",
82
+ "public/images/file_icons/mp3.gif",
83
+ "public/images/file_icons/mp3.gif",
84
+ "public/images/file_icons/pdf.gif",
85
+ "public/images/file_icons/pdf.gif",
86
+ "public/images/file_icons/text.gif",
87
+ "public/images/file_icons/text.gif",
88
+ "public/images/file_icons/word.gif",
89
+ "public/images/file_icons/word.gif",
90
+ "public/javascripts/swfupload/fileprogress.js",
91
+ "public/javascripts/swfupload/handlers.js",
92
+ "public/javascripts/swfupload/swfupload.cookies.js",
93
+ "public/javascripts/swfupload/swfupload.js",
94
+ "public/javascripts/swfupload/swfupload.queue.js",
95
+ "public/javascripts/swfupload/swfupload.swfobject.js",
96
+ "public/stylesheets/swfupload.css",
97
+ "public/swf/swfupload.swf",
98
+ "rails/init.rb",
99
+ "tasks/rails.rake",
100
+ "tasks/rails.rake",
101
+ "test/test_helper.rb",
102
+ "test/unit/upload_test.rb",
103
+ "uninstall.rb",
104
+ "uploader.gemspec"
105
+ ]
106
+ s.has_rdoc = true
107
+ s.homepage = %q{http://github.com/jbasdf/uploader}
108
+ s.rdoc_options = ["--charset=UTF-8"]
109
+ s.require_paths = ["lib"]
110
+ s.rubyforge_project = %q{uploader}
111
+ s.rubygems_version = %q{1.3.1}
112
+ s.summary = %q{SWFUpload + Paperclip wrapped in an engine with love.}
113
+ s.test_files = [
114
+ "test/test_helper.rb",
115
+ "test/unit/upload_test.rb"
116
+ ]
117
+
118
+ if s.respond_to? :specification_version then
119
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
120
+ s.specification_version = 2
121
+
122
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
123
+ else
124
+ end
125
+ else
126
+ end
127
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: uploader
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Justin Ball
8
+ - David South
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-05-22 00:00:00 -06:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Uploader gem that makes it simple add multiple file uploads to your Rails project using SWFUpload and Paperclip
18
+ email: justinball@gmail.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README.rdoc
25
+ files:
26
+ - MIT-LICENSE
27
+ - README.rdoc
28
+ - Rakefile
29
+ - TODO
30
+ - VERSION
31
+ - app/controllers/uploader/uploads_controller.rb
32
+ - app/helpers/uploader_helper.rb
33
+ - app/views/uploads/_swf_javascript.html.erb
34
+ - app/views/uploads/_swf_upload.html.erb
35
+ - config/uploader_routes.rb
36
+ - db/migrate/20090517040220_create_uploads.rb
37
+ - lib/active_record/acts/uploader_upload.rb
38
+ - lib/uploader.rb
39
+ - lib/uploader/exceptions.rb
40
+ - lib/uploader/initialize_routes.rb
41
+ - lib/uploader/middleware/flash_session_cookie_middleware.rb
42
+ - lib/uploader/mime_type_groups.rb
43
+ - lib/uploader/tasks.rb
44
+ - locales/ar.yml
45
+ - locales/bg.yml
46
+ - locales/ca.yml
47
+ - locales/cs.yml
48
+ - locales/da.yml
49
+ - locales/de.yml
50
+ - locales/el.yml
51
+ - locales/en.yml
52
+ - locales/es.yml
53
+ - locales/fr.yml
54
+ - locales/it.yml
55
+ - locales/iw.yml
56
+ - locales/ja.yml
57
+ - locales/ko.yml
58
+ - locales/lt.yml
59
+ - locales/lv.yml
60
+ - locales/nl.yml
61
+ - locales/no.yml
62
+ - locales/pl.yml
63
+ - locales/pt.yml
64
+ - locales/ro.yml
65
+ - locales/ru.yml
66
+ - locales/sk.yml
67
+ - locales/sl.yml
68
+ - locales/sr.yml
69
+ - locales/sv.yml
70
+ - locales/tl.yml
71
+ - locales/uk.yml
72
+ - locales/vi.yml
73
+ - locales/zh-CN.yml
74
+ - locales/zh-TW.yml
75
+ - locales/zh.yml
76
+ - pkg/uploader-0.1.0.gem
77
+ - pkg/uploader-0.1.1.gem
78
+ - pkg/uploader-0.1.2.gem
79
+ - public/images/SWFUploadButton.png
80
+ - public/images/file_icons/excel.gif
81
+ - public/images/file_icons/file.gif
82
+ - public/images/file_icons/mp3.gif
83
+ - public/images/file_icons/pdf.gif
84
+ - public/images/file_icons/text.gif
85
+ - public/images/file_icons/word.gif
86
+ - public/javascripts/swfupload/fileprogress.js
87
+ - public/javascripts/swfupload/handlers.js
88
+ - public/javascripts/swfupload/swfupload.cookies.js
89
+ - public/javascripts/swfupload/swfupload.js
90
+ - public/javascripts/swfupload/swfupload.queue.js
91
+ - public/javascripts/swfupload/swfupload.swfobject.js
92
+ - public/stylesheets/swfupload.css
93
+ - public/swf/swfupload.swf
94
+ - rails/init.rb
95
+ - tasks/rails.rake
96
+ - test/test_helper.rb
97
+ - test/unit/upload_test.rb
98
+ - uninstall.rb
99
+ - uploader.gemspec
100
+ has_rdoc: true
101
+ homepage: http://github.com/jbasdf/uploader
102
+ post_install_message:
103
+ rdoc_options:
104
+ - --charset=UTF-8
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: "0"
112
+ version:
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: "0"
118
+ version:
119
+ requirements: []
120
+
121
+ rubyforge_project: uploader
122
+ rubygems_version: 1.3.1
123
+ signing_key:
124
+ specification_version: 2
125
+ summary: SWFUpload + Paperclip wrapped in an engine with love.
126
+ test_files:
127
+ - test/test_helper.rb
128
+ - test/unit/upload_test.rb