Skip to content

Instantly share code, notes, and snippets.

@digitalextremist
Last active December 16, 2015 10:59
Show Gist options
  • Save digitalextremist/5424323 to your computer and use it in GitHub Desktop.
Save digitalextremist/5424323 to your computer and use it in GitHub Desktop.
Test case for http_parser.rb under jRuby. Multipart POST requests will either fail or be corrupt.
require 'rubygems'
require "bundler/setup"
MU_BASE = File.expand_path( File.dirname( __FILE__ ) )
MU_UPLOADS = "/mu/rack-reel/uploads/"
require 'rack'
require 'reel'
require 'sinatra'
require "sinatra/multi_route"
require "sinatra/reloader"
require 'mongo'
require 'json'
use Rack::Reloader
set :show_exceptions, true
set :raise_errors, true
set :server, :reel
set :bind, "0.0.0.0"
set :port, "88"
get "/!sync" do
#de Include rack.hijack support
end
get '/', '/uploading' do; redirect '/testing.html' end
post "/uploading", "/" do
tmp_name = Time.now.to_i.to_s + "." + ( BSON::ObjectId.new.to_s ) + ".01E"
File.open( MU_UPLOADS + tmp_name + ".js", "w" ) do |f| f.write( JSON.pretty_generate( request.env ) ) end
if request.env.is_a?( Hash ) and request.env.has_key? "rack.input"
File.open( MU_UPLOADS + tmp_name, 'w') {|f| f.write( request.env['rack.input'].read ) }
_de "saved rack.input // " + tmp_name
end
puts "Show params //"
puts params
if params.has_key? "file"
File.open( MU_UPLOADS + params["file"][:filename], 'w') {|f| f.write( params["file"][:tempfile].read ) }
puts "saved file // " + "uploads/" + params["file"][:filename]
end
redirect "/" if !request.xhr?
end
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>test-reel; multipart parsing</title>
<style type="text/css">
body {
font-family: Helvetica, Verdana, Geneva, sans-serif;
background-color: #111;
font-size: 14px;
color: #eee;
padding: 25px;
}
b { color: #aaa; }
a { color: #f60; text-decoration: none; }
input[type='text'], textarea { padding: 3px; border: #444 solid 1px; background: #999; }
#form { position: absolute; top: 25px; right: 25px; }
#label { position: absolute; bottom: 25px; left: 25px; }
#label h3 { color: #444; }
input[type='submit'], input[type='button'] { font-weight: bold; color: #111; padding: 3px 15px; border: #f60 solid 1px; background: #f60; }
</style>
<script type="text/javascript" src="/testing.js"></script>
</head>
<body>
<div id="container">
<input type="button" id="pickfiles" href="javascript:;" value="Select Files" />
<input type="button" id="uploadfiles" href="javascript:;" value="Upload Files" />
<br /><br />
<div id="filelist"></div>
</div>
<div id="label"><h3>multipart & standard POST testing</h3></div>
<div id="form">
<form action="/" method="post">
<input type="text" name="textfield" value="ipsum lorem" /><br />
<textarea name="textarea">ipsum lorem</textarea><br />
<input type="submit" />
</form>
</div>
<br/><br/>
<FORM ACTION="/uploading" ENCTYPE="multipart/form-data" METHOD=POST>
<INPUT type="SUBMIT" value="Upload" /><INPUT TYPE=FILE NAME=file>
</FORM>
<script type="text/javascript">
// Custom example logic
function $(id) { return document.getElementById(id); }
var uploader = new plupload.Uploader({
runtimes : 'html5,flash',
browse_button : 'pickfiles',
container: 'container',
chunk_size: "128kb",
max_file_size: '1000mb',
multipart: true,
url: '/uploading',
flash_swf_url: '/uploader.swf',
});
uploader.bind('UploadProgress', function(up, file) {
$(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
});
$('uploadfiles').onclick = function() {
uploader.start();
return false;
};
uploader.init();
uploader.bind('FilesAdded', function(up, files) {
for (var i in files) {
$('filelist').innerHTML += '<div id="' + files[i].id + '">' + files[i].name + ' (' + plupload.formatSize(files[i].size) + ') <b></b></div>';
}
uploader.start();
});
ws = new WebSocket('ws://' + window.location.host + '/!sync');
ws.onmessage = function(e) { console.log( e.data ) }
</script>
</body>
</html>
/*1.5.6*/
(function() {
var f = 0,
l = [],
n = {}, j = {}, a = {
"<": "lt",
">": "gt",
"&": "amp",
'"': "quot",
"'": "#39"
}, m = /[<>&\"\']/g,
b, c = window.setTimeout,
d = {}, e;
function h() {
this.returnValue = false
}
function k() {
this.cancelBubble = true
}(function(o) {
var p = o.split(/,/),
q, s, r;
for (q = 0; q < p.length; q += 2) {
r = p[q + 1].split(/ /);
for (s = 0; s < r.length; s++) {
j[r[s]] = p[q]
}
}
})("application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mpga mpega mp2 mp3,audio/x-wav,wav,audio/mp4,m4a,image/bmp,bmp,image/gif,gif,image/jpeg,jpeg jpg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe");
var g = {
VERSION: "1.5.6",
STOPPED: 1,
STARTED: 2,
QUEUED: 1,
UPLOADING: 2,
FAILED: 4,
DONE: 5,
GENERIC_ERROR: -100,
HTTP_ERROR: -200,
IO_ERROR: -300,
SECURITY_ERROR: -400,
INIT_ERROR: -500,
FILE_SIZE_ERROR: -600,
FILE_EXTENSION_ERROR: -601,
IMAGE_FORMAT_ERROR: -700,
IMAGE_MEMORY_ERROR: -701,
IMAGE_DIMENSIONS_ERROR: -702,
mimeTypes: j,
ua: (function() {
var s = navigator,
r = s.userAgent,
t = s.vendor,
p, o, q;
p = /WebKit/.test(r);
q = p && t.indexOf("Apple") !== -1;
o = window.opera && window.opera.buildNumber;
return {
windows: navigator.platform.indexOf("Win") !== -1,
android: /Android/.test(r),
ie: !p && !o && (/MSIE/gi).test(r) && (/Explorer/gi).test(s.appName),
webkit: p,
gecko: !p && /Gecko/.test(r),
safari: q,
opera: !! o
}
}()),
typeOf: function(p) {
return ({}).toString.call(p).match(/\s([a-z|A-Z]+)/)[1].toLowerCase()
},
extend: function(o) {
g.each(arguments, function(p, q) {
if (q > 0) {
g.each(p, function(s, r) {
o[r] = s
})
}
});
return o
},
cleanName: function(o) {
var p, q;
q = [/[\300-\306]/g, "A", /[\340-\346]/g, "a", /\307/g, "C", /\347/g, "c", /[\310-\313]/g, "E", /[\350-\353]/g, "e", /[\314-\317]/g, "I", /[\354-\357]/g, "i", /\321/g, "N", /\361/g, "n", /[\322-\330]/g, "O", /[\362-\370]/g, "o", /[\331-\334]/g, "U", /[\371-\374]/g, "u"];
for (p = 0; p < q.length; p += 2) {
o = o.replace(q[p], q[p + 1])
}
o = o.replace(/\s+/g, "_");
o = o.replace(/[^a-z0-9_\-\.]+/gi, "");
return o
},
addRuntime: function(o, p) {
p.name = o;
l[o] = p;
l.push(p);
return p
},
guid: function() {
var o = new Date().getTime().toString(32),
p;
for (p = 0; p < 5; p++) {
o += Math.floor(Math.random() * 65535).toString(32)
}
return (g.guidPrefix || "p") + o + (f++).toString(32)
},
buildUrl: function(p, o) {
var q = "";
g.each(o, function(s, r) {
q += (q ? "&" : "") + encodeURIComponent(r) + "=" + encodeURIComponent(s)
});
if (q) {
p += (p.indexOf("?") > 0 ? "&" : "?") + q
}
return p
},
each: function(r, s) {
var q, p, o;
if (r) {
q = r.length;
if (q === b) {
for (p in r) {
if (r.hasOwnProperty(p)) {
if (s(r[p], p) === false) {
return
}
}
}
} else {
for (o = 0; o < q; o++) {
if (s(r[o], o) === false) {
return
}
}
}
}
},
formatSize: function(o) {
if (o === b || /\D/.test(o)) {
return g.translate("N/A")
}
if (o > 1073741824) {
return Math.round(o / 1073741824, 1) + " GB"
}
if (o > 1048576) {
return Math.round(o / 1048576, 1) + " MB"
}
if (o > 1024) {
return Math.round(o / 1024, 1) + " KB"
}
return o + " b"
},
getPos: function(p, t) {
var u = 0,
s = 0,
w, v = document,
q, r;
p = p;
t = t || v.body;
function o(C) {
var A, B, z = 0,
D = 0;
if (C) {
B = C.getBoundingClientRect();
A = v.compatMode === "CSS1Compat" ? v.documentElement : v.body;
z = B.left + A.scrollLeft;
D = B.top + A.scrollTop
}
return {
x: z,
y: D
}
}
if (p && p.getBoundingClientRect && g.ua.ie && (!v.documentMode || v.documentMode < 8)) {
q = o(p);
r = o(t);
return {
x: q.x - r.x,
y: q.y - r.y
}
}
w = p;
while (w && w != t && w.nodeType) {
u += w.offsetLeft || 0;
s += w.offsetTop || 0;
w = w.offsetParent
}
w = p.parentNode;
while (w && w != t && w.nodeType) {
u -= w.scrollLeft || 0;
s -= w.scrollTop || 0;
w = w.parentNode
}
return {
x: u,
y: s
}
},
getSize: function(o) {
return {
w: o.offsetWidth || o.clientWidth,
h: o.offsetHeight || o.clientHeight
}
},
parseSize: function(o) {
var p;
if (typeof(o) == "string") {
o = /^([0-9]+)([mgk]?)$/.exec(o.toLowerCase().replace(/[^0-9mkg]/g, ""));
p = o[2];
o = +o[1];
if (p == "g") {
o *= 1073741824
}
if (p == "m") {
o *= 1048576
}
if (p == "k") {
o *= 1024
}
}
return o
},
xmlEncode: function(o) {
return o ? ("" + o).replace(m, function(p) {
return a[p] ? "&" + a[p] + ";" : p
}) : o
},
toArray: function(q) {
var p, o = [];
for (p = 0; p < q.length; p++) {
o[p] = q[p]
}
return o
},
inArray: function(q, r) {
if (r) {
if (Array.prototype.indexOf) {
return Array.prototype.indexOf.call(r, q)
}
for (var o = 0, p = r.length; o < p; o++) {
if (r[o] === q) {
return o
}
}
}
return -1
},
addI18n: function(o) {
return g.extend(n, o)
},
translate: function(o) {
return n[o] || o
},
isEmptyObj: function(o) {
if (o === b) {
return true
}
for (var p in o) {
return false
}
return true
},
hasClass: function(q, p) {
var o;
if (q.className == "") {
return false
}
o = new RegExp("(^|\\s+)" + p + "(\\s+|$)");
return o.test(q.className)
},
addClass: function(p, o) {
if (!g.hasClass(p, o)) {
p.className = p.className == "" ? o : p.className.replace(/\s+$/, "") + " " + o
}
},
removeClass: function(q, p) {
var o = new RegExp("(^|\\s+)" + p + "(\\s+|$)");
q.className = q.className.replace(o, function(s, r, t) {
return r === " " && t === " " ? " " : ""
})
},
getStyle: function(p, o) {
if (p.currentStyle) {
return p.currentStyle[o]
} else {
if (window.getComputedStyle) {
return window.getComputedStyle(p, null)[o]
}
}
},
addEvent: function(t, o, u) {
var s, r, q, p;
p = arguments[3];
o = o.toLowerCase();
if (e === b) {
e = "Plupload_" + g.guid()
}
if (t.addEventListener) {
s = u;
t.addEventListener(o, s, false)
} else {
if (t.attachEvent) {
s = function() {
var v = window.event;
if (!v.target) {
v.target = v.srcElement
}
v.preventDefault = h;
v.stopPropagation = k;
u(v)
};
t.attachEvent("on" + o, s)
}
}
if (t[e] === b) {
t[e] = g.guid()
}
if (!d.hasOwnProperty(t[e])) {
d[t[e]] = {}
}
r = d[t[e]];
if (!r.hasOwnProperty(o)) {
r[o] = []
}
r[o].push({
func: s,
orig: u,
key: p
})
},
removeEvent: function(t, o) {
var r, u, q;
if (typeof(arguments[2]) == "function") {
u = arguments[2]
} else {
q = arguments[2]
}
o = o.toLowerCase();
if (t[e] && d[t[e]] && d[t[e]][o]) {
r = d[t[e]][o]
} else {
return
}
for (var p = r.length - 1; p >= 0; p--) {
if (r[p].key === q || r[p].orig === u) {
if (t.removeEventListener) {
t.removeEventListener(o, r[p].func, false)
} else {
if (t.detachEvent) {
t.detachEvent("on" + o, r[p].func)
}
}
r[p].orig = null;
r[p].func = null;
r.splice(p, 1);
if (u !== b) {
break
}
}
}
if (!r.length) {
delete d[t[e]][o]
}
if (g.isEmptyObj(d[t[e]])) {
delete d[t[e]];
try {
delete t[e]
} catch (s) {
t[e] = b
}
}
},
removeAllEvents: function(p) {
var o = arguments[1];
if (p[e] === b || !p[e]) {
return
}
g.each(d[p[e]], function(r, q) {
g.removeEvent(p, q, o)
})
}
};
g.Uploader = function(s) {
var p = {}, v, u = [],
r, q = false;
v = new g.QueueProgress();
s = g.extend({
chunk_size: 0,
multipart: true,
multi_selection: true,
file_data_name: "file",
filters: []
}, s);
function t() {
var x, y = 0,
w;
if (this.state == g.STARTED) {
for (w = 0; w < u.length; w++) {
if (!x && u[w].status == g.QUEUED) {
x = u[w];
x.status = g.UPLOADING;
if (this.trigger("BeforeUpload", x)) {
this.trigger("UploadFile", x)
}
} else {
y++
}
}
if (y == u.length) {
this.stop();
this.trigger("UploadComplete", u)
}
}
}
function o() {
var x, w;
v.reset();
for (x = 0; x < u.length; x++) {
w = u[x];
if (w.size !== b) {
v.size += w.size;
v.loaded += w.loaded
} else {
v.size = b
}
if (w.status == g.DONE) {
v.uploaded++
} else {
if (w.status == g.FAILED) {
v.failed++
} else {
v.queued++
}
}
}
if (v.size === b) {
v.percent = u.length > 0 ? Math.ceil(v.uploaded / u.length * 100) : 0
} else {
v.bytesPerSec = Math.ceil(v.loaded / ((+new Date() - r || 1) / 1000));
v.percent = v.size > 0 ? Math.ceil(v.loaded / v.size * 100) : 0
}
}
g.extend(this, {
state: g.STOPPED,
runtime: "",
features: {},
files: u,
settings: s,
total: v,
id: g.guid(),
init: function() {
var B = this,
C, y, x, A = 0,
z;
if (typeof(s.preinit) == "function") {
s.preinit(B)
} else {
g.each(s.preinit, function(E, D) {
B.bind(D, E)
})
}
s.page_url = s.page_url || document.location.pathname.replace(/\/[^\/]+$/g, "/");
if (!/^(\w+:\/\/|\/)/.test(s.url)) {
s.url = s.page_url + s.url
}
s.chunk_size = g.parseSize(s.chunk_size);
s.max_file_size = g.parseSize(s.max_file_size);
B.bind("FilesAdded", function(D, G) {
var F, E, I = 0,
J, H = s.filters;
if (H && H.length) {
J = [];
g.each(H, function(K) {
g.each(K.extensions.split(/,/), function(L) {
if (/^\s*\*\s*$/.test(L)) {
J.push("\\.*")
} else {
J.push("\\." + L.replace(new RegExp("[" + ("/^$.*+?|()[]{}\\".replace(/./g, "\\$&")) + "]", "g"), "\\$&"))
}
})
});
J = new RegExp(J.join("|") + "$", "i")
}
for (F = 0; F < G.length; F++) {
E = G[F];
E.loaded = 0;
E.percent = 0;
E.status = g.QUEUED;
if (J && !J.test(E.name)) {
D.trigger("Error", {
code: g.FILE_EXTENSION_ERROR,
message: g.translate("File extension error."),
file: E
});
continue
}
if (E.size !== b && E.size > s.max_file_size) {
D.trigger("Error", {
code: g.FILE_SIZE_ERROR,
message: g.translate("File size error."),
file: E
});
continue
}
u.push(E);
I++
}
if (I) {
c(function() {
B.trigger("QueueChanged");
B.refresh()
}, 1)
} else {
return false
}
});
if (s.unique_names) {
B.bind("UploadFile", function(D, E) {
var G = E.name.match(/\.([^.]+)$/),
F = "tmp";
if (G) {
F = G[1]
}
E.target_name = E.id + "." + F
})
}
B.bind("UploadProgress", function(D, E) {
E.percent = E.size > 0 ? Math.ceil(E.loaded / E.size * 100) : 100;
o()
});
B.bind("StateChanged", function(D) {
if (D.state == g.STARTED) {
r = (+new Date())
} else {
if (D.state == g.STOPPED) {
for (C = D.files.length - 1; C >= 0; C--) {
if (D.files[C].status == g.UPLOADING) {
D.files[C].status = g.QUEUED;
o()
}
}
}
}
});
B.bind("QueueChanged", o);
B.bind("Error", function(D, E) {
if (E.file) {
E.file.status = g.FAILED;
o();
if (D.state == g.STARTED) {
c(function() {
t.call(B)
}, 1)
}
}
});
B.bind("FileUploaded", function(D, E) {
E.status = g.DONE;
E.loaded = E.size;
D.trigger("UploadProgress", E);
c(function() {
t.call(B)
}, 1)
});
if (s.runtimes) {
y = [];
z = s.runtimes.split(/\s?,\s?/);
for (C = 0; C < z.length; C++) {
if (l[z[C]]) {
y.push(l[z[C]])
}
}
} else {
y = l
}
function w() {
var G = y[A++],
F, D, E;
if (G) {
F = G.getFeatures();
D = B.settings.required_features;
if (D) {
D = D.split(",");
for (E = 0; E < D.length; E++) {
if (!F[D[E]]) {
w();
return
}
}
}
G.init(B, function(H) {
if (H && H.success) {
B.features = F;
B.runtime = G.name;
B.trigger("Init", {
runtime: G.name
});
B.trigger("PostInit");
B.refresh()
} else {
w()
}
})
} else {
B.trigger("Error", {
code: g.INIT_ERROR,
message: g.translate("Init error.")
})
}
}
w();
if (typeof(s.init) == "function") {
s.init(B)
} else {
g.each(s.init, function(E, D) {
B.bind(D, E)
})
}
},
refresh: function() {
this.trigger("Refresh")
},
start: function() {
if (u.length && this.state != g.STARTED) {
this.state = g.STARTED;
this.trigger("StateChanged");
t.call(this)
}
},
stop: function() {
if (this.state != g.STOPPED) {
this.state = g.STOPPED;
this.trigger("CancelUpload");
this.trigger("StateChanged")
}
},
disableBrowse: function() {
q = arguments[0] !== b ? arguments[0] : true;
this.trigger("DisableBrowse", q)
},
getFile: function(x) {
var w;
for (w = u.length - 1; w >= 0; w--) {
if (u[w].id === x) {
return u[w]
}
}
},
removeFile: function(x) {
var w;
for (w = u.length - 1; w >= 0; w--) {
if (u[w].id === x.id) {
return this.splice(w, 1)[0]
}
}
},
splice: function(y, w) {
var x;
x = u.splice(y === b ? 0 : y, w === b ? u.length : w);
this.trigger("FilesRemoved", x);
this.trigger("QueueChanged");
return x
},
trigger: function(x) {
var z = p[x.toLowerCase()],
y, w;
if (z) {
w = Array.prototype.slice.call(arguments);
w[0] = this;
for (y = 0; y < z.length; y++) {
if (z[y].func.apply(z[y].scope, w) === false) {
return false
}
}
}
return true
},
hasEventListener: function(w) {
return !!p[w.toLowerCase()]
},
bind: function(w, y, x) {
var z;
w = w.toLowerCase();
z = p[w] || [];
z.push({
func: y,
scope: x || this
});
p[w] = z
},
unbind: function(w) {
w = w.toLowerCase();
var z = p[w],
x, y = arguments[1];
if (z) {
if (y !== b) {
for (x = z.length - 1; x >= 0; x--) {
if (z[x].func === y) {
z.splice(x, 1);
break
}
}
} else {
z = []
}
if (!z.length) {
delete p[w]
}
}
},
unbindAll: function() {
var w = this;
g.each(p, function(y, x) {
w.unbind(x)
})
},
destroy: function() {
this.stop();
this.trigger("Destroy");
this.unbindAll()
}
})
};
g.File = function(r, p, q) {
var o = this;
o.id = r;
o.name = p;
o.size = q;
o.loaded = 0;
o.percent = 0;
o.status = 0
};
g.Runtime = function() {
this.getFeatures = function() {};
this.init = function(o, p) {}
};
g.QueueProgress = function() {
var o = this;
o.size = 0;
o.loaded = 0;
o.uploaded = 0;
o.failed = 0;
o.queued = 0;
o.percent = 0;
o.bytesPerSec = 0;
o.reset = function() {
o.size = o.loaded = o.uploaded = o.failed = o.queued = o.percent = o.bytesPerSec = 0
}
};
g.runtimes = {};
window.plupload = g
})();
(function() {
if (window.google && google.gears) {
return
}
var a = null;
if (typeof GearsFactory != "undefined") {
a = new GearsFactory()
} else {
try {
a = new ActiveXObject("Gears.Factory");
if (a.getBuildInfo().indexOf("ie_mobile") != -1) {
a.privateSetGlobalObject(this)
}
} catch (b) {
if ((typeof navigator.mimeTypes != "undefined") && navigator.mimeTypes["application/x-googlegears"]) {
a = document.createElement("object");
a.style.display = "none";
a.width = 0;
a.height = 0;
a.type = "application/x-googlegears";
document.documentElement.appendChild(a)
}
}
}
if (!a) {
return
}
if (!window.google) {
window.google = {}
}
if (!google.gears) {
google.gears = {
factory: a
}
}
})();
(function(e, b, c, d) {
var f = {};
function a(h, k, m) {
var g, j, l, o;
j = google.gears.factory.create("beta.canvas");
try {
j.decode(h);
if (!k.width) {
k.width = j.width
}
if (!k.height) {
k.height = j.height
}
o = Math.min(k.width / j.width, k.height / j.height);
if (o < 1) {
j.resize(Math.round(j.width * o), Math.round(j.height * o))
} else {
if (!k.quality || m !== "image/jpeg") {
return h
}
}
if (k.quality) {
return j.encode(m, {
quality: k.quality / 100
})
}
return j.encode(m)
} catch (n) {}
return h
}
c.runtimes.Gears = c.addRuntime("gears", {
getFeatures: function() {
return {
dragdrop: true,
jpgresize: true,
pngresize: true,
chunks: true,
progress: true,
multipart: true,
multi_selection: true
}
},
init: function(l, n) {
var m, h, g = false;
if (!e.google || !google.gears) {
return n({
success: false
})
}
try {
m = google.gears.factory.create("beta.desktop")
} catch (k) {
return n({
success: false
})
}
function j(q) {
var p, o, r = [],
s;
for (o = 0; o < q.length; o++) {
p = q[o];
s = c.guid();
f[s] = p.blob;
r.push(new c.File(s, p.name, p.blob.length))
}
l.trigger("FilesAdded", r)
}
l.bind("PostInit", function() {
var p = l.settings,
o = b.getElementById(p.drop_element);
if (o) {
c.addEvent(o, "dragover", function(q) {
m.setDropEffect(q, "copy");
q.preventDefault()
}, l.id);
c.addEvent(o, "drop", function(r) {
var q = m.getDragData(r, "application/x-gears-files");
if (q) {
j(q.files)
}
r.preventDefault()
}, l.id);
o = 0
}
c.addEvent(b.getElementById(p.browse_button), "click", function(u) {
var t = [],
r, q, s;
u.preventDefault();
if (g) {
return
}
no_type_restriction: for (r = 0; r < p.filters.length; r++) {
s = p.filters[r].extensions.split(",");
for (q = 0; q < s.length; q++) {
if (s[q] === "*") {
t = [];
break no_type_restriction
}
t.push("." + s[q])
}
}
m.openFiles(j, {
singleFile: !p.multi_selection,
filter: t
})
}, l.id)
});
l.bind("CancelUpload", function() {
if (h.abort) {
h.abort()
}
});
l.bind("UploadFile", function(u, r) {
var w = 0,
v, s, t = 0,
q = u.settings.resize,
o;
if (q && /\.(png|jpg|jpeg)$/i.test(r.name)) {
f[r.id] = a(f[r.id], q, /\.png$/i.test(r.name) ? "image/png" : "image/jpeg")
}
r.size = f[r.id].length;
s = u.settings.chunk_size;
o = s > 0;
v = Math.ceil(r.size / s);
if (!o) {
s = r.size;
v = 1
}
function p() {
var C, y = u.settings.multipart,
x = 0,
B = {
name: r.target_name || r.name
}, z = u.settings.url;
function A(E) {
var D, J = "----pluploadboundary" + c.guid(),
G = "--",
I = "\r\n",
F, H;
if (y) {
h.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + J);
D = google.gears.factory.create("beta.blobbuilder");
c.each(c.extend(B, u.settings.multipart_params), function(L, K) {
D.append(G + J + I + 'Content-Disposition: form-data; name="' + K + '"' + I + I);
D.append(L + I)
});
H = c.mimeTypes[r.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream";
D.append(G + J + I + 'Content-Disposition: form-data; name="' + u.settings.file_data_name + '"; filename="' + r.name + '"' + I + "Content-Type: " + H + I + I);
D.append(E);
D.append(I + G + J + G + I);
F = D.getAsBlob();
x = F.length - E.length;
E = F
}
h.send(E)
}
if (r.status == c.DONE || r.status == c.FAILED || u.state == c.STOPPED) {
return
}
if (o) {
B.chunk = w;
B.chunks = v
}
C = Math.min(s, r.size - (w * s));
if (!y) {
z = c.buildUrl(u.settings.url, B)
}
h = google.gears.factory.create("beta.httprequest");
h.open("POST", z);
if (!y) {
h.setRequestHeader("Content-Disposition", 'attachment; filename="' + r.name + '"');
h.setRequestHeader("Content-Type", "application/octet-stream")
}
c.each(u.settings.headers, function(E, D) {
h.setRequestHeader(D, E)
});
h.upload.onprogress = function(D) {
r.loaded = t + D.loaded - x;
u.trigger("UploadProgress", r)
};
h.onreadystatechange = function() {
var D;
if (h.readyState == 4 && u.state !== c.STOPPED) {
if (h.status == 200) {
D = {
chunk: w,
chunks: v,
response: h.responseText,
status: h.status
};
u.trigger("ChunkUploaded", r, D);
if (D.cancelled) {
r.status = c.FAILED;
return
}
t += C;
if (++w >= v) {
r.status = c.DONE;
u.trigger("FileUploaded", r, {
response: h.responseText,
status: h.status
})
} else {
p()
}
} else {
u.trigger("Error", {
code: c.HTTP_ERROR,
message: c.translate("HTTP Error."),
file: r,
chunk: w,
chunks: v,
status: h.status
})
}
}
};
if (w < v) {
A(f[r.id].slice(w * s, C))
}
}
p()
});
l.bind("DisableBrowse", function(o, p) {
g = p
});
l.bind("Destroy", function(o) {
var p, q, r = {
browseButton: o.settings.browse_button,
dropElm: o.settings.drop_element
};
for (p in r) {
q = b.getElementById(r[p]);
if (q) {
c.removeAllEvents(q, o.id)
}
}
});
n({
success: true
})
}
})
})(window, document, plupload);
(function(g, b, d, e) {
var a = {}, h = {};
function c(o) {
var n, m = typeof o,
j, l, k;
if (o === e || o === null) {
return "null"
}
if (m === "string") {
n = "\bb\tt\nn\ff\rr\"\"''\\\\";
return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function(r, q) {
var p = n.indexOf(q);
if (p + 1) {
return "\\" + n.charAt(p + 1)
}
r = q.charCodeAt().toString(16);
return "\\u" + "0000".substring(r.length) + r
}) + '"'
}
if (m == "object") {
j = o.length !== e;
n = "";
if (j) {
for (l = 0; l < o.length; l++) {
if (n) {
n += ","
}
n += c(o[l])
}
n = "[" + n + "]"
} else {
for (k in o) {
if (o.hasOwnProperty(k)) {
if (n) {
n += ","
}
n += c(k) + ":" + c(o[k])
}
}
n = "{" + n + "}"
}
return n
}
return "" + o
}
function f(s) {
var v = false,
j = null,
o = null,
k, l, m, u, n, q = 0;
try {
try {
o = new ActiveXObject("AgControl.AgControl");
if (o.IsVersionSupported(s)) {
v = true
}
o = null
} catch (r) {
var p = navigator.plugins["Silverlight Plug-In"];
if (p) {
k = p.description;
if (k === "1.0.30226.2") {
k = "2.0.30226.2"
}
l = k.split(".");
while (l.length > 3) {
l.pop()
}
while (l.length < 4) {
l.push(0)
}
m = s.split(".");
while (m.length > 4) {
m.pop()
}
do {
u = parseInt(m[q], 10);
n = parseInt(l[q], 10);
q++
} while (q < m.length && u === n);
if (u <= n && !isNaN(u)) {
v = true
}
}
}
} catch (t) {
v = false
}
return v
}
d.silverlight = {
trigger: function(n, k) {
var m = a[n],
l, j;
if (m) {
j = d.toArray(arguments).slice(1);
j[0] = "Silverlight:" + k;
setTimeout(function() {
m.trigger.apply(m, j)
}, 0)
}
}
};
d.runtimes.Silverlight = d.addRuntime("silverlight", {
getFeatures: function() {
return {
jpgresize: true,
pngresize: true,
chunks: true,
progress: true,
multipart: true,
multi_selection: true
}
},
init: function(p, q) {
var o, m = "",
n = p.settings.filters,
l, k = b.body;
if (!f("2.0.31005.0") || (g.opera && g.opera.buildNumber)) {
q({
success: false
});
return
}
h[p.id] = false;
a[p.id] = p;
o = b.createElement("div");
o.id = p.id + "_silverlight_container";
d.extend(o.style, {
position: "absolute",
top: "0px",
background: p.settings.shim_bgcolor || "transparent",
zIndex: 99999,
width: "100px",
height: "100px",
overflow: "hidden",
opacity: p.settings.shim_bgcolor || b.documentMode > 8 ? "" : 0.01
});
o.className = "plupload silverlight";
if (p.settings.container) {
k = b.getElementById(p.settings.container);
if (d.getStyle(k, "position") === "static") {
k.style.position = "relative"
}
}
k.appendChild(o);
for (l = 0; l < n.length; l++) {
m += (m != "" ? "|" : "") + n[l].title + " | *." + n[l].extensions.replace(/,/g, ";*.")
}
o.innerHTML = '<object id="' + p.id + '_silverlight" data="data:application/x-silverlight," type="application/x-silverlight-2" style="outline:none;" width="1024" height="1024"><param name="source" value="' + p.settings.silverlight_xap_url + '"/><param name="background" value="Transparent"/><param name="windowless" value="true"/><param name="enablehtmlaccess" value="true"/><param name="initParams" value="id=' + p.id + ",filter=" + m + ",multiselect=" + p.settings.multi_selection + '"/></object>';
function j() {
return b.getElementById(p.id + "_silverlight").content.Upload
}
p.bind("Silverlight:Init", function() {
var r, s = {};
if (h[p.id]) {
return
}
h[p.id] = true;
p.bind("Silverlight:StartSelectFiles", function(t) {
r = []
});
p.bind("Silverlight:SelectFile", function(t, w, u, v) {
var x;
x = d.guid();
s[x] = w;
s[w] = x;
r.push(new d.File(x, u, v))
});
p.bind("Silverlight:SelectSuccessful", function() {
if (r.length) {
p.trigger("FilesAdded", r)
}
});
p.bind("Silverlight:UploadChunkError", function(t, w, u, x, v) {
p.trigger("Error", {
code: d.IO_ERROR,
message: "IO Error.",
details: v,
file: t.getFile(s[w])
})
});
p.bind("Silverlight:UploadFileProgress", function(t, x, u, w) {
var v = t.getFile(s[x]);
if (v.status != d.FAILED) {
v.size = w;
v.loaded = u;
t.trigger("UploadProgress", v)
}
});
p.bind("Refresh", function(t) {
var u, v, w;
u = b.getElementById(t.settings.browse_button);
if (u) {
v = d.getPos(u, b.getElementById(t.settings.container));
w = d.getSize(u);
d.extend(b.getElementById(t.id + "_silverlight_container").style, {
top: v.y + "px",
left: v.x + "px",
width: w.w + "px",
height: w.h + "px"
})
}
});
p.bind("Silverlight:UploadChunkSuccessful", function(t, w, u, z, y) {
var x, v = t.getFile(s[w]);
x = {
chunk: u,
chunks: z,
response: y
};
t.trigger("ChunkUploaded", v, x);
if (v.status != d.FAILED && t.state !== d.STOPPED) {
j().UploadNextChunk()
}
if (u == z - 1) {
v.status = d.DONE;
t.trigger("FileUploaded", v, {
response: y
})
}
});
p.bind("Silverlight:UploadSuccessful", function(t, w, u) {
var v = t.getFile(s[w]);
v.status = d.DONE;
t.trigger("FileUploaded", v, {
response: u
})
});
p.bind("FilesRemoved", function(t, v) {
var u;
for (u = 0; u < v.length; u++) {
j().RemoveFile(s[v[u].id])
}
});
p.bind("UploadFile", function(t, v) {
var w = t.settings,
u = w.resize || {};
j().UploadFile(s[v.id], t.settings.url, c({
name: v.target_name || v.name,
mime: d.mimeTypes[v.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream",
chunk_size: w.chunk_size,
image_width: u.width,
image_height: u.height,
image_quality: u.quality,
multipart: !! w.multipart,
multipart_params: w.multipart_params || {},
file_data_name: w.file_data_name,
headers: w.headers
}))
});
p.bind("CancelUpload", function() {
j().CancelUpload()
});
p.bind("Silverlight:MouseEnter", function(t) {
var u, v;
u = b.getElementById(p.settings.browse_button);
v = t.settings.browse_button_hover;
if (u && v) {
d.addClass(u, v)
}
});
p.bind("Silverlight:MouseLeave", function(t) {
var u, v;
u = b.getElementById(p.settings.browse_button);
v = t.settings.browse_button_hover;
if (u && v) {
d.removeClass(u, v)
}
});
p.bind("Silverlight:MouseLeftButtonDown", function(t) {
var u, v;
u = b.getElementById(p.settings.browse_button);
v = t.settings.browse_button_active;
if (u && v) {
d.addClass(u, v);
d.addEvent(b.body, "mouseup", function() {
d.removeClass(u, v)
})
}
});
p.bind("Sliverlight:StartSelectFiles", function(t) {
var u, v;
u = b.getElementById(p.settings.browse_button);
v = t.settings.browse_button_active;
if (u && v) {
d.removeClass(u, v)
}
});
p.bind("DisableBrowse", function(t, u) {
j().DisableBrowse(u)
});
p.bind("Destroy", function(t) {
var u;
d.removeAllEvents(b.body, t.id);
delete h[t.id];
delete a[t.id];
u = b.getElementById(t.id + "_silverlight_container");
if (u) {
u.parentNode.removeChild(u)
}
});
q({
success: true
})
})
}
})
})(window, document, plupload);
(function(f, b, d, e) {
var a = {}, g = {};
function c() {
var h;
try {
h = navigator.plugins["Shockwave Flash"];
h = h.description
} catch (k) {
try {
h = new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")
} catch (j) {
h = "0.0"
}
}
h = h.match(/\d+/g);
return parseFloat(h[0] + "." + h[1])
}
d.flash = {
trigger: function(k, h, j) {
setTimeout(function() {
var n = a[k],
m, l;
if (n) {
n.trigger("Flash:" + h, j)
}
}, 0)
}
};
d.runtimes.Flash = d.addRuntime("flash", {
getFeatures: function() {
return {
jpgresize: true,
pngresize: true,
maxWidth: 8091,
maxHeight: 8091,
chunks: true,
progress: true,
multipart: true,
multi_selection: true
}
},
init: function(n, p) {
var l, m, h = 0,
j = b.body;
if (c() < 10) {
p({
success: false
});
return
}
g[n.id] = false;
a[n.id] = n;
l = b.getElementById(n.settings.browse_button);
m = b.createElement("div");
m.id = n.id + "_flash_container";
d.extend(m.style, {
position: "absolute",
top: "0px",
background: n.settings.shim_bgcolor || "transparent",
zIndex: 99999,
width: "100%",
height: "100%"
});
m.className = "plupload flash";
if (n.settings.container) {
j = b.getElementById(n.settings.container);
if (d.getStyle(j, "position") === "static") {
j.style.position = "relative"
}
}
j.appendChild(m);
(function() {
var q, r;
q = '<object id="' + n.id + '_flash" type="application/x-shockwave-flash" data="' + n.settings.flash_swf_url + '" ';
if (d.ua.ie) {
q += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" '
}
q += 'width="100%" height="100%" style="outline:0"><param name="movie" value="' + n.settings.flash_swf_url + '" /><param name="flashvars" value="id=' + escape(n.id) + '" /><param name="wmode" value="transparent" /><param name="allowscriptaccess" value="always" /></object>';
if (d.ua.ie) {
r = b.createElement("div");
m.appendChild(r);
r.outerHTML = q;
r = null
} else {
m.innerHTML = q
}
}());
function o() {
return b.getElementById(n.id + "_flash")
}
function k() {
if (h++ > 5000) {
p({
success: false
});
return
}
if (g[n.id] === false) {
setTimeout(k, 1)
}
}
k();
l = m = null;
n.bind("Destroy", function(q) {
var r;
d.removeAllEvents(b.body, q.id);
delete g[q.id];
delete a[q.id];
r = b.getElementById(q.id + "_flash_container");
if (r) {
r.parentNode.removeChild(r)
}
});
n.bind("Flash:Init", function() {
var s = {}, r;
try {
o().setFileFilters(n.settings.filters, n.settings.multi_selection)
} catch (q) {
p({
success: false
});
return
}
if (g[n.id]) {
return
}
g[n.id] = true;
n.bind("UploadFile", function(t, v) {
var w = t.settings,
u = n.settings.resize || {};
o().uploadFile(s[v.id], w.url, {
name: v.target_name || v.name,
mime: d.mimeTypes[v.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream",
chunk_size: w.chunk_size,
width: u.width,
height: u.height,
quality: u.quality,
multipart: w.multipart,
multipart_params: w.multipart_params || {},
file_data_name: w.file_data_name,
format: /\.(jpg|jpeg)$/i.test(v.name) ? "jpg" : "png",
headers: w.headers,
urlstream_upload: w.urlstream_upload
})
});
n.bind("CancelUpload", function() {
o().cancelUpload()
});
n.bind("Flash:UploadProcess", function(u, t) {
var v = u.getFile(s[t.id]);
if (v.status != d.FAILED) {
v.loaded = t.loaded;
v.size = t.size;
u.trigger("UploadProgress", v)
}
});
n.bind("Flash:UploadChunkComplete", function(t, v) {
var w, u = t.getFile(s[v.id]);
w = {
chunk: v.chunk,
chunks: v.chunks,
response: v.text
};
t.trigger("ChunkUploaded", u, w);
if (u.status !== d.FAILED && t.state !== d.STOPPED) {
o().uploadNextChunk()
}
if (v.chunk == v.chunks - 1) {
u.status = d.DONE;
t.trigger("FileUploaded", u, {
response: v.text
})
}
});
n.bind("Flash:SelectFiles", function(t, w) {
var v, u, x = [],
y;
for (u = 0; u < w.length; u++) {
v = w[u];
y = d.guid();
s[y] = v.id;
s[v.id] = y;
x.push(new d.File(y, v.name, v.size))
}
if (x.length) {
n.trigger("FilesAdded", x)
}
});
n.bind("Flash:SecurityError", function(t, u) {
n.trigger("Error", {
code: d.SECURITY_ERROR,
message: d.translate("Security error."),
details: u.message,
file: n.getFile(s[u.id])
})
});
n.bind("Flash:GenericError", function(t, u) {
n.trigger("Error", {
code: d.GENERIC_ERROR,
message: d.translate("Generic error."),
details: u.message,
file: n.getFile(s[u.id])
})
});
n.bind("Flash:IOError", function(t, u) {
n.trigger("Error", {
code: d.IO_ERROR,
message: d.translate("IO error."),
details: u.message,
file: n.getFile(s[u.id])
})
});
n.bind("Flash:ImageError", function(t, u) {
n.trigger("Error", {
code: parseInt(u.code, 10),
message: d.translate("Image error."),
file: n.getFile(s[u.id])
})
});
n.bind("Flash:StageEvent:rollOver", function(t) {
var u, v;
u = b.getElementById(n.settings.browse_button);
v = t.settings.browse_button_hover;
if (u && v) {
d.addClass(u, v)
}
});
n.bind("Flash:StageEvent:rollOut", function(t) {
var u, v;
u = b.getElementById(n.settings.browse_button);
v = t.settings.browse_button_hover;
if (u && v) {
d.removeClass(u, v)
}
});
n.bind("Flash:StageEvent:mouseDown", function(t) {
var u, v;
u = b.getElementById(n.settings.browse_button);
v = t.settings.browse_button_active;
if (u && v) {
d.addClass(u, v);
d.addEvent(b.body, "mouseup", function() {
d.removeClass(u, v)
}, t.id)
}
});
n.bind("Flash:StageEvent:mouseUp", function(t) {
var u, v;
u = b.getElementById(n.settings.browse_button);
v = t.settings.browse_button_active;
if (u && v) {
d.removeClass(u, v)
}
});
n.bind("Flash:ExifData", function(t, u) {
n.trigger("ExifData", n.getFile(s[u.id]), u.data)
});
n.bind("Flash:GpsData", function(t, u) {
n.trigger("GpsData", n.getFile(s[u.id]), u.data)
});
n.bind("QueueChanged", function(t) {
n.refresh()
});
n.bind("FilesRemoved", function(t, v) {
var u;
for (u = 0; u < v.length; u++) {
o().removeFile(s[v[u].id])
}
});
n.bind("StateChanged", function(t) {
n.refresh()
});
n.bind("Refresh", function(t) {
var u, v, w;
o().setFileFilters(n.settings.filters, n.settings.multi_selection);
u = b.getElementById(t.settings.browse_button);
if (u) {
v = d.getPos(u, b.getElementById(t.settings.container));
w = d.getSize(u);
d.extend(b.getElementById(t.id + "_flash_container").style, {
top: v.y + "px",
left: v.x + "px",
width: w.w + "px",
height: w.h + "px"
})
}
});
n.bind("DisableBrowse", function(t, u) {
o().disableBrowse(u)
});
p({
success: true
})
})
}
})
})(window, document, plupload);
(function(a) {
a.runtimes.BrowserPlus = a.addRuntime("browserplus", {
getFeatures: function() {
return {
dragdrop: true,
jpgresize: true,
pngresize: true,
chunks: true,
progress: true,
multipart: true,
multi_selection: true
}
},
init: function(g, j) {
var e = window.BrowserPlus,
h = {}, d = g.settings,
c = d.resize;
function f(o) {
var n, m, k = [],
l, p;
for (m = 0; m < o.length; m++) {
l = o[m];
p = a.guid();
h[p] = l;
k.push(new a.File(p, l.name, l.size))
}
if (m) {
g.trigger("FilesAdded", k)
}
}
function b() {
var k = false;
g.bind("PostInit", function() {
var o, m = d.drop_element,
q = g.id + "_droptarget",
l = document.getElementById(m),
n;
function r(t, s) {
e.DragAndDrop.AddDropTarget({
id: t
}, function(u) {
e.DragAndDrop.AttachCallbacks({
id: t,
hover: function(v) {
if (!v && s) {
s()
}
},
drop: function(v) {
if (s) {
s()
}
f(v)
}
}, function() {})
})
}
function p() {
document.getElementById(q).style.top = "-1000px"
}
if (l) {
if (document.attachEvent && (/MSIE/gi).test(navigator.userAgent)) {
o = document.createElement("div");
o.setAttribute("id", q);
a.extend(o.style, {
position: "absolute",
top: "-1000px",
background: "red",
filter: "alpha(opacity=0)",
opacity: 0
});
document.body.appendChild(o);
a.addEvent(l, "dragenter", function(t) {
var s, u;
s = document.getElementById(m);
u = a.getPos(s);
a.extend(document.getElementById(q).style, {
top: u.y + "px",
left: u.x + "px",
width: s.offsetWidth + "px",
height: s.offsetHeight + "px"
})
});
r(q, p)
} else {
r(m)
}
}
a.addEvent(document.getElementById(d.browse_button), "click", function(y) {
var s = [],
u, t, x = d.filters,
w, v;
y.preventDefault();
if (k) {
return
}
no_type_restriction: for (u = 0; u < x.length; u++) {
w = x[u].extensions.split(",");
for (t = 0; t < w.length; t++) {
if (w[t] === "*") {
s = [];
break no_type_restriction
}
v = a.mimeTypes[w[t]];
if (v && a.inArray(v, s) === -1) {
s.push(a.mimeTypes[w[t]])
}
}
}
e.FileBrowse.OpenBrowseDialog({
mimeTypes: s
}, function(z) {
if (z.success) {
f(z.value)
}
})
});
l = o = null
});
g.bind("CancelUpload", function() {
e.Uploader.cancel({}, function() {})
});
g.bind("DisableBrowse", function(l, m) {
k = m
});
g.bind("UploadFile", function(o, l) {
var n = h[l.id],
t = {}, m = o.settings.chunk_size,
p, q = [];
function s(u, w) {
var v;
if (l.status == a.FAILED) {
return
}
t.name = l.target_name || l.name;
if (m) {
t.chunk = "" + u;
t.chunks = "" + w
}
v = q.shift();
e.Uploader.upload({
url: o.settings.url,
files: {
file: v
},
cookies: document.cookies,
postvars: a.extend(t, o.settings.multipart_params),
progressCallback: function(z) {
var y, x = 0;
p[u] = parseInt(z.filePercent * v.size / 100, 10);
for (y = 0; y < p.length; y++) {
x += p[y]
}
l.loaded = x;
o.trigger("UploadProgress", l)
}
}, function(y) {
var x, z;
if (y.success) {
x = y.value.statusCode;
if (m) {
o.trigger("ChunkUploaded", l, {
chunk: u,
chunks: w,
response: y.value.body,
status: x
})
}
if (q.length > 0) {
s(++u, w)
} else {
l.status = a.DONE;
o.trigger("FileUploaded", l, {
response: y.value.body,
status: x
});
if (x >= 400) {
o.trigger("Error", {
code: a.HTTP_ERROR,
message: a.translate("HTTP Error."),
file: l,
status: x
})
}
}
} else {
o.trigger("Error", {
code: a.GENERIC_ERROR,
message: a.translate("Generic Error."),
file: l,
details: y.error
})
}
})
}
function r(u) {
l.size = u.size;
if (m) {
e.FileAccess.chunk({
file: u,
chunkSize: m
}, function(x) {
if (x.success) {
var y = x.value,
v = y.length;
p = Array(v);
for (var w = 0; w < v; w++) {
p[w] = 0;
q.push(y[w])
}
s(0, v)
}
})
} else {
p = Array(1);
q.push(u);
s(0, 1)
}
}
if (c && /\.(png|jpg|jpeg)$/i.test(l.name)) {
BrowserPlus.ImageAlter.transform({
file: n,
quality: c.quality || 90,
actions: [{
scale: {
maxwidth: c.width,
maxheight: c.height
}
}]
}, function(u) {
if (u.success) {
r(u.value.file)
}
})
} else {
r(n)
}
});
j({
success: true
})
}
if (e) {
e.init(function(l) {
var k = [{
service: "Uploader",
version: "3"
}, {
service: "DragAndDrop",
version: "1"
}, {
service: "FileBrowse",
version: "1"
}, {
service: "FileAccess",
version: "2"
}];
if (c) {
k.push({
service: "ImageAlter",
version: "4"
})
}
if (l.success) {
e.require({
services: k
}, function(m) {
if (m.success) {
b()
} else {
j()
}
})
} else {
j()
}
})
} else {
j()
}
}
})
})(plupload);
(function(h, k, j, e) {
var c = {}, g;
function m(o, p) {
var n;
if ("FileReader" in h) {
n = new FileReader();
n.readAsDataURL(o);
n.onload = function() {
p(n.result)
}
} else {
return p(o.getAsDataURL())
}
}
function l(o, p) {
var n;
if ("FileReader" in h) {
n = new FileReader();
n.readAsBinaryString(o);
n.onload = function() {
p(n.result)
}
} else {
return p(o.getAsBinary())
}
}
function d(r, p, n, v) {
var q, o, u, s, t = this;
m(c[r.id], function(w) {
q = k.createElement("canvas");
q.style.display = "none";
k.body.appendChild(q);
o = q.getContext("2d");
u = new Image();
u.onerror = u.onabort = function() {
v({
success: false
})
};
u.onload = function() {
var C, x, z, y, B;
if (!p.width) {
p.width = u.width
}
if (!p.height) {
p.height = u.height
}
s = Math.min(p.width / u.width, p.height / u.height);
if (s < 1) {
C = Math.round(u.width * s);
x = Math.round(u.height * s)
} else {
if (p.quality && n === "image/jpeg") {
C = u.width;
x = u.height
} else {
v({
success: false
});
return
}
}
q.width = C;
q.height = x;
o.drawImage(u, 0, 0, C, x);
if (n === "image/jpeg") {
y = new f(atob(w.substring(w.indexOf("base64,") + 7)));
if (y.headers && y.headers.length) {
B = new a();
if (B.init(y.get("exif")[0])) {
B.setExif("PixelXDimension", C);
B.setExif("PixelYDimension", x);
y.set("exif", B.getBinary());
if (t.hasEventListener("ExifData")) {
t.trigger("ExifData", r, B.EXIF())
}
if (t.hasEventListener("GpsData")) {
t.trigger("GpsData", r, B.GPS())
}
}
}
}
if (p.quality && n === "image/jpeg") {
try {
w = q.toDataURL(n, p.quality / 100)
} catch (A) {
w = q.toDataURL(n)
}
} else {
w = q.toDataURL(n)
}
w = w.substring(w.indexOf("base64,") + 7);
w = atob(w);
if (y && y.headers && y.headers.length) {
w = y.restore(w);
y.purge()
}
q.parentNode.removeChild(q);
v({
success: true,
data: w
})
};
u.src = w
})
}
j.runtimes.Html5 = j.addRuntime("html5", {
getFeatures: function() {
var s, o, r, q, p, n;
o = r = p = n = false;
if (h.XMLHttpRequest) {
s = new XMLHttpRequest();
r = !! s.upload;
o = !! (s.sendAsBinary || s.upload)
}
if (o) {
q = !! (s.sendAsBinary || (h.Uint8Array && h.ArrayBuffer));
p = !! (File && (File.prototype.getAsDataURL || h.FileReader) && q);
n = !! (File && (File.prototype.mozSlice || File.prototype.webkitSlice || File.prototype.slice))
}
g = j.ua.safari && j.ua.windows;
return {
html5: o,
dragdrop: (function() {
var t = k.createElement("div");
return ("draggable" in t) || ("ondragstart" in t && "ondrop" in t)
}()),
jpgresize: p,
pngresize: p,
multipart: p || !! h.FileReader || !! h.FormData,
canSendBinary: q,
cantSendBlobInFormData: !! (j.ua.gecko && h.FormData && h.FileReader && !FileReader.prototype.readAsArrayBuffer) || j.ua.android,
progress: r,
chunks: n,
multi_selection: !(j.ua.safari && j.ua.windows),
triggerDialog: (j.ua.gecko && h.FormData || j.ua.webkit)
}
},
init: function(p, r) {
var n, q;
function o(w) {
var u, t, v = [],
x, s = {};
for (t = 0; t < w.length; t++) {
u = w[t];
if (s[u.name]) {
continue
}
s[u.name] = true;
x = j.guid();
c[x] = u;
v.push(new j.File(x, u.fileName || u.name, u.fileSize || u.size))
}
if (v.length) {
p.trigger("FilesAdded", v)
}
}
n = this.getFeatures();
if (!n.html5) {
r({
success: false
});
return
}
p.bind("Init", function(w) {
var G, F, C = [],
v, D, t = w.settings.filters,
u, B, s = k.body,
E;
G = k.createElement("div");
G.id = w.id + "_html5_container";
j.extend(G.style, {
position: "absolute",
background: p.settings.shim_bgcolor || "transparent",
width: "100px",
height: "100px",
overflow: "hidden",
zIndex: 99999,
opacity: p.settings.shim_bgcolor ? "" : 0
});
G.className = "plupload html5";
if (p.settings.container) {
s = k.getElementById(p.settings.container);
if (j.getStyle(s, "position") === "static") {
s.style.position = "relative"
}
}
s.appendChild(G);
no_type_restriction: for (v = 0; v < t.length; v++) {
u = t[v].extensions.split(/,/);
for (D = 0; D < u.length; D++) {
if (u[D] === "*") {
C = [];
break no_type_restriction
}
B = j.mimeTypes[u[D]];
if (B && j.inArray(B, C) === -1) {
C.push(B)
}
}
}
G.innerHTML = '<input id="' + p.id + '_html5" style="font-size:999px" type="file" accept="' + C.join(",") + '" ' + (p.settings.multi_selection && p.features.multi_selection ? 'multiple="multiple"' : "") + " />";
G.scrollTop = 100;
E = k.getElementById(p.id + "_html5");
if (w.features.triggerDialog) {
j.extend(E.style, {
position: "absolute",
width: "100%",
height: "100%"
})
} else {
j.extend(E.style, {
cssFloat: "right",
styleFloat: "right"
})
}
E.onchange = function() {
o(this.files);
this.value = ""
};
F = k.getElementById(w.settings.browse_button);
if (F) {
var z = w.settings.browse_button_hover,
A = w.settings.browse_button_active,
x = w.features.triggerDialog ? F : G;
if (z) {
j.addEvent(x, "mouseover", function() {
j.addClass(F, z)
}, w.id);
j.addEvent(x, "mouseout", function() {
j.removeClass(F, z)
}, w.id)
}
if (A) {
j.addEvent(x, "mousedown", function() {
j.addClass(F, A)
}, w.id);
j.addEvent(k.body, "mouseup", function() {
j.removeClass(F, A)
}, w.id)
}
if (w.features.triggerDialog) {
j.addEvent(F, "click", function(H) {
var y = k.getElementById(w.id + "_html5");
if (y && !y.disabled) {
y.click()
}
H.preventDefault()
}, w.id)
}
}
});
p.bind("PostInit", function() {
var s = k.getElementById(p.settings.drop_element);
if (s) {
if (g) {
j.addEvent(s, "dragenter", function(w) {
var v, t, u;
v = k.getElementById(p.id + "_drop");
if (!v) {
v = k.createElement("input");
v.setAttribute("type", "file");
v.setAttribute("id", p.id + "_drop");
v.setAttribute("multiple", "multiple");
j.addEvent(v, "change", function() {
o(this.files);
j.removeEvent(v, "change", p.id);
v.parentNode.removeChild(v)
}, p.id);
j.addEvent(v, "dragover", function(x) {
x.stopPropagation()
}, p.id);
s.appendChild(v)
}
t = j.getPos(s, k.getElementById(p.settings.container));
u = j.getSize(s);
if (j.getStyle(s, "position") === "static") {
j.extend(s.style, {
position: "relative"
})
}
j.extend(v.style, {
position: "absolute",
display: "block",
top: 0,
left: 0,
width: u.w + "px",
height: u.h + "px",
opacity: 0
})
}, p.id);
return
}
j.addEvent(s, "dragover", function(t) {
t.preventDefault()
}, p.id);
j.addEvent(s, "drop", function(u) {
var t = u.dataTransfer;
if (t && t.files) {
o(t.files)
}
u.preventDefault()
}, p.id)
}
});
p.bind("Refresh", function(s) {
var t, u, v, x, w;
t = k.getElementById(p.settings.browse_button);
if (t) {
u = j.getPos(t, k.getElementById(s.settings.container));
v = j.getSize(t);
x = k.getElementById(p.id + "_html5_container");
j.extend(x.style, {
top: u.y + "px",
left: u.x + "px",
width: v.w + "px",
height: v.h + "px"
});
if (p.features.triggerDialog) {
if (j.getStyle(t, "position") === "static") {
j.extend(t.style, {
position: "relative"
})
}
w = parseInt(j.getStyle(t, "zIndex"), 10);
if (isNaN(w)) {
w = 0
}
j.extend(t.style, {
zIndex: w
});
j.extend(x.style, {
zIndex: w - 1
})
}
}
});
p.bind("DisableBrowse", function(s, u) {
var t = k.getElementById(s.id + "_html5");
if (t) {
t.disabled = u
}
});
p.bind("CancelUpload", function() {
if (q && q.abort) {
q.abort()
}
});
p.bind("UploadFile", function(s, u) {
var v = s.settings,
y, t;
function x(A, D, z) {
var B;
if (File.prototype.slice) {
try {
A.slice();
return A.slice(D, z)
} catch (C) {
return A.slice(D, z - D)
}
} else {
if (B = File.prototype.webkitSlice || File.prototype.mozSlice) {
return B.call(A, D, z)
} else {
return null
}
}
}
function w(A) {
var D = 0,
C = 0,
z = ("FileReader" in h) ? new FileReader : null;
function B() {
var J, N, L, M, I, K, F, E = s.settings.url;
function H(Q) {
if (q.sendAsBinary) {
q.sendAsBinary(Q)
} else {
if (s.features.canSendBinary) {
var O = new Uint8Array(Q.length);
for (var P = 0; P < Q.length; P++) {
O[P] = (Q.charCodeAt(P) & 255)
}
q.send(O.buffer)
}
}
}
function G(P) {
var T = 0,
U = "----pluploadboundary" + j.guid(),
R, Q = "--",
S = "\r\n",
O = "";
q = new XMLHttpRequest;
if (q.upload) {
q.upload.onprogress = function(V) {
u.loaded = Math.min(u.size, C + V.loaded - T);
s.trigger("UploadProgress", u)
}
}
q.onreadystatechange = function() {
var V, X;
if (q.readyState == 4 && s.state !== j.STOPPED) {
try {
V = q.status
} catch (W) {
V = 0
}
if (V >= 400) {
s.trigger("Error", {
code: j.HTTP_ERROR,
message: j.translate("HTTP Error."),
file: u,
status: V
})
} else {
if (L) {
X = {
chunk: D,
chunks: L,
response: q.responseText,
status: V
};
s.trigger("ChunkUploaded", u, X);
C += K;
if (X.cancelled) {
u.status = j.FAILED;
return
}
u.loaded = Math.min(u.size, (D + 1) * I)
} else {
u.loaded = u.size
}
s.trigger("UploadProgress", u);
P = J = R = O = null;
if (!L || ++D >= L) {
u.status = j.DONE;
s.trigger("FileUploaded", u, {
response: q.responseText,
status: V
})
} else {
B()
}
}
}
};
if (s.settings.multipart && n.multipart) {
M.name = u.target_name || u.name;
q.open("post", E, true);
j.each(s.settings.headers, function(W, V) {
q.setRequestHeader(V, W)
});
if (typeof(P) !== "string" && !! h.FormData) {
R = new FormData();
j.each(j.extend(M, s.settings.multipart_params), function(W, V) {
R.append(V, W)
});
R.append(s.settings.file_data_name, P);
q.send(R);
return
}
if (typeof(P) === "string") {
q.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + U);
j.each(j.extend(M, s.settings.multipart_params), function(W, V) {
O += Q + U + S + 'Content-Disposition: form-data; name="' + V + '"' + S + S;
O += unescape(encodeURIComponent(W)) + S
});
F = j.mimeTypes[u.name.replace(/^.+\.([^.]+)/, "$1").toLowerCase()] || "application/octet-stream";
O += Q + U + S + 'Content-Disposition: form-data; name="' + s.settings.file_data_name + '"; filename="' + unescape(encodeURIComponent(u.name)) + '"' + S + "Content-Type: " + F + S + S + P + S + Q + U + Q + S;
T = O.length - P.length;
P = O;
H(P);
return
}
}
E = j.buildUrl(s.settings.url, j.extend(M, s.settings.multipart_params));
q.open("post", E, true);
q.setRequestHeader("Content-Type", "application/octet-stream");
j.each(s.settings.headers, function(W, V) {
q.setRequestHeader(V, W)
});
if (typeof(P) === "string") {
H(P)
} else {
q.send(P)
}
}
if (u.status == j.DONE || u.status == j.FAILED || s.state == j.STOPPED) {
return
}
M = {
name: u.target_name || u.name
};
if (v.chunk_size && u.size > v.chunk_size && (n.chunks || typeof(A) == "string")) {
I = v.chunk_size;
L = Math.ceil(u.size / I);
K = Math.min(I, u.size - (D * I));
if (typeof(A) == "string") {
J = A.substring(D * I, D * I + K)
} else {
J = x(A, D * I, D * I + K)
}
M.chunk = D;
M.chunks = L
} else {
K = u.size;
J = A
}
if (s.settings.multipart && n.multipart && typeof(J) !== "string" && z && n.cantSendBlobInFormData && n.chunks && s.settings.chunk_size) {
z.onload = function() {
G(z.result)
};
z.readAsBinaryString(J)
} else {
G(J)
}
}
B()
}
y = c[u.id];
if (n.jpgresize && s.settings.resize && /\.(png|jpg|jpeg)$/i.test(u.name)) {
d.call(s, u, s.settings.resize, /\.png$/i.test(u.name) ? "image/png" : "image/jpeg", function(z) {
if (z.success) {
u.size = z.data.length;
w(z.data)
} else {
if (n.chunks) {
w(y)
} else {
l(y, w)
}
}
})
} else {
if (!n.chunks && n.jpgresize) {
l(y, w)
} else {
w(y)
}
}
});
p.bind("Destroy", function(s) {
var u, v, t = k.body,
w = {
inputContainer: s.id + "_html5_container",
inputFile: s.id + "_html5",
browseButton: s.settings.browse_button,
dropElm: s.settings.drop_element
};
for (u in w) {
v = k.getElementById(w[u]);
if (v) {
j.removeAllEvents(v, s.id)
}
}
j.removeAllEvents(k.body, s.id);
if (s.settings.container) {
t = k.getElementById(s.settings.container)
}
t.removeChild(k.getElementById(w.inputContainer))
});
r({
success: true
})
}
});
function b() {
var q = false,
o;
function r(t, v) {
var s = q ? 0 : -8 * (v - 1),
w = 0,
u;
for (u = 0; u < v; u++) {
w |= (o.charCodeAt(t + u) << Math.abs(s + u * 8))
}
return w
}
function n(u, s, t) {
var t = arguments.length === 3 ? t : o.length - s - 1;
o = o.substr(0, s) + u + o.substr(t + s)
}
function p(t, u, w) {
var x = "",
s = q ? 0 : -8 * (w - 1),
v;
for (v = 0; v < w; v++) {
x += String.fromCharCode((u >> Math.abs(s + v * 8)) & 255)
}
n(x, t, w)
}
return {
II: function(s) {
if (s === e) {
return q
} else {
q = s
}
},
init: function(s) {
q = false;
o = s
},
SEGMENT: function(s, u, t) {
switch (arguments.length) {
case 1:
return o.substr(s, o.length - s - 1);
case 2:
return o.substr(s, u);
case 3:
n(t, s, u);
break;
default:
return o
}
},
BYTE: function(s) {
return r(s, 1)
},
SHORT: function(s) {
return r(s, 2)
},
LONG: function(s, t) {
if (t === e) {
return r(s, 4)
} else {
p(s, t, 4)
}
},
SLONG: function(s) {
var t = r(s, 4);
return (t > 2147483647 ? t - 4294967296 : t)
},
STRING: function(s, t) {
var u = "";
for (t += s; s < t; s++) {
u += String.fromCharCode(r(s, 1))
}
return u
}
}
}
function f(s) {
var u = {
65505: {
app: "EXIF",
name: "APP1",
signature: "Exif\0"
},
65506: {
app: "ICC",
name: "APP2",
signature: "ICC_PROFILE\0"
},
65517: {
app: "IPTC",
name: "APP13",
signature: "Photoshop 3.0\0"
}
}, t = [],
r, n, p = e,
q = 0,
o;
r = new b();
r.init(s);
if (r.SHORT(0) !== 65496) {
return
}
n = 2;
o = Math.min(1048576, s.length);
while (n <= o) {
p = r.SHORT(n);
if (p >= 65488 && p <= 65495) {
n += 2;
continue
}
if (p === 65498 || p === 65497) {
break
}
q = r.SHORT(n + 2) + 2;
if (u[p] && r.STRING(n + 4, u[p].signature.length) === u[p].signature) {
t.push({
hex: p,
app: u[p].app.toUpperCase(),
name: u[p].name.toUpperCase(),
start: n,
length: q,
segment: r.SEGMENT(n, q)
})
}
n += q
}
r.init(null);
return {
headers: t,
restore: function(y) {
r.init(y);
var w = new f(y);
if (!w.headers) {
return false
}
for (var x = w.headers.length; x > 0; x--) {
var z = w.headers[x - 1];
r.SEGMENT(z.start, z.length, "")
}
w.purge();
n = r.SHORT(2) == 65504 ? 4 + r.SHORT(4) : 2;
for (var x = 0, v = t.length; x < v; x++) {
r.SEGMENT(n, 0, t[x].segment);
n += t[x].length
}
return r.SEGMENT()
},
get: function(x) {
var y = [];
for (var w = 0, v = t.length; w < v; w++) {
if (t[w].app === x.toUpperCase()) {
y.push(t[w].segment)
}
}
return y
},
set: function(y, x) {
var z = [];
if (typeof(x) === "string") {
z.push(x)
} else {
z = x
}
for (var w = ii = 0, v = t.length; w < v; w++) {
if (t[w].app === y.toUpperCase()) {
t[w].segment = z[ii];
t[w].length = z[ii].length;
ii++
}
if (ii >= z.length) {
break
}
}
},
purge: function() {
t = [];
r.init(null)
}
}
}
function a() {
var q, n, o = {}, t;
q = new b();
n = {
tiff: {
274: "Orientation",
34665: "ExifIFDPointer",
34853: "GPSInfoIFDPointer"
},
exif: {
36864: "ExifVersion",
40961: "ColorSpace",
40962: "PixelXDimension",
40963: "PixelYDimension",
36867: "DateTimeOriginal",
33434: "ExposureTime",
33437: "FNumber",
34855: "ISOSpeedRatings",
37377: "ShutterSpeedValue",
37378: "ApertureValue",
37383: "MeteringMode",
37384: "LightSource",
37385: "Flash",
41986: "ExposureMode",
41987: "WhiteBalance",
41990: "SceneCaptureType",
41988: "DigitalZoomRatio",
41992: "Contrast",
41993: "Saturation",
41994: "Sharpness"
},
gps: {
0: "GPSVersionID",
1: "GPSLatitudeRef",
2: "GPSLatitude",
3: "GPSLongitudeRef",
4: "GPSLongitude"
}
};
t = {
ColorSpace: {
1: "sRGB",
0: "Uncalibrated"
},
MeteringMode: {
0: "Unknown",
1: "Average",
2: "CenterWeightedAverage",
3: "Spot",
4: "MultiSpot",
5: "Pattern",
6: "Partial",
255: "Other"
},
LightSource: {
1: "Daylight",
2: "Fliorescent",
3: "Tungsten",
4: "Flash",
9: "Fine weather",
10: "Cloudy weather",
11: "Shade",
12: "Daylight fluorescent (D 5700 - 7100K)",
13: "Day white fluorescent (N 4600 -5400K)",
14: "Cool white fluorescent (W 3900 - 4500K)",
15: "White fluorescent (WW 3200 - 3700K)",
17: "Standard light A",
18: "Standard light B",
19: "Standard light C",
20: "D55",
21: "D65",
22: "D75",
23: "D50",
24: "ISO studio tungsten",
255: "Other"
},
Flash: {
0: "Flash did not fire.",
1: "Flash fired.",
5: "Strobe return light not detected.",
7: "Strobe return light detected.",
9: "Flash fired, compulsory flash mode",
13: "Flash fired, compulsory flash mode, return light not detected",
15: "Flash fired, compulsory flash mode, return light detected",
16: "Flash did not fire, compulsory flash mode",
24: "Flash did not fire, auto mode",
25: "Flash fired, auto mode",
29: "Flash fired, auto mode, return light not detected",
31: "Flash fired, auto mode, return light detected",
32: "No flash function",
65: "Flash fired, red-eye reduction mode",
69: "Flash fired, red-eye reduction mode, return light not detected",
71: "Flash fired, red-eye reduction mode, return light detected",
73: "Flash fired, compulsory flash mode, red-eye reduction mode",
77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
89: "Flash fired, auto mode, red-eye reduction mode",
93: "Flash fired, auto mode, return light not detected, red-eye reduction mode",
95: "Flash fired, auto mode, return light detected, red-eye reduction mode"
},
ExposureMode: {
0: "Auto exposure",
1: "Manual exposure",
2: "Auto bracket"
},
WhiteBalance: {
0: "Auto white balance",
1: "Manual white balance"
},
SceneCaptureType: {
0: "Standard",
1: "Landscape",
2: "Portrait",
3: "Night scene"
},
Contrast: {
0: "Normal",
1: "Soft",
2: "Hard"
},
Saturation: {
0: "Normal",
1: "Low saturation",
2: "High saturation"
},
Sharpness: {
0: "Normal",
1: "Soft",
2: "Hard"
},
GPSLatitudeRef: {
N: "North latitude",
S: "South latitude"
},
GPSLongitudeRef: {
E: "East longitude",
W: "West longitude"
}
};
function p(u, C) {
var w = q.SHORT(u),
z, F, G, B, A, v, x, D, E = [],
y = {};
for (z = 0; z < w; z++) {
x = v = u + 12 * z + 2;
G = C[q.SHORT(x)];
if (G === e) {
continue
}
B = q.SHORT(x += 2);
A = q.LONG(x += 2);
x += 4;
E = [];
switch (B) {
case 1:
case 7:
if (A > 4) {
x = q.LONG(x) + o.tiffHeader
}
for (F = 0; F < A; F++) {
E[F] = q.BYTE(x + F)
}
break;
case 2:
if (A > 4) {
x = q.LONG(x) + o.tiffHeader
}
y[G] = q.STRING(x, A - 1);
continue;
case 3:
if (A > 2) {
x = q.LONG(x) + o.tiffHeader
}
for (F = 0; F < A; F++) {
E[F] = q.SHORT(x + F * 2)
}
break;
case 4:
if (A > 1) {
x = q.LONG(x) + o.tiffHeader
}
for (F = 0; F < A; F++) {
E[F] = q.LONG(x + F * 4)
}
break;
case 5:
x = q.LONG(x) + o.tiffHeader;
for (F = 0; F < A; F++) {
E[F] = q.LONG(x + F * 4) / q.LONG(x + F * 4 + 4)
}
break;
case 9:
x = q.LONG(x) + o.tiffHeader;
for (F = 0; F < A; F++) {
E[F] = q.SLONG(x + F * 4)
}
break;
case 10:
x = q.LONG(x) + o.tiffHeader;
for (F = 0; F < A; F++) {
E[F] = q.SLONG(x + F * 4) / q.SLONG(x + F * 4 + 4)
}
break;
default:
continue
}
D = (A == 1 ? E[0] : E);
if (t.hasOwnProperty(G) && typeof D != "object") {
y[G] = t[G][D]
} else {
y[G] = D
}
}
return y
}
function s() {
var v = e,
u = o.tiffHeader;
q.II(q.SHORT(u) == 18761);
if (q.SHORT(u += 2) !== 42) {
return false
}
o.IFD0 = o.tiffHeader + q.LONG(u += 2);
v = p(o.IFD0, n.tiff);
o.exifIFD = ("ExifIFDPointer" in v ? o.tiffHeader + v.ExifIFDPointer : e);
o.gpsIFD = ("GPSInfoIFDPointer" in v ? o.tiffHeader + v.GPSInfoIFDPointer : e);
return true
}
function r(w, u, z) {
var B, y, x, A = 0;
if (typeof(u) === "string") {
var v = n[w.toLowerCase()];
for (hex in v) {
if (v[hex] === u) {
u = hex;
break
}
}
}
B = o[w.toLowerCase() + "IFD"];
y = q.SHORT(B);
for (i = 0; i < y; i++) {
x = B + 12 * i + 2;
if (q.SHORT(x) == u) {
A = x + 8;
break
}
}
if (!A) {
return false
}
q.LONG(A, z);
return true
}
return {
init: function(u) {
o = {
tiffHeader: 10
};
if (u === e || !u.length) {
return false
}
q.init(u);
if (q.SHORT(0) === 65505 && q.STRING(4, 5).toUpperCase() === "EXIF\0") {
return s()
}
return false
},
EXIF: function() {
var v;
v = p(o.exifIFD, n.exif);
if (v.ExifVersion && j.typeOf(v.ExifVersion) === "array") {
for (var w = 0, u = ""; w < v.ExifVersion.length; w++) {
u += String.fromCharCode(v.ExifVersion[w])
}
v.ExifVersion = u
}
return v
},
GPS: function() {
var u;
u = p(o.gpsIFD, n.gps);
if (u.GPSVersionID) {
u.GPSVersionID = u.GPSVersionID.join(".")
}
return u
},
setExif: function(u, v) {
if (u !== "PixelXDimension" && u !== "PixelYDimension") {
return false
}
return r("exif", u, v)
},
getBinary: function() {
return q.SEGMENT()
}
}
}
})(window, document, plupload);
(function(d, a, b, c) {
function e(f) {
return a.getElementById(f)
}
b.runtimes.Html4 = b.addRuntime("html4", {
getFeatures: function() {
return {
multipart: true,
triggerDialog: (b.ua.gecko && d.FormData || b.ua.webkit)
}
},
init: function(f, g) {
f.bind("Init", function(p) {
var j = a.body,
n, h = "javascript",
k, x, q, z = [],
r = /MSIE/.test(navigator.userAgent),
t = [],
m = p.settings.filters,
o, l, s, w;
no_type_restriction: for (o = 0; o < m.length; o++) {
l = m[o].extensions.split(/,/);
for (w = 0; w < l.length; w++) {
if (l[w] === "*") {
t = [];
break no_type_restriction
}
s = b.mimeTypes[l[w]];
if (s && b.inArray(s, t) === -1) {
t.push(s)
}
}
}
t = t.join(",");
function v() {
var C, A, y, B;
q = b.guid();
z.push(q);
C = a.createElement("form");
C.setAttribute("id", "form_" + q);
C.setAttribute("method", "post");
C.setAttribute("enctype", "multipart/form-data");
C.setAttribute("encoding", "multipart/form-data");
C.setAttribute("target", p.id + "_iframe");
C.style.position = "absolute";
A = a.createElement("input");
A.setAttribute("id", "input_" + q);
A.setAttribute("type", "file");
A.setAttribute("accept", t);
A.setAttribute("size", 1);
B = e(p.settings.browse_button);
if (p.features.triggerDialog && B) {
b.addEvent(e(p.settings.browse_button), "click", function(D) {
if (!A.disabled) {
A.click()
}
D.preventDefault()
}, p.id)
}
b.extend(A.style, {
width: "100%",
height: "100%",
opacity: 0,
fontSize: "99px",
cursor: "pointer"
});
b.extend(C.style, {
overflow: "hidden"
});
y = p.settings.shim_bgcolor;
if (y) {
C.style.background = y
}
if (r) {
b.extend(A.style, {
filter: "alpha(opacity=0)"
})
}
b.addEvent(A, "change", function(G) {
var E = G.target,
D, F = [],
H;
if (E.value) {
e("form_" + q).style.top = -1048575 + "px";
D = E.value.replace(/\\/g, "/");
D = D.substring(D.length, D.lastIndexOf("/") + 1);
F.push(new b.File(q, D));
if (!p.features.triggerDialog) {
b.removeAllEvents(C, p.id)
} else {
b.removeEvent(B, "click", p.id)
}
b.removeEvent(A, "change", p.id);
v();
if (F.length) {
f.trigger("FilesAdded", F)
}
}
}, p.id);
C.appendChild(A);
j.appendChild(C);
p.refresh()
}
function u() {
var y = a.createElement("div");
y.innerHTML = '<iframe id="' + p.id + '_iframe" name="' + p.id + '_iframe" src="' + h + ':&quot;&quot;" style="display:none"></iframe>';
n = y.firstChild;
j.appendChild(n);
b.addEvent(n, "load", function(D) {
var E = D.target,
C, A;
if (!k) {
return
}
try {
C = E.contentWindow.document || E.contentDocument || d.frames[E.id].document
} catch (B) {
p.trigger("Error", {
code: b.SECURITY_ERROR,
message: b.translate("Security error."),
file: k
});
return
}
A = C.documentElement.innerText || C.documentElement.textContent;
if (A) {
k.status = b.DONE;
k.loaded = 1025;
k.percent = 100;
p.trigger("UploadProgress", k);
p.trigger("FileUploaded", k, {
response: A
})
}
}, p.id)
}
if (p.settings.container) {
j = e(p.settings.container);
if (b.getStyle(j, "position") === "static") {
j.style.position = "relative"
}
}
p.bind("UploadFile", function(y, B) {
var C, A;
if (B.status == b.DONE || B.status == b.FAILED || y.state == b.STOPPED) {
return
}
C = e("form_" + B.id);
A = e("input_" + B.id);
A.setAttribute("name", y.settings.file_data_name);
C.setAttribute("action", y.settings.url);
b.each(b.extend({
name: B.target_name || B.name
}, y.settings.multipart_params), function(F, D) {
var E = a.createElement("input");
b.extend(E, {
type: "hidden",
name: D,
value: F
});
C.insertBefore(E, C.firstChild)
});
k = B;
e("form_" + q).style.top = -1048575 + "px";
C.submit()
});
p.bind("FileUploaded", function(y) {
y.refresh()
});
p.bind("StateChanged", function(y) {
if (y.state == b.STARTED) {
u()
} else {
if (y.state == b.STOPPED) {
d.setTimeout(function() {
b.removeEvent(n, "load", y.id);
if (n.parentNode) {
n.parentNode.removeChild(n)
}
}, 0)
}
}
b.each(y.files, function(B, A) {
if (B.status === b.DONE || B.status === b.FAILED) {
var C = e("form_" + B.id);
if (C) {
C.parentNode.removeChild(C)
}
}
})
});
p.bind("Refresh", function(A) {
var G, B, C, D, y, H, I, F, E;
G = e(A.settings.browse_button);
if (G) {
y = b.getPos(G, e(A.settings.container));
H = b.getSize(G);
I = e("form_" + q);
F = e("input_" + q);
b.extend(I.style, {
top: y.y + "px",
left: y.x + "px",
width: H.w + "px",
height: H.h + "px"
});
if (A.features.triggerDialog) {
if (b.getStyle(G, "position") === "static") {
b.extend(G.style, {
position: "relative"
})
}
E = parseInt(G.style.zIndex, 10);
if (isNaN(E)) {
E = 0
}
b.extend(G.style, {
zIndex: E
});
b.extend(I.style, {
zIndex: E - 1
})
}
C = A.settings.browse_button_hover;
D = A.settings.browse_button_active;
B = A.features.triggerDialog ? G : I;
if (C) {
b.addEvent(B, "mouseover", function() {
b.addClass(G, C)
}, A.id);
b.addEvent(B, "mouseout", function() {
b.removeClass(G, C)
}, A.id)
}
if (D) {
b.addEvent(B, "mousedown", function() {
b.addClass(G, D)
}, A.id);
b.addEvent(a.body, "mouseup", function() {
b.removeClass(G, D)
}, A.id)
}
}
});
f.bind("FilesRemoved", function(y, B) {
var A, C;
for (A = 0; A < B.length; A++) {
C = e("form_" + B[A].id);
if (C) {
C.parentNode.removeChild(C)
}
}
});
f.bind("DisableBrowse", function(y, B) {
var A = a.getElementById("input_" + q);
if (A) {
A.disabled = B
}
});
f.bind("Destroy", function(y) {
var A, B, C, D = {
inputContainer: "form_" + q,
inputFile: "input_" + q,
browseButton: y.settings.browse_button
};
for (A in D) {
B = e(D[A]);
if (B) {
b.removeAllEvents(B, y.id)
}
}
b.removeAllEvents(a.body, y.id);
b.each(z, function(F, E) {
C = e("form_" + F);
if (C) {
C.parentNode.removeChild(C)
}
})
});
v()
});
g({
success: true
})
}
})
})(window, document, plupload);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment