From 5398815a949af427a2207c1397601d479e5856d0 Mon Sep 17 00:00:00 2001
From: Nico von Geyso
Date: Thu, 9 Aug 2012 15:56:11 +0200
Subject: structured categories instead of tags
---
app.py | 135 ++++----
fit.py | 174 +++++------
static/plupload/js/i18n/cs.js | 14 -
static/plupload/js/i18n/da.js | 12 -
static/plupload/js/i18n/de.js | 24 --
static/plupload/js/i18n/el.js | 14 -
static/plupload/js/i18n/es.js | 25 --
static/plupload/js/i18n/et.js | 33 --
static/plupload/js/i18n/fa.js | 37 ---
static/plupload/js/i18n/fi.js | 33 --
static/plupload/js/i18n/fr-ca.js | 35 ---
static/plupload/js/i18n/fr.js | 25 --
static/plupload/js/i18n/hr.js | 25 --
static/plupload/js/i18n/hu.js | 33 --
static/plupload/js/i18n/it.js | 24 --
static/plupload/js/i18n/ja.js | 37 ---
static/plupload/js/i18n/ko.js | 36 ---
static/plupload/js/i18n/lv.js | 33 --
static/plupload/js/i18n/nl.js | 21 --
static/plupload/js/i18n/pl.js | 24 --
static/plupload/js/i18n/pt-br.js | 35 ---
static/plupload/js/i18n/ro.js | 24 --
static/plupload/js/i18n/ru.js | 21 --
static/plupload/js/i18n/sr.js | 14 -
static/plupload/js/i18n/sv.js | 12 -
.../css/jquery.plupload.queue.css | 177 -----------
.../js/jquery.plupload.queue/img/backgrounds.gif | Bin 2977 -> 0 bytes
.../jquery.plupload.queue/img/buttons-disabled.png | Bin 1292 -> 0 bytes
.../js/jquery.plupload.queue/img/buttons.png | Bin 1439 -> 0 bytes
.../js/jquery.plupload.queue/img/delete.gif | Bin 180 -> 0 bytes
.../plupload/js/jquery.plupload.queue/img/done.gif | Bin 1024 -> 0 bytes
.../js/jquery.plupload.queue/img/error.gif | Bin 994 -> 0 bytes
.../js/jquery.plupload.queue/img/throbber.gif | Bin 1922 -> 0 bytes
.../js/jquery.plupload.queue/img/transp50.png | Bin 399 -> 0 bytes
.../jquery.plupload.queue/jquery.plupload.queue.js | 1 -
.../jquery.ui.plupload/css/jquery.ui.plupload.css | 147 ---------
.../js/jquery.ui.plupload/img/plupload-bw.png | Bin 2105 -> 0 bytes
.../js/jquery.ui.plupload/img/plupload.png | Bin 3641 -> 0 bytes
.../js/jquery.ui.plupload/jquery.ui.plupload.js | 1 -
static/plupload/js/plupload.browserplus.js | 1 -
static/plupload/js/plupload.flash.js | 1 -
static/plupload/js/plupload.flash.swf | Bin 18873 -> 0 bytes
static/plupload/js/plupload.full.js | 2 -
static/plupload/js/plupload.gears.js | 1 -
static/plupload/js/plupload.html4.js | 1 -
static/plupload/js/plupload.html5.js | 1 -
static/plupload/js/plupload.js | 2 -
static/plupload/js/plupload.silverlight.js | 1 -
static/plupload/js/plupload.silverlight.xap | Bin 44013 -> 0 bytes
static/plupload/license.txt | 339 ---------------------
static/style.css | 17 +-
static/upload.js | 3 +-
templates/_files.html | 19 --
templates/_formhelpers.html | 11 +
templates/_tags.html | 8 -
templates/files.html | 4 -
templates/index.html | 5 -
templates/layout.html | 55 +---
templates/module_list.html | 15 +
templates/module_show.html | 20 ++
templates/upload.html | 17 ++
61 files changed, 243 insertions(+), 1506 deletions(-)
delete mode 100644 static/plupload/js/i18n/cs.js
delete mode 100644 static/plupload/js/i18n/da.js
delete mode 100644 static/plupload/js/i18n/de.js
delete mode 100644 static/plupload/js/i18n/el.js
delete mode 100644 static/plupload/js/i18n/es.js
delete mode 100644 static/plupload/js/i18n/et.js
delete mode 100644 static/plupload/js/i18n/fa.js
delete mode 100644 static/plupload/js/i18n/fi.js
delete mode 100644 static/plupload/js/i18n/fr-ca.js
delete mode 100644 static/plupload/js/i18n/fr.js
delete mode 100644 static/plupload/js/i18n/hr.js
delete mode 100644 static/plupload/js/i18n/hu.js
delete mode 100644 static/plupload/js/i18n/it.js
delete mode 100644 static/plupload/js/i18n/ja.js
delete mode 100644 static/plupload/js/i18n/ko.js
delete mode 100644 static/plupload/js/i18n/lv.js
delete mode 100644 static/plupload/js/i18n/nl.js
delete mode 100644 static/plupload/js/i18n/pl.js
delete mode 100644 static/plupload/js/i18n/pt-br.js
delete mode 100644 static/plupload/js/i18n/ro.js
delete mode 100644 static/plupload/js/i18n/ru.js
delete mode 100644 static/plupload/js/i18n/sr.js
delete mode 100644 static/plupload/js/i18n/sv.js
delete mode 100644 static/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/backgrounds.gif
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/buttons-disabled.png
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/buttons.png
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/delete.gif
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/done.gif
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/error.gif
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/throbber.gif
delete mode 100644 static/plupload/js/jquery.plupload.queue/img/transp50.png
delete mode 100644 static/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js
delete mode 100644 static/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css
delete mode 100644 static/plupload/js/jquery.ui.plupload/img/plupload-bw.png
delete mode 100644 static/plupload/js/jquery.ui.plupload/img/plupload.png
delete mode 100644 static/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js
delete mode 100644 static/plupload/js/plupload.browserplus.js
delete mode 100644 static/plupload/js/plupload.flash.js
delete mode 100644 static/plupload/js/plupload.flash.swf
delete mode 100644 static/plupload/js/plupload.full.js
delete mode 100644 static/plupload/js/plupload.gears.js
delete mode 100644 static/plupload/js/plupload.html4.js
delete mode 100644 static/plupload/js/plupload.html5.js
delete mode 100644 static/plupload/js/plupload.js
delete mode 100644 static/plupload/js/plupload.silverlight.js
delete mode 100644 static/plupload/js/plupload.silverlight.xap
delete mode 100644 static/plupload/license.txt
delete mode 100644 templates/_files.html
create mode 100644 templates/_formhelpers.html
delete mode 100644 templates/_tags.html
delete mode 100644 templates/files.html
delete mode 100644 templates/index.html
create mode 100644 templates/module_list.html
create mode 100644 templates/module_show.html
create mode 100644 templates/upload.html
diff --git a/app.py b/app.py
index 7a905cf..2143052 100644
--- a/app.py
+++ b/app.py
@@ -1,9 +1,12 @@
-import magic
+import magic, os
from fit import Fit
from flask import Flask, render_template, request, flash, redirect, \
url_for,jsonify
+from flask.ext.wtf import Form, TextField, Required, FileField, SelectField,\
+ ValidationError, file_required
from werkzeug import secure_filename
+from datetime import date
fit = Fit('static/fit.git')
@@ -11,8 +14,49 @@ fit = Fit('static/fit.git')
app = Flask(__name__)
app.config.from_object('settings')
-ALLOWED_EXTENSIONS = set(
- ['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'zip', 'gs', 'gz' ])
+ALLOWED_EXTENSIONS = ['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'zip', 'gs', 'gz' ]
+
+MODULES= [
+ ('alp1', 'ALP1 - Funktionale Programmierung'),
+ ('alp2', 'ALP2 - Objektorientierte Programmierung'),
+ ('alp3', 'ALP3 - Datenstrukturen'),
+ ('alp4', 'ALP4 - Nichtsequentielle Programmierung'),
+ ('alp5', 'ALP5 - Netzprogrammierung'),
+ ('ti1', 'TI1 - Grundlagen der Technischen Informatik'),
+ ('ti2', 'TI2 - Rechnerarchitektur'),
+ ('ti3', 'TI3 - Betriebs- und Kommunikationssysteme'),
+ ('mafi1', 'MafI1 - Logik und Diskrete Mathematik'),
+ ('mafi2', 'MafI2 - Analysis'),
+ ('mafi3', 'MafI3 - Lineare Algebra'),
+ ('gti', 'Grundlagen der Theoretischen Informatik'),
+ ('dbs', 'Datenbanksysteme'),
+ ('swt', 'Softwaretechnik'),
+ ('aws', 'Anwendungssysteme')
+ ]
+
+TERM_START_YEAR = 1999
+YEARS = [(str(x),x) for x in xrange(date.today().year, TERM_START_YEAR, -1)]
+
+class UploadForm(Form):
+ exam = FileField('Klausur', validators=[file_required()])
+ module = SelectField(
+ 'Kurs',
+ validators=[Required()],
+ choices = MODULES
+ )
+ year = SelectField(
+ 'Jahr',
+ validators=[],
+ choices = YEARS
+ )
+
+ def validate_exam(form, field):
+ ext = map(lambda x: field.data.filename.endswith(x), ALLOWED_EXTENSIONS)
+ if not any(ext):
+ raise ValidationError('Invalid file type')
+
+ if field.data.content_length > app.config['MAX_CONTENT_LENGTH']:
+ raise ValidationError('File is too big')
def allowed_file(filename):
@@ -20,6 +64,27 @@ def allowed_file(filename):
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
+@app.route('/upload', methods=['GET', 'POST'])
+def upload():
+ form = UploadForm()
+
+ if form.validate_on_submit():
+ module = dict(MODULES)[form.module.data]
+ year = form.year.data
+ filename = secure_filename(form.exam.data.filename)
+ path = os.path.join(module,year,filename).encode('ascii')
+
+ try:
+ oid = fit.add_file(form.exam.data.stream.getvalue(), path)
+ except:
+ oid = fit.add_file(form.exam.data.stream.read(), path)
+
+ flash("File %s saved." % filename)
+
+ return redirect(url_for('list', module = module))
+
+ return render_template('upload.html', form = form)
+
@app.route('/files/')
def show(oid):
data = fit.get_file(oid)
@@ -28,68 +93,18 @@ def show(oid):
return data, 200, header
-@app.route('/search')
-def search():
- params = request.args.get('search', '')
- tags = '/'.join(params.split(','))
- if tags:
- return redirect(url_for('list', tag=tags))
+@app.route('/modules')
+@app.route('/modules/')
+def list(module=None):
+ if module:
+ return render_template('module_show.html', module=fit.get_module(module))
- return redirect(url_for('list'))
-
-
-@app.route('/all')
-@app.route('/tags/')
-def list(tag=None):
- get_files = lambda files: map(
- lambda x: (x[0], x[1], fit.get_tags_for_file(x[1])),
- files
- )
-
- if tag:
- params = tag.split('/')
- return render_template(
- 'files.html',
- files=get_files(fit.get_files_for_tags(params)),
- tags=params
- )
-
- return render_template(
- 'files.html',
- files=get_files(fit.get_all_files())
- )
+ return render_template('module_list.html', modules=fit.get_modules())
@app.route('/', methods=['GET', 'POST'])
def index():
- if request.method == 'POST':
-
- params = request.form['tags']
- tags = params.split(',') if len(params) else []
-
- saved_files = []
- for key, upload in request.files.iteritems():
- if upload and allowed_file(upload.filename):
- filename = secure_filename(upload.filename)
-
- git_path = 'files/%s' % filename
-
- try:
- oid = fit.add_file(upload.stream.getvalue(), git_path, tags)
- except:
- oid = fit.add_file(upload.stream.read(), git_path, tags)
-
- saved_files.append(url_for('show', oid=oid))
-
- flash("File %s saved." % filename)
-
- return jsonify(jsonrpc='2.0',url=url_for('show', oid=oid))
-
- return render_template(
- 'index.html',
- tags=fit.get_all_tags()
- )
-
+ return list()
if __name__ == "__main__":
app.run()
diff --git a/fit.py b/fit.py
index ce5b3d7..f34627f 100644
--- a/fit.py
+++ b/fit.py
@@ -10,60 +10,62 @@ class Fit:
self.repo = Repository(path)
def _insert_node(self, node_oid, path, root_oid):
- filename = os.path.basename(path)
-
if root_oid:
root = self.repo.TreeBuilder(root_oid)
current_node = self.repo[root_oid]
else:
root = self.repo.TreeBuilder()
- current_node = root.write()
+ current_node = self.repo[root.write()]
- entries = path.split('/')[:-1]
- entries.reverse()
+ # entire path
+ dir_path = path.split(os.sep)[:-1]
# search for existing nodes in path
- tree_path = [('/', root)]
- while len(entries) > 0:
- if entries[-1] not in current_node:
+ existing_builders = [(os.sep, root)]
+ for dir_entry in dir_path:
+ try:
+ new_oid = current_node[dir_entry].oid
+ current_node = self.repo[new_oid]
+
+ existing_builders.append((
+ dir_entry, self.repo.TreeBuilder(current_node)
+ ))
+ except KeyError:
break
- entry = entries.pop()
- current_node = self.repo[current_node[entry].oid]
- tree_path.append((
- entry, self.repo.TreeBuilder(current_node.oid)
- ))
-
- # create node
- if len(entries) > 0:
- tmp = self.repo.TreeBuilder()
- elif len(tree_path) > 0:
- tmp = tree_path[-1][1]
+ # directories to create
+ new_path = dir_path[len(existing_builders)-1:]
+
+ # create blob
+ if len(new_path) > 0:
+ builder = self.repo.TreeBuilder()
else:
- tmp = root
+ builder = existing_builders[-1][1]
- tmp.insert(filename, node_oid, 0100644)
- current = tmp.write()
+ filename = os.path.basename(path)
+ builder.insert(filename, node_oid, 0100644)
+ current_tree_oid = builder.write()
+ new_builders = [(filename, builder)]
+ pre = filename
# create new nodes bottom-up for our node
- size = len(entries)
- for i, entry in enumerate(entries):
- if i < (size - 1):
- tmp = self.repo.TreeBuilder()
- tmp.insert(entry, current, 040000)
- current = tmp.write()
- else:
- tree_path.append((entry, None))
+ if len(new_path) > 0:
+ pre = new_path.pop(0)
+ for entry in reversed(new_path):
+ builder = self.repo.TreeBuilder()
+ builder.insert(entry, current_tree_oid, 040000)
+ current_tree_oid = builder.write()
+ new_builders.append((
+ entry, self.repo.TreeBuilder(current_tree_oid)
+ ))
# connect existing nodes with created nodes
- pre = tree_path.pop()[0]
- tree_path.reverse()
- for name, builder in tree_path:
- builder.insert(pre, current, 040000)
- current = builder.write()
+ for name, builder in reversed(existing_builders):
+ builder.insert(pre, current_tree_oid, 040000)
+ current_tree_oid = builder.write()
pre = name
- return current
+ return current_tree_oid
def _get_last_commit(self):
@@ -71,7 +73,7 @@ class Fit:
return self.repo[head.oid]
- def add_file(self, data, git_path, tags):
+ def add_file(self, data, path):
try:
commit = self._get_last_commit()
parents = [commit.oid]
@@ -83,92 +85,66 @@ class Fit:
blob_oid = self.repo.create_blob(data)
- root = self._insert_node(blob_oid, git_path, root)
- filename = os.path.basename(git_path)
- for tag in tags:
- name = 'tags/%s/%s' % (tag, filename)
- root = self._insert_node(blob_oid, name, root)
-
+ tree = self._insert_node(blob_oid, path, root)
author = committer = Signature('Fit', 'Fit@fit.de', int(time.time()), 120)
commit = self.repo.create_commit(
'HEAD',
author,
committer,
- 'added %s' % git_path,
- root,
+ 'added %s' % path,
+ tree,
parents
)
return b2a_hex(blob_oid).decode('ascii')
- def get_all_files(self):
- try:
- commit = self._get_last_commit()
- files = commit.tree['files'].to_object()
- return ((x.name, x.hex) for x in files)
- except:
- return []
-
-
- def get_file(self, oid):
- return self.repo[oid].data
-
-
- def get_all_tags(self):
+ def _list(self, path=None):
try:
commit = self._get_last_commit()
- tags = commit.tree['tags'].to_object()
- return ((x.name, x.hex) for x in tags)
- except:
- return []
-
-
- def get_files_for_tags(self, tags):
- try:
- commit = self._get_last_commit()
- root = commit.tree['tags'].to_object()
-
- def get_obj(x):
- try:
- return root[x.encode('ascii')].to_object()
- except KeyError:
- return []
+ tree = commit.tree
- entries = [get_obj(x) for x in tags]
+ if path:
+ for p in path.split('/'):
+ tree = tree[p].to_object()
- def merge(list_to_merge):
- for sublist in list_to_merge:
- for elem in sublist:
- yield elem
-
- # return only entries which have all tags
- search = collections.Counter([(x.name, x.hex) for x in merge(entries)])
- return [i for i in search if search[i]>=len(tags)]
+ return ((x.name, x.hex) for x in tree)
except:
return []
+ def get_modules(self):
+ return (x[0] for x in self._list())
- def get_tags_for_file(self, oid):
- tags = []
- for name, tag_oid in self.get_all_tags():
- for entry in self.repo[tag_oid]:
- if b2a_hex(entry.oid).decode('ascii') == oid:
- tags.append(name)
-
- return tags
-
+ def get_module(self, module):
+ years = self._list(module)
+ return [(year[0], self._list(os.path.join(module, year[0]))) for year in years]
-#fit = Fit('tmp/fit')
-#fit.add_file('main.c', 'files/main.c', ['alp2', '2007'])
+#fit = Fit('static/fit.git')
+#fit.add_file('main.c', 'alp3/2007/main.c')
+#fit.add_file('main.c', 'alp3/2008/main.c')
+#fit.add_file('main.c', 'alp3/2009/main.c')
+#
+#print('All modules')
+#for name in fit.get_modules():
+# print('\t' + name)
+#
+#print('Module: alp4')
+#for (year,items) in fit.get_module('alp4'):
+# print('\t' + year)
+# for name in items:
+# print('\t\t' + name)
+#
+#for name, oid in fit.list('tags/aws'):
+# print(name)
#
#print("All files")
-#for name, oid in fit.get_all_files():
-# tags = ','.join(map(lambda x: x[0], fit.get_file_with_tags(oid)))
-# print("* %s (%s)" % (name, tags))
-# #print(fit.get_file(oid) + "\n")
+#for name, oid in fit.list_directories():
+# print(name)
+ #tags = ','.join(map(lambda x: x[0], fit.get_file_with_tags(oid)))
+ #print("* %s (%s)" % (name, tags))
+ #print(fit.get_file(oid) + "\n")
#
#print("\nAll tags")
#for name, oid in fit.get_all_tags():
diff --git a/static/plupload/js/i18n/cs.js b/static/plupload/js/i18n/cs.js
deleted file mode 100644
index 1ee5d5f..0000000
--- a/static/plupload/js/i18n/cs.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// .po file like language pack
-plupload.addI18n({
- 'Select files' : 'Vyberte soubory',
- 'Add files to the upload queue and click the start button.' : 'Přidejte soubory do fronty a pak spusťte nahrávání.',
- 'Filename' : 'Název souboru',
- 'Status' : 'Status',
- 'Size' : 'Velikost',
- 'Add Files' : 'Přidat soubory',
- 'Stop current upload' : 'Zastavit nahrávání',
- 'Start uploading queue' : 'Spustit frontu nahrávání',
- 'Drag files here.' : 'Sem přetáhněte soubory.',
- 'Start Upload': 'Spustit nahrávání',
- 'Uploaded %d/%d files': 'Nahráno %d/%d souborů'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/da.js b/static/plupload/js/i18n/da.js
deleted file mode 100644
index fc95896..0000000
--- a/static/plupload/js/i18n/da.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// .po file like language pack
-plupload.addI18n({
- 'Select files' : 'Vælg filer',
- 'Add files to the upload queue and click the start button.' : 'Tilføj filer til køen, og tryk på start.',
- 'Filename' : 'Filnavn',
- 'Status' : 'Status',
- 'Size' : 'Størrelse',
- 'Add files' : 'Tilføj filer',
- 'Stop current upload' : 'Stop upload',
- 'Start uploading queue' : 'Start upload',
- 'Drag files here.' : 'Træk filer her.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/de.js b/static/plupload/js/i18n/de.js
deleted file mode 100644
index 4c4de07..0000000
--- a/static/plupload/js/i18n/de.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// German
-plupload.addI18n({
- 'Select files' : 'Dateien hochladen',
- 'Add files to the upload queue and click the start button.' : 'Dateien hinzufügen und auf \'Hochladen\' klicken.',
- 'Filename' : 'Dateiname',
- 'Status' : 'Status',
- 'Size' : 'Größe',
- 'Add files' : 'Dateien', // hinzufügen',
- 'Stop current upload' : 'Aktuelles Hochladen stoppen',
- 'Start uploading queue' : 'Hochladen starten',
- 'Uploaded %d/%d files': '%d/%d Dateien sind hochgeladen',
- 'N/A' : 'Nicht verfügbar',
- 'Drag files here.' : 'Ziehen Sie die Dateien hier hin',
- 'File extension error.': 'Fehler bei Dateiendung',
- 'File size error.': 'Fehler bei Dateigröße',
- 'Init error.': 'Initialisierungsfehler',
- 'HTTP Error.': 'HTTP-Fehler',
- 'Security error.': 'Sicherheitsfehler',
- 'Generic error.': 'Typischer Fehler',
- 'IO error.': 'Ein/Ausgabe-Fehler',
- 'Stop Upload': 'Hochladen stoppen',
- 'Start upload': 'Hochladen',
- '%d files queued': '%d Dateien in der Warteschlange'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/el.js b/static/plupload/js/i18n/el.js
deleted file mode 100644
index aafbaf1..0000000
--- a/static/plupload/js/i18n/el.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Greek
-plupload.addI18n({
- 'Select files' : 'Επιλέξτε Αρχεία',
- 'Add files to the upload queue and click the start button.' : 'Προσθήκη αρχείων στην ουρά μεταφόρτωσης',
- 'Filename' : 'Όνομα αρχείου',
- 'Status' : 'Κατάσταση',
- 'Size' : 'Μέγεθος',
- 'Add Files' : 'Προσθέστε αρχεία',
- 'Stop current upload' : 'Διακοπή τρέχουσας μεταφόρτωσης',
- 'Start uploading queue' : 'Εκκίνηση μεταφόρτωσης ουράς αρχείων',
- 'Drag files here.' : 'Σύρετε αρχεία εδώ',
- 'Start Upload': 'Εκκίνηση μεταφόρτωσης',
- 'Uploaded %d/%d files': 'Ανέβηκαν %d/%d αρχεία'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/es.js b/static/plupload/js/i18n/es.js
deleted file mode 100644
index 2379421..0000000
--- a/static/plupload/js/i18n/es.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Spanish
-plupload.addI18n({
- 'Select files' : 'Elija archivos:',
- 'Add files to the upload queue and click the start button.' : 'Agregue archivos a la cola de subida y haga click en el boton de iniciar.',
- 'Filename' : 'Nombre de archivo',
- 'Status' : 'Estado',
- 'Size' : 'Tamaño',
- 'Add files' : 'Agregue archivos',
- 'Stop current upload' : 'Detener subida actual',
- 'Start uploading queue' : 'Iniciar subida de cola',
- 'Uploaded %d/%d files': 'Subidos %d/%d archivos',
- 'N/A' : 'No disponible',
- 'Drag files here.' : 'Arrastre archivos aquí',
- 'File extension error.': 'Error de extensión de archivo.',
- 'File size error.': 'Error de tamaño de archivo.',
- 'Init error.': 'Error de inicialización.',
- 'HTTP Error.': 'Error de HTTP.',
- 'Security error.': 'Error de seguridad.',
- 'Generic error.': 'Error genérico.',
- 'IO error.': 'Error de entrada/salida.',
- 'Stop Upload': 'Detener Subida.',
- 'Add Files': 'Agregar Archivos',
- 'Start Upload': 'Comenzar Subida.',
- '%d files queued': '%d archivos en cola.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/et.js b/static/plupload/js/i18n/et.js
deleted file mode 100644
index a4a5e3a..0000000
--- a/static/plupload/js/i18n/et.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Estonian translation, et.js
-plupload.addI18n({
- 'Select files' : 'Vali faile',
- 'Add files to the upload queue and click the start button.' : 'Lisa failid üleslaadimise järjekorda ja klõpsa alustamise nupule.',
- 'Filename' : 'Failinimi',
- 'Status' : 'Olek',
- 'Size' : 'Suurus',
- 'Add files' : 'Lisa faile',
- 'Stop current upload' : 'Praeguse üleslaadimise peatamine',
- 'Start uploading queue' : 'Järjekorras ootavate failide üleslaadimise alustamine',
- 'Drag files here.' : 'Lohista failid siia.',
- 'Start upload' : 'Alusta üleslaadimist',
- 'Uploaded %d/%d files': 'Üles laaditud %d/%d',
- 'Stop upload': 'Peata üleslaadimine',
- 'Start upload': 'Alusta üleslaadimist',
- '%d files queued': 'Järjekorras on %d faili',
- 'File: %s': 'Fail: %s',
- 'Close': 'Sulge',
- 'Using runtime: ': 'Kasutatakse varianti: ',
- 'File: %f, size: %s, max file size: %m': 'Fail: %f, suurus: %s, suurim failisuurus: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Üleslaadimise element saab vastu võtta ainult %d faili ühe korraga. Ülejäänud failid jäetakse laadimata.',
- 'Upload URL might be wrong or doesn\'t exist': 'Üleslaadimise URL võib olla vale või seda pole',
- 'Error: File too large: ': 'Viga: fail on liiga suur: ',
- 'Error: Invalid file extension: ': 'Viga: sobimatu faililaiend: ',
- 'File extension error.': 'Faililaiendi viga.',
- 'File size error.': 'Failisuuruse viga.',
- 'File count error.': 'Failide arvu viga.',
- 'Init error.': 'Lähtestamise viga.',
- 'HTTP Error.': 'HTTP ühenduse viga.',
- 'Security error.': 'Turvaviga.',
- 'Generic error.': 'Üldine viga.',
- 'IO error.': 'S/V (I/O) viga.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/fa.js b/static/plupload/js/i18n/fa.js
deleted file mode 100644
index af36e22..0000000
--- a/static/plupload/js/i18n/fa.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Persian
-plupload.addI18n({
- 'Select files' : 'انتخاب فایل',
- 'Add files to the upload queue and click the start button.' : 'اضافه کنید فایل ها را به صف آپلود و دکمه شروع را کلیک کنید.',
- 'Filename' : 'نام فایل',
- 'Status' : 'وضعیت',
- 'Size' : 'سایز',
- 'Add Files' : 'افزودن فایل',
- 'Stop Upload' : 'توقف انتقال',
- 'Start Upload' : 'شروع انتقال',
- 'Add files' : 'افزودن فایل',
- 'Add files.' : 'افزودن فایل',
- 'Stop current upload' : 'توقف انتقال جاری',
- 'Start uploading queue' : 'شروع صف انتقال',
- 'Stop upload' : 'توقف انتقال',
- 'Start upload' : 'شروع انتقال',
- 'Uploaded %d/%d files': 'منتقل شد %d/%d از فایلها',
- 'N/A' : 'N/A',
- 'Drag files here.' : 'بکشید فایل ها رو به اینجا',
- 'File extension error.': 'خطا پیشوند فایل',
- 'File size error.': 'خطای سایز فایل',
- 'File count error.': 'خطای تعداد فایل',
- 'Init error.': 'خطا در استارت اسکریپت',
- 'HTTP Error.': 'HTTP خطای',
- 'Security error.': 'خطای امنیتی',
- 'Generic error.': 'خطای عمومی',
- 'IO error.': 'IO خطای',
- 'File: %s': ' فایل ها : %s',
- 'Close': 'بستن',
- '%d files queued': '%d فایل در صف',
- 'Using runtime: ': 'استفاده میکنید از : ',
- 'File: %f, size: %s, max file size: %m': فایل: %f, سایز: %s, بزرگترین سایز فایل: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'عنصر بارگذار فقط %d فایل رو در یک زمان می پذیرد. سایر فایل ها مجرد از این موضوع هستند.',
- 'Upload URL might be wrong or doesn\'t exist': 'آدرس آپلود اشتباه می باشد یا وجود ندارد',
- 'Error: File too large: ': 'خطا: فایل حجیم است :: ',
- 'Error: Invalid file extension: ': 'خطا پسوند فایل معتبر نمی باشد : '
-});
diff --git a/static/plupload/js/i18n/fi.js b/static/plupload/js/i18n/fi.js
deleted file mode 100644
index 12a639e..0000000
--- a/static/plupload/js/i18n/fi.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// .fi file like language pack
-plupload.addI18n({
- 'Select files' : 'Valitse tiedostoja',
- 'Add files to the upload queue and click the start button.' : 'Lisää tiedostoja latausjonoon ja klikkaa aloita-nappia.',
- 'Filename' : 'Tiedostonimi',
- 'Status' : 'Tila',
- 'Size' : 'Koko',
- 'Add files' : 'Lisää tiedostoja',
- 'Stop current upload' : 'Pysäytä nykyinen lataus',
- 'Start uploading queue' : 'Aloita jonon lataus',
- 'Drag files here.' : 'Raahaa tiedostot tänne.',
- 'Start upload' : 'Aloita lataus',
- 'Uploaded %d/%d files': 'Ladattu %d/%d tiedostoa',
- 'Stop upload': 'Pysäytä lataus',
- 'Start upload': 'Aloita lataus',
- '%d files queued': '%d tiedostoa jonossa',
- 'File: %s': 'Tiedosto: %s',
- 'Close': 'Sulje',
- 'Using runtime: ': 'Käytetään ajonaikaista: ',
- 'File: %f, size: %s, max file size: %m': 'Tiedosto: %f, koko: %s, maksimi tiedostokoko: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Latauselementti sallii ladata vain %d tiedosto(a) kerrallaan. Ylimääräiset tiedostot ohitettiin.',
- 'Upload URL might be wrong or doesn\'t exist': 'Lataus URL saattaa olla väärin tai ei ole olemassa',
- 'Error: File too large: ': 'Virhe: Tiedosto liian suuri: ',
- 'Error: Invalid file extension: ': 'Virhe: Kelpaamaton tiedostopääte: ',
- 'File extension error.': 'Tiedostopäätevirhe.',
- 'File size error.': 'Tiedostokokovirhe.',
- 'File count error.': 'Tiedostolaskentavirhe.',
- 'Init error.': 'Init virhe.',
- 'HTTP Error.': 'HTTP virhe.',
- 'Security error.': 'Tietoturvavirhe.',
- 'Generic error.': 'Yleinen virhe.',
- 'IO error.': 'I/O virhe.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/fr-ca.js b/static/plupload/js/i18n/fr-ca.js
deleted file mode 100644
index 61aba23..0000000
--- a/static/plupload/js/i18n/fr-ca.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// French-Canadian
-plupload.addI18n({
- 'Select files' : 'Sélectionnez les fichiers',
- 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file d\'attente et appuyez sur le bouton démarrer.',
- 'Filename' : 'Nom du fichier',
- 'Status' : 'Statut',
- 'Size' : 'Taille',
- 'Add files' : 'Ajouter Fichiers',
- 'Stop current upload' : 'Arrêter le téléversement actuel',
- 'Start uploading queue' : 'Démarrer le téléversement',
- 'Uploaded %d/%d files': '%d/%d fichiers envoyés',
- 'N/A' : 'Non applicable',
- 'Drag files here.' : 'Glisser-déposer les fichiers ici',
- 'File extension error.': 'Erreur d\'extension de fichier',
- 'File size error.': 'Erreur de taille de fichier',
- 'Init error.': 'Erreur d\'initialisation',
- 'HTTP Error.': 'Erreur HTTP',
- 'Security error.': 'Erreur de sécurité',
- 'Generic error.': 'Erreur commune',
- 'IO error.': 'Erreur E/S',
- 'Stop Upload': 'Arrêter le téléversement',
- 'Add Files': 'Ajouter des fichiers',
- 'Start upload': 'Démarrer le téléversement',
- '%d files queued': '%d fichiers en attente',
- 'File: %s':'Fichier: %s',
- 'Close':'Fermer',
- 'Using runtime:':'Moteur logiciel:',
- 'File: %f, size: %s, max file size: %m':'Fichier: %f, poids: %s, poids maximal: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.':'La file accepte %d fichier(s) à la fois. Les fichiers en trop sont ignorés',
- 'Upload URL might be wrong or doesn\'t exist':'L\'URL de téléversement est erroné ou inexistant',
- 'Error: File to large: ':'Fichier trop volumineux: ',
- 'Error: Invalid file extension: ':'Extension de fichier invalide: ',
- 'File size error.':'Erreur de taile de fichier',
- 'File count error.':'Erreur de décompte des fichiers'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/fr.js b/static/plupload/js/i18n/fr.js
deleted file mode 100644
index 53dbe28..0000000
--- a/static/plupload/js/i18n/fr.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// French
-plupload.addI18n({
- 'Select files' : 'Sélectionnez les fichiers',
- 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file et appuyez sur le bouton démarrer.',
- 'Filename' : 'Nom de fichier',
- 'Status' : 'Status',
- 'Size' : 'Taille',
- 'Add files' : 'Ajouter Fichiers',
- 'Stop current upload' : 'Arrêter l\'envoi en cours',
- 'Start uploading queue' : 'Démarrer l\'envoi',
- 'Uploaded %d/%d files': '%d/%d fichiers envoyés',
- 'N/A' : 'Non applicable',
- 'Drag files here.' : 'Déposer les fichiers ici.',
- 'File extension error.': 'Erreur extension fichier',
- 'File size error.': 'Erreur taille fichier.',
- 'Init error.': 'Erreur d\'initialisation.',
- 'HTTP Error.': 'Erreur HTTP.',
- 'Security error.': 'Erreur de sécurité.',
- 'Generic error.': 'Erreur générique.',
- 'IO error.': 'Erreur E/S.',
- 'Stop Upload': 'Arrêter les envois.',
- 'Add Files': 'Ajouter des fichiers',
- 'Start Upload': 'Démarrer les envois.',
- '%d files queued': '%d fichiers en attente.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/hr.js b/static/plupload/js/i18n/hr.js
deleted file mode 100644
index 084be51..0000000
--- a/static/plupload/js/i18n/hr.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// Croatian
-plupload.addI18n({
- 'Select files': 'Izaberite datoteke:',
- 'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.',
- 'Filename': 'Ime datoteke',
- 'Status': 'Status',
- 'Size': 'Veličina',
- 'Add files': 'Dodajte datoteke',
- 'Stop current upload': 'Zaustavi trenutan upload',
- 'Start uploading queue': 'Pokreni Upload',
- 'Uploaded %d/%d files': 'Uploadano %d/%d datoteka',
- 'N/A': 'N/A',
- 'Drag files here.': 'Dovucite datoteke ovdje',
- 'File extension error.': 'Greška ekstenzije datoteke.',
- 'File size error.': 'Greška veličine datoteke.',
- 'Init error.': 'Greška inicijalizacije.',
- 'HTTP Error.': 'HTTP greška.',
- 'Security error.': 'Sigurnosna greška.',
- 'Generic error.': 'Generička greška.',
- 'IO error.': 'I/O greška.',
- 'Stop Upload': 'Zaustavi upload.',
- 'Add Files': 'Dodaj datoteke',
- 'Start Upload': 'Pokreni upload.',
- '%d files queued': '%d datoteka na čekanju.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/hu.js b/static/plupload/js/i18n/hu.js
deleted file mode 100644
index 87070ba..0000000
--- a/static/plupload/js/i18n/hu.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Hungarian
-plupload.addI18n({
- 'Select files' : 'Fájlok kiválasztása',
- 'Add files to the upload queue and click the start button.' : 'Válaszd ki a fájlokat, majd kattints az Indítás gombra.',
- 'Filename' : 'Fájlnév',
- 'Status' : 'Állapot',
- 'Size' : 'Méret',
- 'Add files' : 'Hozzáadás',
- 'Stop current upload' : 'Jelenlegi feltöltés megszakítása',
- 'Start uploading queue' : 'Várakozási sor feltöltésének indítása',
- 'Uploaded %d/%d files': 'Feltöltött fájlok: %d/%d',
- 'N/A': 'Nem elérhető',
- 'Drag files here.' : 'Húzd ide a fájlokat.',
- 'Stop upload': 'Feltöltés megszakítása',
- 'Start upload': 'Indítás',
- '%d files queued': '%d fájl sorbaállítva',
- 'File: %s': 'Fájl: %s',
- 'Close': 'Bezárás',
- 'Using runtime: ': 'Használt runtime: ',
- 'File: %f, size: %s, max file size: %m': 'Fájl: %f, méret: %s, maximális fájlméret: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.',
- 'Upload URL might be wrong or doesn\'t exist': 'A megadott URL hibás vagy nem létezik',
- 'Error: File too large: ': 'Hiba: A fájl túl nagy: ',
- 'Error: Invalid file extension: ': 'Hiba: Érvénytelen fájlkiterjesztés: ',
- 'File extension error.': 'Hibás fájlkiterjesztés.',
- 'File size error.': 'Hibás fájlméret.',
- 'File count error.': 'A fájlok számával kapcsolatos hiba.',
- 'Init error.': 'Init hiba.',
- 'HTTP Error.': 'HTTP hiba.',
- 'Security error.': 'Biztonsági hiba.',
- 'Generic error.': 'Általános hiba.',
- 'IO error.': 'I/O hiba.'
-});
diff --git a/static/plupload/js/i18n/it.js b/static/plupload/js/i18n/it.js
deleted file mode 100644
index 891e4fb..0000000
--- a/static/plupload/js/i18n/it.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Italian
-plupload.addI18n({
- 'Select files' : 'Seleziona i files',
- 'Add files to the upload queue and click the start button.' : 'Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.',
- 'Filename' : 'Nome file',
- 'Status' : 'Stato',
- 'Size' : 'Dimensione',
- 'Add Files' : 'Aggiungi file',
- 'Stop current upload' : 'Interrompi il caricamento',
- 'Start uploading queue' : 'Avvia il caricamento',
- 'Uploaded %d/%d files': 'Caricati %d/%d file',
- 'N/A' : 'N/D',
- 'Drag files here.' : 'Trascina i file qui.',
- 'File extension error.': 'Errore estensione file.',
- 'File size error.': 'Errore dimensione file.',
- 'Init error.': 'Errore inizializzazione.',
- 'HTTP Error.': 'Errore HTTP.',
- 'Security error.': 'Errore sicurezza.',
- 'Generic error.': 'Errore generico.',
- 'IO error.': 'Errore IO.',
- 'Stop Upload': 'Ferma Upload',
- 'Start Upload': 'Inizia Upload',
- '%d files queued': '%d file in lista'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/ja.js b/static/plupload/js/i18n/ja.js
deleted file mode 100644
index 02c85ae..0000000
--- a/static/plupload/js/i18n/ja.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Japanese
-plupload.addI18n({
- 'Select files' : 'ファイル選択',
- 'Add files to the upload queue and click the start button.' : 'ファイルをアップロードキューに追加してスタートボタンをクリックしてください',
- 'Filename' : 'ファイル名',
- 'Status' : 'ステータス',
- 'Size' : 'サイズ',
- 'Add Files' : 'ファイルを追加',
- 'Stop Upload' : 'アップロード停止',
- 'Start Upload' : 'アップロード',
- 'Add files' : 'ファイルを追加',
- 'Add files.' : 'ファイルを追加',
- 'Stop current upload' : '現在のアップロードを停止',
- 'Start uploading queue' : 'アップロード',
- 'Stop upload' : 'アップロード停止',
- 'Start upload' : 'アップロード',
- 'Uploaded %d/%d files': 'アップロード中 %d/%d ファイル',
- 'N/A' : 'N/A',
- 'Drag files here.' : 'ここにファイルをドラッグ',
- 'File extension error.': 'ファイル拡張子エラー',
- 'File size error.': 'ファイルサイズエラー',
- 'File count error.': 'ファイル数エラー',
- 'Init error.': 'イニシャライズエラー',
- 'HTTP Error.': 'HTTP エラー',
- 'Security error.': 'セキュリティエラー',
- 'Generic error.': 'エラー',
- 'IO error.': 'IO エラー',
- 'File: %s': 'ファイル: %s',
- 'Close': '閉じる',
- '%d files queued': '%d ファイルが追加されました',
- 'Using runtime: ': 'モード: ',
- 'File: %f, size: %s, max file size: %m': 'ファイル: %f, サイズ: %s, 最大ファイルサイズ: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'アップロード可能なファイル数は %d です。余分なファイルは削除されました',
- 'Upload URL might be wrong or doesn\'t exist': 'アップロード先の URL が存在しません',
- 'Error: File too large: ': 'エラー: サイズが大きすぎます: ',
- 'Error: Invalid file extension: ': 'エラー: 拡張子が許可されていません: '
-});
diff --git a/static/plupload/js/i18n/ko.js b/static/plupload/js/i18n/ko.js
deleted file mode 100644
index a2c5e66..0000000
--- a/static/plupload/js/i18n/ko.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// Republic of Korea
-plupload.addI18n({
- 'Select files' : '파일 선택',
- 'Add files to the upload queue and click the start button.' : '파일을 업로드 큐에 추가하여 시작 버튼을 클릭하십시오.',
- 'Filename' : '파일 이름',
- 'Status' : '상태',
- 'Size' : '크기',
- 'Add Files' : '파일 추가',
- 'Stop Upload': '업로드 중지',
- 'Start Upload': '업로드',
- 'Add files': '파일 추가',
- 'Stop current upload': '현재 업로드를 정지',
- 'Start uploading queue': '업로드',
- 'Stop upload': '업로드 중지',
- 'Start upload': '업로드',
- 'Uploaded % d / % d files': '업로드 중 % d / % d 파일',
- 'N / A': 'N / A',
- 'Drag files here': '여기에 파일을 드래그',
- 'File extension error': '파일 확장자 오류',
- 'File size error': '파일 크기 오류',
- 'File count error': '이미지 : 오류',
- 'Init error': '초기화 오류',
- 'HTTP Error': 'HTTP 오류',
- 'Security error': '보안 오류',
- 'Generic error': '오류',
- 'IO error': 'IO 오류',
- 'File : % s': '파일 % s',
- 'Close': '닫기',
- '% d files queued': '% d 파일이 추가되었습니다',
- 'Using runtime :': '모드',
- 'File : % f, size : % s, max file size : % m': '파일 : % f, 크기 : % s, 최대 파일 크기 : % m',
- 'Upload element accepts only % d file (s) at a time. Extra files were stripped': '업로드 가능한 파일의 수는 % d입니다. 불필요한 파일은 삭제되었습니다 ',
- 'Upload URL might be wrong or doesn \'t exist ':'업로드할 URL이 존재하지 않습니다 ',
- 'Error : File too large :': '오류 : 크기가 너무 큽니다',
- 'Error : Invalid file extension :': '오류 : 확장자가 허용되지 않습니다 :'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/lv.js b/static/plupload/js/i18n/lv.js
deleted file mode 100644
index 2a04045..0000000
--- a/static/plupload/js/i18n/lv.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// .lv file like language pack
-plupload.addI18n({
- 'Select files' : 'Izvēlieties failus',
- 'Add files to the upload queue and click the start button.' : 'Pieveinojiet failus rindai un klikšķiniet uz "Sākt augšupielādi" pogas.',
- 'Filename' : 'Faila nosaukums',
- 'Status' : 'Statuss',
- 'Size' : 'Izmērs',
- 'Add files' : 'Pievienot failus',
- 'Stop current upload' : 'Apturēt pašreizējo augšupielādi',
- 'Start uploading queue' : 'Sākt augšupielādi',
- 'Drag files here.' : 'Ievelciet failus šeit',
- 'Start upload' : 'Sākt augšupielādi',
- 'Uploaded %d/%d files': 'Augšupielādēti %d/%d faili',
- 'Stop upload': 'Pārtraukt augšupielādi',
- 'Start upload': 'Sākt augšupielādi',
- '%d files queued': '%d faili pievienoti rindai',
- 'File: %s': 'Fails: %s',
- 'Close': 'Aizvērt',
- 'Using runtime: ': 'Lieto saskarni: ',
- 'File: %f, size: %s, max file size: %m': 'Fails: %f, izmērs: %s, maksimālais faila izmērs: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Iespējams ielādēt tikai %d failus vienā reizē. Atlikušie faili netika pievienoti',
- 'Upload URL might be wrong or doesn\'t exist': 'Augšupielādes URL varētu būt nepareizs vai neeksistē',
- 'Error: File too large: ': 'Kļūda: Fails pārāk liels: ',
- 'Error: Invalid file extension: ': 'Kļūda: Nekorekts faila paplašinājums:',
- 'File extension error.': 'Faila paplašinājuma kļūda.',
- 'File size error.': 'Faila izmēra kļūda.',
- 'File count error.': 'Failu skaita kļūda',
- 'Init error.': 'Inicializācijas kļūda.',
- 'HTTP Error.': 'HTTP kļūda.',
- 'Security error.': 'Drošības kļūda.',
- 'Generic error.': 'Vispārēja rakstura kļūda.',
- 'IO error.': 'Ievades/Izvades kļūda.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/nl.js b/static/plupload/js/i18n/nl.js
deleted file mode 100644
index 8372c88..0000000
--- a/static/plupload/js/i18n/nl.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Dutch
-plupload.addI18n({
- 'Select files' : 'Selecteer bestand(en):',
- 'Add files to the upload queue and click the start button.' : 'Voeg bestanden toe aan de wachtrij en druk op \'Start\'.',
- 'Filename' : 'Bestandsnaam',
- 'Status' : 'Status',
- 'Size' : 'Grootte',
- 'Add files' : 'Voeg bestanden toe',
- 'Stop current upload' : 'Stop upload',
- 'Start uploading queue' : 'Start upload',
- 'Uploaded %d/%d files': '%d/%d bestanden ge-upload',
- 'N/A' : 'Niet beschikbaar',
- 'Drag files here.' : 'Sleep bestanden hierheen.',
- 'File extension error.': 'Ongeldig bestandstype.',
- 'File size error.': 'Bestandsgrootte Error.',
- 'Init error.': 'Initialisatie error.',
- 'HTTP Error.': 'HTTP Error.',
- 'Security error.': 'Beveiliging error.',
- 'Generic error.': 'Onbekende error.',
- 'IO error.': 'IO error.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/pl.js b/static/plupload/js/i18n/pl.js
deleted file mode 100644
index 3d1b9be..0000000
--- a/static/plupload/js/i18n/pl.js
+++ /dev/null
@@ -1,24 +0,0 @@
-plupload.addI18n({
-'Select files' : 'Wybierz pliki:',
-'Add files to the upload queue and click the start button.' : 'Dodaj pliki i kliknij \'Rozpocznij transfer\'.',
-'Filename' : 'Nazwa pliku',
-'Status' : 'Status',
-'Size' : 'Rozmiar',
-'Add files' : 'Dodaj pliki',
-'Stop current upload' : 'Przerwij aktualny transfer',
-'Start uploading queue' : 'Rozpocznij wysyłanie',
-'Uploaded %d/%d files': 'Wysłano %d/%d plików',
-'N/A' : 'Nie dostępne',
-'Drag files here.' : 'Przeciągnij tu pliki',
-'File extension error.': 'Nieobsługiwany format pliku.',
-'File size error.': 'Plik jest zbyt duży.',
-'Init error.': 'Błąd inicjalizacji.',
-'HTTP Error.': 'Błąd HTTP.',
-'Security error.': 'Błąd bezpieczeństwa.',
-'Generic error.': 'Błąd ogólny.',
-'IO error.': 'Błąd IO.',
-'Stop Upload': 'Przerwij transfer.',
-'Add Files': 'Dodaj pliki',
-'Start upload': 'Rozpocznij transfer.',
-'%d files queued': '%d plików w kolejce.'
-});
diff --git a/static/plupload/js/i18n/pt-br.js b/static/plupload/js/i18n/pt-br.js
deleted file mode 100644
index 9f34a64..0000000
--- a/static/plupload/js/i18n/pt-br.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// Brazilian Portuguese
-plupload.addI18n({
- 'Select files' : 'Escolha os arquivos',
- 'Add files to the upload queue and click the start button.' : 'Adicione os arquivos abaixo e clique no botão "Iniciar o envio".',
- 'Filename' : 'Nome do arquivo',
- 'Status' : 'Status',
- 'Size' : 'Tamanho',
- 'Add Files' : 'Adicionar arquivo(s)',
- 'Stop Upload' : 'Parar o envio',
- 'Start Upload' : 'Iniciar o envio',
- 'Add files' : 'Adicionar arquivo(s)',
- 'Add files.' : 'Adicionar arquivo(s)',
- 'Stop upload' : 'Parar o envio',
- 'Start upload' : 'Iniciar o envio',
- 'Uploaded %d/%d files': 'Enviado(s) %d/%d arquivo(s)',
- 'N/A' : 'N/D',
- 'Drag files here.' : 'Arraste os arquivos pra cá',
- 'File extension error.': 'Tipo de arquivo não permitido.',
- 'File size error.': 'Tamanho de arquivo não permitido.',
- 'File count error.': 'Erro na contagem dos arquivos',
- 'Init error.': 'Erro inicializando.',
- 'HTTP Error.': 'Erro HTTP.',
- 'Security error.': 'Erro de segurança.',
- 'Generic error.': 'Erro genérico.',
- 'IO error.': 'Erro de E/S.',
- 'File: %s': 'Arquivo: %s',
- 'Close': 'Fechar',
- '%d files queued': '%d arquivo(s)',
- 'Using runtime: ': 'Usando: ',
- 'File: %f, size: %s, max file size: %m': 'Arquivo: %f, tamanho: %s, máximo: %m',
- 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'Só são aceitos %d arquivos por vez. O que passou disso foi descartado.',
- 'Upload URL might be wrong or doesn\'t exist': 'URL de envio está errada ou não existe',
- 'Error: File too large: ': 'Erro: Arquivo muito grande: ',
- 'Error: Invalid file extension: ': 'Erro: Tipo de arquivo não permitido: '
-});
diff --git a/static/plupload/js/i18n/ro.js b/static/plupload/js/i18n/ro.js
deleted file mode 100644
index fd198f0..0000000
--- a/static/plupload/js/i18n/ro.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Romanian
-plupload.addI18n({
- 'Select files' : 'Selectare fişiere',
- 'Add files to the upload queue and click the start button.' : 'Adaugă fişiere în lista apoi apasă butonul \'Începe încărcare\'.',
- 'Filename' : 'Nume fişier',
- 'Status' : 'Stare',
- 'Size' : 'Mărime',
- 'Add files' : 'Adăugare fişiere',
- 'Stop current upload' : 'Întrerupe încărcarea curentă',
- 'Start uploading queue' : 'Începe incărcarea',
- 'Uploaded %d/%d files': 'Fişiere încărcate %d/%d',
- 'N/A' : 'N/A',
- 'Drag files here.' : 'Trage aici fişierele',
- 'File extension error.': 'Extensie fişier eronată',
- 'File size error.': 'Eroare dimensiune fişier',
- 'Init error.': 'Eroare iniţializare',
- 'HTTP Error.': 'Eroare HTTP',
- 'Security error.': 'Eroare securitate',
- 'Generic error.': 'Eroare generică',
- 'IO error.': 'Eroare Intrare/Ieşire',
- 'Stop Upload': 'Oprire încărcare',
- 'Start upload': 'Începe încărcare',
- '%d files queued': '%d fişiere listate'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/ru.js b/static/plupload/js/i18n/ru.js
deleted file mode 100644
index a78af8e..0000000
--- a/static/plupload/js/i18n/ru.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Russian
-plupload.addI18n({
- 'Select files' : 'Выберите файлы',
- 'Add files to the upload queue and click the start button.' : 'Добавьте файлы в очередь и нажмите кнопку "Загрузить файлы".',
- 'Filename' : 'Имя файла',
- 'Status' : 'Статус',
- 'Size' : 'Размер',
- 'Add files' : 'Добавить файлы',
- 'Stop current upload' : 'Остановить загрузку',
- 'Start uploading queue' : 'Загрузить файлы',
- 'Uploaded %d/%d files': 'Загружено %d из %d файлов',
- 'N/A' : 'N/D',
- 'Drag files here.' : 'Перетащите файлы сюда.',
- 'File extension error.': 'Неправильное расширение файла.',
- 'File size error.': 'Неправильный размер файла.',
- 'Init error.': 'Ошибка инициализации.',
- 'HTTP Error.': 'Ошибка HTTP.',
- 'Security error.': 'Ошибка безопасности.',
- 'Generic error.': 'Общая ошибка.',
- 'IO error.': 'Ошибка ввода-вывода.'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/sr.js b/static/plupload/js/i18n/sr.js
deleted file mode 100644
index 59dc0a9..0000000
--- a/static/plupload/js/i18n/sr.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Serbian
-plupload.addI18n({
- 'Select files' : 'Izaberite fajlove',
- 'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.',
- 'Filename' : 'Naziv fajla',
- 'Status' : 'Status',
- 'Size' : 'Veličina',
- 'Add Files' : 'Dodaj fajlove',
- 'Stop current upload' : 'Zaustavi upload',
- 'Start uploading queue' : 'Počni upload',
- 'Drag files here.' : 'Prevucite fajlove ovde.',
- 'Start Upload': 'Počni upload',
- 'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova'
-});
\ No newline at end of file
diff --git a/static/plupload/js/i18n/sv.js b/static/plupload/js/i18n/sv.js
deleted file mode 100644
index 11c7524..0000000
--- a/static/plupload/js/i18n/sv.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// .po file like language pack
-plupload.addI18n({
- 'Select files' : 'Välj filer',
- 'Add files to the upload queue and click the start button.' : 'Lägg till filer till kön och tryck på start.',
- 'Filename' : 'Filnamn',
- 'Status' : 'Status',
- 'Size' : 'Storlek',
- 'Add files' : 'Lägg till filer',
- 'Stop current upload' : 'Stoppa uppladdningen',
- 'Start uploading queue' : 'Starta uppladdningen',
- 'Drag files here.' : 'Dra filer hit'
-});
\ No newline at end of file
diff --git a/static/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css b/static/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css
deleted file mode 100644
index 8581fdd..0000000
--- a/static/plupload/js/jquery.plupload.queue/css/jquery.plupload.queue.css
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- Plupload
-------------------------------------------------------------------- */
-
-.plupload_button {
- display: -moz-inline-box; /* FF < 3*/
- display: inline-block;
- font: normal 12px sans-serif;
- text-decoration: none;
- color: #42454a;
- border: 1px solid #bababa;
- padding: 2px 8px 3px 20px;
- margin-right: 4px;
- background: #f3f3f3 url('../img/buttons.png') no-repeat 0 center;
- outline: 0;
-
- /* Optional rounded corners for browsers that support it */
- -moz-border-radius: 3px;
- -khtml-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-.plupload_button:hover {
- color: #000;
- text-decoration: none;
-}
-
-.plupload_disabled, a.plupload_disabled:hover {
- color: #737373;
- border-color: #c5c5c5;
- background: #ededed url('../img/buttons-disabled.png') no-repeat 0 center;
- cursor: default;
-}
-
-.plupload_add {
- background-position: -181px center;
-}
-
-.plupload_wrapper {
- font: normal 11px Verdana,sans-serif;
- width: 100%;
-}
-
-.plupload_container {
- padding: 8px;
- background: url('../img/transp50.png');
- /*-moz-border-radius: 5px;*/
-}
-
-.plupload_container input {
- border: 1px solid #DDD;
- font: normal 11px Verdana,sans-serif;
- width: 98%;
-}
-
-.plupload_header {background: #2A2C2E url('../img/backgrounds.gif') repeat-x;}
-.plupload_header_content {
- background: url('../img/backgrounds.gif') no-repeat 0 -317px;
- min-height: 56px;
- padding-left: 60px;
- color: #FFF;
-}
-.plupload_header_title {
- font: normal 18px sans-serif;
- padding: 6px 0 3px;
-}
-.plupload_header_text {
- font: normal 12px sans-serif;
-}
-
-.plupload_filelist {
- margin: 0;
- padding: 0;
- list-style: none;
-}
-
-.plupload_scroll .plupload_filelist {
- height: 185px;
- background: #F5F5F5;
- overflow-y: scroll;
-}
-
-.plupload_filelist li {
- padding: 10px 8px;
- background: #F5F5F5 url('../img/backgrounds.gif') repeat-x 0 -156px;
- border-bottom: 1px solid #DDD;
-}
-
-.plupload_filelist_header, .plupload_filelist_footer {
- background: #DFDFDF;
- padding: 8px 8px;
- color: #42454A;
-}
-.plupload_filelist_header {
- border-top: 1px solid #EEE;
- border-bottom: 1px solid #CDCDCD;
-}
-
-.plupload_filelist_footer {border-top: 1px solid #FFF; height: 22px; line-height: 20px; vertical-align: middle;}
-.plupload_file_name {float: left; overflow: hidden}
-.plupload_file_status {color: #777;}
-.plupload_file_status span {color: #42454A;}
-.plupload_file_size, .plupload_file_status, .plupload_progress {
- float: right;
- width: 80px;
-}
-.plupload_file_size, .plupload_file_status, .plupload_file_action {text-align: right;}
-
-.plupload_filelist .plupload_file_name {width: 205px}
-
-.plupload_file_action {
- float: right;
- width: 16px;
- height: 16px;
- margin-left: 15px;
-}
-
-.plupload_file_action * {
- display: none;
- width: 16px;
- height: 16px;
-}
-
-li.plupload_uploading {background: #ECF3DC url('../img/backgrounds.gif') repeat-x 0 -238px;}
-li.plupload_done {color:#AAA}
-
-li.plupload_delete a {
- background: url('../img/delete.gif');
-}
-
-li.plupload_failed a {
- background: url('../img/error.gif');
- cursor: default;
-}
-
-li.plupload_done a {
- background: url('../img/done.gif');
- cursor: default;
-}
-
-.plupload_progress, .plupload_upload_status {
- display: none;
-}
-
-.plupload_progress_container {
- margin-top: 3px;
- border: 1px solid #CCC;
- background: #FFF;
- padding: 1px;
-}
-.plupload_progress_bar {
- width: 0px;
- height: 7px;
- background: #CDEB8B;
-}
-
-.plupload_scroll .plupload_filelist_header .plupload_file_action, .plupload_scroll .plupload_filelist_footer .plupload_file_action {
- margin-right: 17px;
-}
-
-/* Floats */
-
-.plupload_clear,.plupload_clearer {clear: both;}
-.plupload_clearer, .plupload_progress_bar {
- display: block;
- font-size: 0;
- line-height: 0;
-}
-
-li.plupload_droptext {
- background: transparent;
- text-align: center;
- vertical-align: middle;
- border: 0;
- line-height: 165px;
-}
diff --git a/static/plupload/js/jquery.plupload.queue/img/backgrounds.gif b/static/plupload/js/jquery.plupload.queue/img/backgrounds.gif
deleted file mode 100644
index 39e33eb..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/backgrounds.gif and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/buttons-disabled.png b/static/plupload/js/jquery.plupload.queue/img/buttons-disabled.png
deleted file mode 100644
index afa11af..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/buttons-disabled.png and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/buttons.png b/static/plupload/js/jquery.plupload.queue/img/buttons.png
deleted file mode 100644
index 153e738..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/buttons.png and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/delete.gif b/static/plupload/js/jquery.plupload.queue/img/delete.gif
deleted file mode 100644
index 78ca8b3..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/delete.gif and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/done.gif b/static/plupload/js/jquery.plupload.queue/img/done.gif
deleted file mode 100644
index 29f3ed7..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/done.gif and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/error.gif b/static/plupload/js/jquery.plupload.queue/img/error.gif
deleted file mode 100644
index 4682b63..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/error.gif and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/throbber.gif b/static/plupload/js/jquery.plupload.queue/img/throbber.gif
deleted file mode 100644
index 4ae8b16..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/throbber.gif and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/img/transp50.png b/static/plupload/js/jquery.plupload.queue/img/transp50.png
deleted file mode 100644
index eb0efe1..0000000
Binary files a/static/plupload/js/jquery.plupload.queue/img/transp50.png and /dev/null differ
diff --git a/static/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js b/static/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js
deleted file mode 100644
index 6df6e4d..0000000
--- a/static/plupload/js/jquery.plupload.queue/jquery.plupload.queue.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(c){var d={};function a(e){return plupload.translate(e)||e}function b(f,e){e.contents().each(function(g,h){h=c(h);if(!h.is(".plupload")){h.remove()}});e.prepend('')}c.fn.pluploadQueue=function(e){if(e){this.each(function(){var j,i,k;i=c(this);k=i.attr("id");if(!k){k=plupload.guid();i.attr("id",k)}j=new plupload.Uploader(c.extend({dragdrop:true,container:k},e));d[k]=j;function h(l){var n;if(l.status==plupload.DONE){n="plupload_done"}if(l.status==plupload.FAILED){n="plupload_failed"}if(l.status==plupload.QUEUED){n="plupload_delete"}if(l.status==plupload.UPLOADING){n="plupload_uploading"}var m=c("#"+l.id).attr("class",n).find("a").css("display","block");if(l.hint){m.attr("title",l.hint)}}function f(){c("span.plupload_total_status",i).html(j.total.percent+"%");c("div.plupload_progress_bar",i).css("width",j.total.percent+"%");c("span.plupload_upload_status",i).text(a("Uploaded %d/%d files").replace(/%d\/%d/,j.total.uploaded+"/"+j.files.length))}function g(){var m=c("ul.plupload_filelist",i).html(""),n=0,l;c.each(j.files,function(p,o){l="";if(o.status==plupload.DONE){if(o.target_name){l+=' '}l+=' ';l+=' ';n++;c("#"+k+"_count").val(n)}m.append(''+o.name+'
'+o.percent+'%
'+plupload.formatSize(o.size)+'
'+l+" ");h(o);c("#"+o.id+".plupload_delete a").click(function(q){c("#"+o.id).remove();j.removeFile(o);q.preventDefault()})});c("span.plupload_total_file_size",i).html(plupload.formatSize(j.total.size));if(j.total.queued===0){c("span.plupload_add_text",i).text(a("Add files."))}else{c("span.plupload_add_text",i).text(j.total.queued+" files queued.")}c("a.plupload_start",i).toggleClass("plupload_disabled",j.files.length==(j.total.uploaded+j.total.failed));m[0].scrollTop=m[0].scrollHeight;f();if(!j.files.length&&j.features.dragdrop&&j.settings.dragdrop){c("#"+k+"_filelist").append(''+a("Drag files here.")+" ")}}j.bind("UploadFile",function(l,m){c("#"+m.id).addClass("plupload_current_file")});j.bind("Init",function(l,m){b(k,i);if(!e.unique_names&&e.rename){c("#"+k+"_filelist div.plupload_file_name span",i).live("click",function(s){var q=c(s.target),o,r,n,p="";o=l.getFile(q.parents("li")[0].id);n=o.name;r=/^(.+)(\.[^.]+)$/.exec(n);if(r){n=r[1];p=r[2]}q.hide().after(' ');q.next().val(n).focus().blur(function(){q.show().next().remove()}).keydown(function(u){var t=c(this);if(u.keyCode==13){u.preventDefault();o.name=t.val()+p;q.text(o.name);t.blur()}})})}c("a.plupload_add",i).attr("id",k+"_browse");l.settings.browse_button=k+"_browse";if(l.features.dragdrop&&l.settings.dragdrop){l.settings.drop_element=k+"_filelist";c("#"+k+"_filelist").append(''+a("Drag files here.")+" ")}c("#"+k+"_container").attr("title","Using runtime: "+m.runtime);c("a.plupload_start",i).click(function(n){if(!c(this).hasClass("plupload_disabled")){j.start()}n.preventDefault()});c("a.plupload_stop",i).click(function(n){n.preventDefault();j.stop()});c("a.plupload_start",i).addClass("plupload_disabled")});j.init();j.bind("Error",function(l,o){var m=o.file,n;if(m){n=o.message;if(o.details){n+=" ("+o.details+")"}if(o.code==plupload.FILE_SIZE_ERROR){alert(a("Error: File too large: ")+m.name)}if(o.code==plupload.FILE_EXTENSION_ERROR){alert(a("Error: Invalid file extension: ")+m.name)}m.hint=n;c("#"+m.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",n)}});j.bind("StateChanged",function(){if(j.state===plupload.STARTED){c("li.plupload_delete a,div.plupload_buttons",i).hide();c("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",i).css("display","block");c("span.plupload_upload_status",i).text("Uploaded "+j.total.uploaded+"/"+j.files.length+" files");if(e.multiple_queues){c("span.plupload_total_status,span.plupload_total_file_size",i).show()}}else{g();c("a.plupload_stop,div.plupload_progress",i).hide();c("a.plupload_delete",i).css("display","block")}});j.bind("QueueChanged",g);j.bind("FileUploaded",function(l,m){h(m)});j.bind("UploadProgress",function(l,m){c("#"+m.id+" div.plupload_file_status",i).html(m.percent+"%");h(m);f();if(e.multiple_queues&&j.total.uploaded+j.total.failed==j.files.length){c(".plupload_buttons,.plupload_upload_status",i).css("display","inline");c(".plupload_start",i).addClass("plupload_disabled");c("span.plupload_total_status,span.plupload_total_file_size",i).hide()}});if(e.setup){e.setup(j)}});return this}else{return d[c(this[0]).attr("id")]}}})(jQuery);
\ No newline at end of file
diff --git a/static/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css b/static/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css
deleted file mode 100644
index a819fff..0000000
--- a/static/plupload/js/jquery.ui.plupload/css/jquery.ui.plupload.css
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- Plupload
-------------------------------------------------------------------- */
-
-.plupload_button {cursor: pointer;}
-
-.plupload_wrapper {
- font: normal 11px Verdana,sans-serif;
- width: 100%;
-}
-
-.plupload .plupload_container input {width: 98%;}
-.plupload .plupload_filelist_footer {border-width: 1px 0 0 0}
-.plupload .plupload_filelist_header {border-width: 0 0 1px 0}
-div.plupload .plupload_file {border-width: 0 0 1px 0}
-div.plupload div.plupload_header {border-width: 0 0 1px 0; position: relative;}
-
-.plupload_file .ui-icon {
- cursor:pointer;
-}
-
-.plupload_header_content {
- background-image: url('../img/plupload.png');
- background-repeat: no-repeat;
- background-position: 8px center;
- min-height: 56px;
- padding-left: 60px;
- position:relative;
-}
-.plupload_header_content_bw {background-image: url('../img/plupload-bw.png');}
-.plupload_header_title {
- font: normal 18px sans-serif;
- padding: 6px 0 3px;
-}
-.plupload_header_text {font: normal 12px sans-serif;}
-
-.plupload_filelist,
-.plupload_filelist_content {
- border-collapse: collapse;
- margin: 0;
- padding: 0;
- width: 100%;
- -moz-user-select:none;
- -webkit-user-select:none;
- user-select:none;
-}
-
-.plupload_cell {padding: 8px 6px;}
-
-.plupload_file {
- border-left: none;
- border-right: none;
-}
-
-.plupload .ui-sortable-helper,
-.plupload .ui-sortable .plupload_file {
- cursor:move;
-}
-
-.plupload_scroll {
- max-height: 180px;
- min-height: 168px;
- _height: 168px;
- overflow-y: auto;
-}
-
-.plupload_file_size, .plupload_file_status {text-align: right;}
-.plupload_file_size, .plupload_file_status {width: 52px;}
-.plupload_file_action {width: 16px;}
-.plupload_file_name {
- overflow: hidden;
- padding-left: 10px;
-}
-
-.plupload_file_rename {
- width:95%;
-}
-
-.plupload_progress {width: 60px;}
-.plupload_progress_container {padding: 1px;}
-
-
-/* Floats */
-
-.plupload_right {float: right;}
-.plupload_left {float: left;}
-.plupload_clear,.plupload_clearer {clear: both;}
-.plupload_clearer, .plupload_progress_bar {
- display: block;
- font-size: 0;
- line-height: 0;
-}
-.plupload_clearer {height: 0;}
-
-/* Misc */
-.plupload_hidden {display: none;}
-.plupload_droptext {
- background: transparent;
- text-align: center;
- vertical-align: middle;
- border: 0;
- line-height: 165px;
-}
-
-.plupload_buttons, .plupload_upload_status {float: left}
-
-.plupload_message {
- position: absolute;
- top: 0px;
- left: 0px;
- height: 100%;
- width: 100%;
-}
-
-.plupload_message p {
- padding:0.7em;
- margin:0;
-}
-
-.plupload_message strong {
- font-weight: bold;
-}
-
-plupload_message i {
- font-style: italic;
-}
-
-.plupload_message p span.ui-icon {
- float: left;
- margin-right: 0.3em;
-}
-
-.plupload_header_content .ui-state-error,
-.plupload_header_content .ui-state-highlight {
- border:none;
-}
-
-.plupload_message_close {
- position:absolute;
- top:5px;
- right:5px;
- cursor:pointer;
-}
-
-.plupload .ui-sortable-placeholder {
- height:35px;
-}
diff --git a/static/plupload/js/jquery.ui.plupload/img/plupload-bw.png b/static/plupload/js/jquery.ui.plupload/img/plupload-bw.png
deleted file mode 100644
index bb4147e..0000000
Binary files a/static/plupload/js/jquery.ui.plupload/img/plupload-bw.png and /dev/null differ
diff --git a/static/plupload/js/jquery.ui.plupload/img/plupload.png b/static/plupload/js/jquery.ui.plupload/img/plupload.png
deleted file mode 100644
index 74fa3ad..0000000
Binary files a/static/plupload/js/jquery.ui.plupload/img/plupload.png and /dev/null differ
diff --git a/static/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js b/static/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js
deleted file mode 100644
index a836bb6..0000000
--- a/static/plupload/js/jquery.ui.plupload/jquery.ui.plupload.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(f,a,c,g,e){var h={};function b(i){return c.translate(i)||i}function d(i){i.html('')}g.widget("ui.plupload",{contents_bak:"",runtime:null,options:{browse_button_hover:"ui-state-hover",browse_button_active:"ui-state-active",dragdrop:true,multiple_queues:true,buttons:{browse:true,start:true,stop:true},autostart:false,sortable:false,rename:false,max_file_count:0},FILE_COUNT_ERROR:-9001,_create:function(){var i=this,k,j;k=this.element.attr("id");if(!k){k=c.guid();this.element.attr("id",k)}this.id=k;this.contents_bak=this.element.html();d(this.element);this.container=g(".plupload_container",this.element).attr("id",k+"_container");this.filelist=g(".plupload_filelist_content",this.container).attr({id:k+"_filelist",unselectable:"on"});this.browse_button=g(".plupload_add",this.container).attr("id",k+"_browse");this.start_button=g(".plupload_start",this.container).attr("id",k+"_start");this.stop_button=g(".plupload_stop",this.container).attr("id",k+"_stop");if(g.ui.button){this.browse_button.button({icons:{primary:"ui-icon-circle-plus"}});this.start_button.button({icons:{primary:"ui-icon-circle-arrow-e"},disabled:true});this.stop_button.button({icons:{primary:"ui-icon-circle-close"}})}this.progressbar=g(".plupload_progress_container",this.container);if(g.ui.progressbar){this.progressbar.progressbar()}this.counter=g(".plupload_count",this.element).attr({id:k+"_count",name:k+"_count"});j=this.uploader=h[k]=new c.Uploader(g.extend({container:k,browse_button:k+"_browse"},this.options));j.bind("Error",function(l,m){if(m.code===c.INIT_ERROR){i.destroy()}});j.bind("Init",function(l,m){if(!i.options.buttons.browse){i.browse_button.button("disable").hide();l.disableBrowse(true)}if(!i.options.buttons.start){i.start_button.button("disable").hide()}if(!i.options.buttons.stop){i.stop_button.button("disable").hide()}if(!i.options.unique_names&&i.options.rename){i._enableRenaming()}if(j.features.dragdrop&&i.options.dragdrop){i._enableDragAndDrop()}i.container.attr("title",b("Using runtime: ")+(i.runtime=m.runtime));i.start_button.click(function(n){if(!g(this).button("option","disabled")){i.start()}n.preventDefault()});i.stop_button.click(function(n){i.stop();n.preventDefault()})});if(i.options.max_file_count){j.bind("FilesAdded",function(l,n){var o=[],m=n.length;var p=l.files.length+m-i.options.max_file_count;if(p>0){o=n.splice(m-p,p);l.trigger("Error",{code:i.FILE_COUNT_ERROR,message:b("File count error."),file:o})}})}j.init();j.bind("FilesAdded",function(l,m){i._trigger("selected",null,{up:l,files:m});if(i.options.autostart){setTimeout(function(){i.start()},10)}});j.bind("FilesRemoved",function(l,m){i._trigger("removed",null,{up:l,files:m})});j.bind("QueueChanged",function(){i._updateFileList()});j.bind("StateChanged",function(){i._handleState()});j.bind("UploadFile",function(l,m){i._handleFileStatus(m)});j.bind("FileUploaded",function(l,m){i._handleFileStatus(m);i._trigger("uploaded",null,{up:l,file:m})});j.bind("UploadProgress",function(l,m){g("#"+m.id).find(".plupload_file_status").html(m.percent+"%").end().find(".plupload_file_size").html(c.formatSize(m.size));i._handleFileStatus(m);i._updateTotalProgress();i._trigger("progress",null,{up:l,file:m})});j.bind("UploadComplete",function(l,m){i._trigger("complete",null,{up:l,files:m})});j.bind("Error",function(l,p){var n=p.file,o,m;if(n){o=""+p.message+" ";m=p.details;if(m){o+=" "+p.details+" "}else{switch(p.code){case c.FILE_EXTENSION_ERROR:m=b("File: %s").replace("%s",n.name);break;case c.FILE_SIZE_ERROR:m=b("File: %f, size: %s, max file size: %m").replace(/%([fsm])/g,function(r,q){switch(q){case"f":return n.name;case"s":return n.size;case"m":return c.parseSize(i.options.max_file_size)}});break;case i.FILE_COUNT_ERROR:m=b("Upload element accepts only %d file(s) at a time. Extra files were stripped.").replace("%d",i.options.max_file_count);break;case c.IMAGE_FORMAT_ERROR:m=c.translate("Image format either wrong or not supported.");break;case c.IMAGE_MEMORY_ERROR:m=c.translate("Runtime ran out of available memory.");break;case c.IMAGE_DIMENSIONS_ERROR:m=c.translate("Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.").replace(/%([swh])/g,function(r,q){switch(q){case"s":return l.runtime;case"w":return l.features.maxWidth;case"h":return l.features.maxHeight}});break;case c.HTTP_ERROR:m=b("Upload URL might be wrong or doesn't exist");break}o+=" "+m+" "}i.notify("error",o);i._trigger("error",null,{up:l,file:n,error:o})}})},_setOption:function(j,k){var i=this;if(j=="buttons"&&typeof(k)=="object"){k=g.extend(i.options.buttons,k);if(!k.browse){i.browse_button.button("disable").hide();up.disableBrowse(true)}else{i.browse_button.button("enable").show();up.disableBrowse(false)}if(!k.start){i.start_button.button("disable").hide()}else{i.start_button.button("enable").show()}if(!k.stop){i.stop_button.button("disable").hide()}else{i.start_button.button("enable").show()}}i.uploader.settings[j]=k},start:function(){this.uploader.start();this._trigger("start",null)},stop:function(){this.uploader.stop();this._trigger("stop",null)},getFile:function(j){var i;if(typeof j==="number"){i=this.uploader.files[j]}else{i=this.uploader.getFile(j)}return i},removeFile:function(j){var i=this.getFile(j);if(i){this.uploader.removeFile(i)}},clearQueue:function(){this.uploader.splice()},getUploader:function(){return this.uploader},refresh:function(){this.uploader.refresh()},_handleState:function(){var j=this,i=this.uploader;if(i.state===c.STARTED){g(j.start_button).button("disable");g([]).add(j.stop_button).add(".plupload_started").removeClass("plupload_hidden");g(".plupload_upload_status",j.element).text(b("Uploaded %d/%d files").replace("%d/%d",i.total.uploaded+"/"+i.files.length));g(".plupload_header_content",j.element).addClass("plupload_header_content_bw")}else{g([]).add(j.stop_button).add(".plupload_started").addClass("plupload_hidden");if(j.options.multiple_queues){g(j.start_button).button("enable");g(".plupload_header_content",j.element).removeClass("plupload_header_content_bw")}j._updateFileList()}},_handleFileStatus:function(l){var n,j;if(!g("#"+l.id).length){return}switch(l.status){case c.DONE:n="plupload_done";j="ui-icon ui-icon-circle-check";break;case c.FAILED:n="ui-state-error plupload_failed";j="ui-icon ui-icon-alert";break;case c.QUEUED:n="plupload_delete";j="ui-icon ui-icon-circle-minus";break;case c.UPLOADING:n="ui-state-highlight plupload_uploading";j="ui-icon ui-icon-circle-arrow-w";var i=g(".plupload_scroll",this.container),m=i.scrollTop(),o=i.height(),k=g("#"+l.id).position().top+g("#"+l.id).height();if(o '}i+=' ';i+=' ';l++;k.counter.val(l)}m.append(''+p.name+' '+p.percent+'% '+c.formatSize(p.size)+'
'+i+" ");k._handleFileStatus(p);g("#"+p.id+".plupload_delete .ui-icon, #"+p.id+".plupload_done .ui-icon").click(function(r){g("#"+p.id).remove();j.removeFile(p);r.preventDefault()});k._trigger("updatelist",null,m)});if(j.total.queued===0){g(".ui-button-text",k.browse_button).text(b("Add Files"))}else{g(".ui-button-text",k.browse_button).text(b("%d files queued").replace("%d",j.total.queued))}if(j.files.length===(j.total.uploaded+j.total.failed)){k.start_button.button("disable")}else{k.start_button.button("enable")}m[0].scrollTop=m[0].scrollHeight;k._updateTotalProgress();if(!j.files.length&&j.features.dragdrop&&j.settings.dragdrop){g("#"+o+"_filelist").append(''+b("Drag files here.")+" ")}else{if(k.options.sortable&&g.ui.sortable){k._enableSortingList()}}},_enableRenaming:function(){var i=this;g(".plupload_delete .plupload_file_name span",this.filelist).live("click",function(o){var m=g(o.target),k,n,j,l="";k=i.uploader.getFile(m.parents("tr")[0].id);j=k.name;n=/^(.+)(\.[^.]+)$/.exec(j);if(n){j=n[1];l=n[2]}m.hide().after(' ');m.next().val(j).focus().blur(function(){m.show().next().remove()}).keydown(function(q){var p=g(this);if(g.inArray(q.keyCode,[13,27])!==-1){q.preventDefault();if(q.keyCode===13){k.name=p.val()+l;m.text(k.name)}p.blur()}})})},_enableDragAndDrop:function(){this.filelist.append(''+b("Drag files here.")+" ");this.filelist.parent().attr("id",this.id+"_dropbox");this.uploader.settings.drop_element=this.options.drop_element=this.id+"_dropbox"},_enableSortingList:function(){var j,i=this;if(g("tbody tr",this.filelist).length<2){return}g("tbody",this.filelist).sortable({containment:"parent",items:".plupload_delete",helper:function(l,k){return k.clone(true).find("td:not(.plupload_file_name)").remove().end().css("width","100%")},stop:function(p,o){var l,n,k,m=[];g.each(g(this).sortable("toArray"),function(q,r){m[m.length]=i.uploader.getFile(r)});m.unshift(m.length);m.unshift(0);Array.prototype.splice.apply(i.uploader.files,m)}})},notify:function(j,k){var i=g('");i.addClass("ui-state-"+(j==="error"?"error":"highlight")).find("p .ui-icon").addClass("ui-icon-"+(j==="error"?"alert":"info")).end().find(".plupload_message_close").click(function(){i.remove()}).end();g(".plupload_header_content",this.container).append(i)},destroy:function(){g(".plupload_button",this.element).unbind();if(g.ui.button){g(".plupload_add, .plupload_start, .plupload_stop",this.container).button("destroy")}if(g.ui.progressbar){this.progressbar.progressbar("destroy")}if(g.ui.sortable&&this.options.sortable){g("tbody",this.filelist).sortable("destroy")}this.uploader.destroy();this.element.empty().html(this.contents_bak);this.contents_bak="";g.Widget.prototype.destroy.apply(this)}})}(window,document,plupload,jQuery));
\ No newline at end of file
diff --git a/static/plupload/js/plupload.browserplus.js b/static/plupload/js/plupload.browserplus.js
deleted file mode 100644
index e66404b..0000000
--- a/static/plupload/js/plupload.browserplus.js
+++ /dev/null
@@ -1 +0,0 @@
-(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,i){var e=window.BrowserPlus,h={},d=g.settings,c=d.resize;function f(n){var m,l,j=[],k,o;for(l=0;l0){r(++t,v)}else{k.status=a.DONE;n.trigger("FileUploaded",k,{response:x.value.body,status:w});if(w>=400){n.trigger("Error",{code:a.HTTP_ERROR,message:a.translate("HTTP Error."),file:k,status:w})}}}else{n.trigger("Error",{code:a.GENERIC_ERROR,message:a.translate("Generic Error."),file:k,details:x.error})}})}function q(t){k.size=t.size;if(l){e.FileAccess.chunk({file:t,chunkSize:l},function(w){if(w.success){var x=w.value,u=x.length;o=Array(u);for(var v=0;v ';if(d.ua.ie){q=b.createElement("div");l.appendChild(q);q.outerHTML=p;q=null}else{l.innerHTML=p}}());function n(){return b.getElementById(m.id+"_flash")}function j(){if(h++>5000){o({success:false});return}if(g[m.id]===false){setTimeout(j,1)}}j();k=l=null;m.bind("Destroy",function(p){var q;d.removeAllEvents(b.body,p.id);delete g[p.id];delete a[p.id];q=b.getElementById(p.id+"_flash_container");if(q){i.removeChild(q)}});m.bind("Flash:Init",function(){var r={},q;try{n().setFileFilters(m.settings.filters,m.settings.multi_selection)}catch(p){o({success:false});return}if(g[m.id]){return}g[m.id]=true;m.bind("UploadFile",function(s,u){var v=s.settings,t=m.settings.resize||{};n().uploadFile(r[u.id],v.url,{name:u.target_name||u.name,mime:d.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream",chunk_size:v.chunk_size,width:t.width,height:t.height,quality:t.quality,multipart:v.multipart,multipart_params:v.multipart_params||{},file_data_name:v.file_data_name,format:/\.(jpg|jpeg)$/i.test(u.name)?"jpg":"png",headers:v.headers,urlstream_upload:v.urlstream_upload})});m.bind("CancelUpload",function(){n().cancelUpload()});m.bind("Flash:UploadProcess",function(t,s){var u=t.getFile(r[s.id]);if(u.status!=d.FAILED){u.loaded=s.loaded;u.size=s.size;t.trigger("UploadProgress",u)}});m.bind("Flash:UploadChunkComplete",function(s,u){var v,t=s.getFile(r[u.id]);v={chunk:u.chunk,chunks:u.chunks,response:u.text};s.trigger("ChunkUploaded",t,v);if(t.status!==d.FAILED&&s.state!==d.STOPPED){n().uploadNextChunk()}if(u.chunk==u.chunks-1){t.status=d.DONE;s.trigger("FileUploaded",t,{response:u.text})}});m.bind("Flash:SelectFiles",function(s,v){var u,t,w=[],x;for(t=0;t":"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;q0){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;p0?"&":"?")+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;o1073741824){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&&((navigator.userAgent.indexOf("MSIE")>0)&&(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=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;w0?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;Fs.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=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=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(width/j.width,height/j.height);if(o<1||(o===1&&m==="image/jpeg")){j.resize(Math.round(j.width*o),Math.round(j.height*o));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;o0;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(w3){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(q8?"":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 ';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 ';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){j.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;u0){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 ";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);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,"z-index"),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 I,M,K,L,H,J,F,E=s.settings.url;function G(V){var T=0,N="----pluploadboundary"+j.guid(),O,P="--",U="\r\n",R="";q=new XMLHttpRequest;if(q.upload){q.upload.onprogress=function(W){u.loaded=Math.min(u.size,C+W.loaded-T);s.trigger("UploadProgress",u)}}q.onreadystatechange=function(){var W,Y;if(q.readyState==4&&s.state!==j.STOPPED){try{W=q.status}catch(X){W=0}if(W>=400){s.trigger("Error",{code:j.HTTP_ERROR,message:j.translate("HTTP Error."),file:u,status:W})}else{if(K){Y={chunk:D,chunks:K,response:q.responseText,status:W};s.trigger("ChunkUploaded",u,Y);C+=J;if(Y.cancelled){u.status=j.FAILED;return}u.loaded=Math.min(u.size,(D+1)*H)}else{u.loaded=u.size}s.trigger("UploadProgress",u);V=I=O=R=null;if(!K||++D>=K){u.status=j.DONE;s.trigger("FileUploaded",u,{response:q.responseText,status:W})}else{B()}}}};if(s.settings.multipart&&n.multipart){L.name=u.target_name||u.name;q.open("post",E,true);j.each(s.settings.headers,function(X,W){q.setRequestHeader(W,X)});if(typeof(V)!=="string"&&!!h.FormData){O=new FormData();j.each(j.extend(L,s.settings.multipart_params),function(X,W){O.append(W,X)});O.append(s.settings.file_data_name,V);q.send(O);return}if(typeof(V)==="string"){q.setRequestHeader("Content-Type","multipart/form-data; boundary="+N);j.each(j.extend(L,s.settings.multipart_params),function(X,W){R+=P+N+U+'Content-Disposition: form-data; name="'+W+'"'+U+U;R+=unescape(encodeURIComponent(X))+U});F=j.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";R+=P+N+U+'Content-Disposition: form-data; name="'+s.settings.file_data_name+'"; filename="'+unescape(encodeURIComponent(u.name))+'"'+U+"Content-Type: "+F+U+U+V+U+P+N+P+U;T=R.length-V.length;V=R;if(q.sendAsBinary){q.sendAsBinary(V)}else{if(n.canSendBinary){var S=new Uint8Array(V.length);for(var Q=0;Qv.chunk_size&&(n.chunks||typeof(A)=="string")){H=v.chunk_size;K=Math.ceil(u.size/H);J=Math.min(H,u.size-(D*H));if(typeof(A)=="string"){I=A.substring(D*H,D*H+J)}else{I=x(A,D*H,D*H+J)}L.chunk=D;L.chunks=K}else{J=u.size;I=A}if(s.settings.multipart&&n.multipart&&typeof(I)!=="string"&&z&&n.cantSendBlobInFormData&&n.chunks&&s.settings.chunk_size){z.onload=function(){G(z.result)};z.readAsBinaryString(I)}else{G(I)}}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>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=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=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;z4){x=q.LONG(x)+o.tiffHeader}for(F=0;F4){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 1){x=q.LONG(x)+o.tiffHeader}for(F=0;F ';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.body.innerHTML;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;A0;u=Math.ceil(q.size/r);if(!n){r=q.size;u=1}function o(){var B,x=t.settings.multipart,w=0,A={name:q.target_name||q.name},y=t.settings.url;function z(D){var C,I="----pluploadboundary"+c.guid(),F="--",H="\r\n",E,G;if(x){h.setRequestHeader("Content-Type","multipart/form-data; boundary="+I);C=google.gears.factory.create("beta.blobbuilder");c.each(c.extend(A,t.settings.multipart_params),function(K,J){C.append(F+I+H+'Content-Disposition: form-data; name="'+J+'"'+H+H);C.append(K+H)});G=c.mimeTypes[q.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";C.append(F+I+H+'Content-Disposition: form-data; name="'+t.settings.file_data_name+'"; filename="'+q.name+'"'+H+"Content-Type: "+G+H+H);C.append(D);C.append(H+F+I+F+H);E=C.getAsBlob();w=E.length-D.length;D=E}h.send(D)}if(q.status==c.DONE||q.status==c.FAILED||t.state==c.STOPPED){return}if(n){A.chunk=v;A.chunks=u}B=Math.min(r,q.size-(v*r));if(!x){y=c.buildUrl(t.settings.url,A)}h=google.gears.factory.create("beta.httprequest");h.open("POST",y);if(!x){h.setRequestHeader("Content-Disposition",'attachment; filename="'+q.name+'"');h.setRequestHeader("Content-Type","application/octet-stream")}c.each(t.settings.headers,function(D,C){h.setRequestHeader(C,D)});h.upload.onprogress=function(C){q.loaded=s+C.loaded-w;t.trigger("UploadProgress",q)};h.onreadystatechange=function(){var C;if(h.readyState==4&&t.state!==c.STOPPED){if(h.status==200){C={chunk:v,chunks:u,response:h.responseText,status:h.status};t.trigger("ChunkUploaded",q,C);if(C.cancelled){q.status=c.FAILED;return}s+=B;if(++v>=u){q.status=c.DONE;t.trigger("FileUploaded",q,{response:h.responseText,status:h.status})}else{o()}}else{t.trigger("Error",{code:c.HTTP_ERROR,message:c.translate("HTTP Error."),file:q,chunk:v,chunks:u,status:h.status})}}};if(v';n=i.firstChild;j.appendChild(n);b.addEvent(n,"load",function(C){var D=C.target,B,y;if(!k){return}try{B=D.contentWindow.document||D.contentDocument||d.frames[D.id].document}catch(A){p.trigger("Error",{code:b.SECURITY_ERROR,message:b.translate("Security error."),file:k});return}y=B.body.innerHTML;if(y){k.status=b.DONE;k.loaded=1025;k.percent=100;p.trigger("UploadProgress",k);p.trigger("FileUploaded",k,{response:y})}},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(i,A){var B,y;if(A.status==b.DONE||A.status==b.FAILED||i.state==b.STOPPED){return}B=e("form_"+A.id);y=e("input_"+A.id);y.setAttribute("name",i.settings.file_data_name);B.setAttribute("action",i.settings.url);b.each(b.extend({name:A.target_name||A.name},i.settings.multipart_params),function(E,C){var D=a.createElement("input");b.extend(D,{type:"hidden",name:C,value:E});B.insertBefore(D,B.firstChild)});k=A;e("form_"+q).style.top=-1048575+"px";B.submit()});p.bind("FileUploaded",function(i){i.refresh()});p.bind("StateChanged",function(i){if(i.state==b.STARTED){u()}else{if(i.state==b.STOPPED){d.setTimeout(function(){b.removeEvent(n,"load",i.id);if(n.parentNode){n.parentNode.removeChild(n)}},0)}}b.each(i.files,function(A,y){if(A.status===b.DONE||A.status===b.FAILED){var B=e("form_"+A.id);if(B){B.parentNode.removeChild(B)}}})});p.bind("Refresh",function(y){var F,A,B,C,i,G,H,E,D;F=e(y.settings.browse_button);if(F){i=b.getPos(F,e(y.settings.container));G=b.getSize(F);H=e("form_"+q);E=e("input_"+q);b.extend(H.style,{top:i.y+"px",left:i.x+"px",width:G.w+"px",height:G.h+"px"});if(y.features.triggerDialog){if(b.getStyle(F,"position")==="static"){b.extend(F.style,{position:"relative"})}D=parseInt(F.style.zIndex,10);if(isNaN(D)){D=0}b.extend(F.style,{zIndex:D});b.extend(H.style,{zIndex:D-1})}B=y.settings.browse_button_hover;C=y.settings.browse_button_active;A=y.features.triggerDialog?F:H;if(B){b.addEvent(A,"mouseover",function(){b.addClass(F,B)},y.id);b.addEvent(A,"mouseout",function(){b.removeClass(F,B)},y.id)}if(C){b.addEvent(A,"mousedown",function(){b.addClass(F,C)},y.id);b.addEvent(a.body,"mouseup",function(){b.removeClass(F,C)},y.id)}}});f.bind("FilesRemoved",function(y,B){var A,C;for(A=0;A ";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);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,"z-index"),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 I,M,K,L,H,J,F,E=s.settings.url;function G(V){var T=0,N="----pluploadboundary"+j.guid(),O,P="--",U="\r\n",R="";q=new XMLHttpRequest;if(q.upload){q.upload.onprogress=function(W){u.loaded=Math.min(u.size,C+W.loaded-T);s.trigger("UploadProgress",u)}}q.onreadystatechange=function(){var W,Y;if(q.readyState==4&&s.state!==j.STOPPED){try{W=q.status}catch(X){W=0}if(W>=400){s.trigger("Error",{code:j.HTTP_ERROR,message:j.translate("HTTP Error."),file:u,status:W})}else{if(K){Y={chunk:D,chunks:K,response:q.responseText,status:W};s.trigger("ChunkUploaded",u,Y);C+=J;if(Y.cancelled){u.status=j.FAILED;return}u.loaded=Math.min(u.size,(D+1)*H)}else{u.loaded=u.size}s.trigger("UploadProgress",u);V=I=O=R=null;if(!K||++D>=K){u.status=j.DONE;s.trigger("FileUploaded",u,{response:q.responseText,status:W})}else{B()}}}};if(s.settings.multipart&&n.multipart){L.name=u.target_name||u.name;q.open("post",E,true);j.each(s.settings.headers,function(X,W){q.setRequestHeader(W,X)});if(typeof(V)!=="string"&&!!h.FormData){O=new FormData();j.each(j.extend(L,s.settings.multipart_params),function(X,W){O.append(W,X)});O.append(s.settings.file_data_name,V);q.send(O);return}if(typeof(V)==="string"){q.setRequestHeader("Content-Type","multipart/form-data; boundary="+N);j.each(j.extend(L,s.settings.multipart_params),function(X,W){R+=P+N+U+'Content-Disposition: form-data; name="'+W+'"'+U+U;R+=unescape(encodeURIComponent(X))+U});F=j.mimeTypes[u.name.replace(/^.+\.([^.]+)/,"$1").toLowerCase()]||"application/octet-stream";R+=P+N+U+'Content-Disposition: form-data; name="'+s.settings.file_data_name+'"; filename="'+unescape(encodeURIComponent(u.name))+'"'+U+"Content-Type: "+F+U+U+V+U+P+N+P+U;T=R.length-V.length;V=R;if(q.sendAsBinary){q.sendAsBinary(V)}else{if(n.canSendBinary){var S=new Uint8Array(V.length);for(var Q=0;Qv.chunk_size&&(n.chunks||typeof(A)=="string")){H=v.chunk_size;K=Math.ceil(u.size/H);J=Math.min(H,u.size-(D*H));if(typeof(A)=="string"){I=A.substring(D*H,D*H+J)}else{I=x(A,D*H,D*H+J)}L.chunk=D;L.chunks=K}else{J=u.size;I=A}if(s.settings.multipart&&n.multipart&&typeof(I)!=="string"&&z&&n.cantSendBlobInFormData&&n.chunks&&s.settings.chunk_size){z.onload=function(){G(z.result)};z.readAsBinaryString(I)}else{G(I)}}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>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=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=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;z4){x=q.LONG(x)+o.tiffHeader}for(F=0;F4){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 1){x=q.LONG(x)+o.tiffHeader}for(F=0;F ":"gt","&":"amp",'"':"quot","'":"#39"},l=/[<>&\"\']/g,b,c=window.setTimeout,d={},e;function h(){this.returnValue=false}function j(){this.cancelBubble=true}(function(n){var o=n.split(/,/),p,r,q;for(p=0;p0){g.each(o,function(r,q){n[q]=r})}});return n},cleanName:function(n){var o,p;p=[/[\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(o=0;o0?"&":"?")+p}return o},each:function(q,r){var p,o,n;if(q){p=q.length;if(p===b){for(o in q){if(q.hasOwnProperty(o)){if(r(q[o],o)===false){return}}}}else{for(n=0;n1073741824){return Math.round(n/1073741824,1)+" GB"}if(n>1048576){return Math.round(n/1048576,1)+" MB"}if(n>1024){return Math.round(n/1024,1)+" KB"}return n+" b"},getPos:function(o,s){var t=0,r=0,v,u=document,p,q;o=o;s=s||u.body;function n(B){var z,A,w=0,C=0;if(B){A=B.getBoundingClientRect();z=u.compatMode==="CSS1Compat"?u.documentElement:u.body;w=A.left+z.scrollLeft;C=A.top+z.scrollTop}return{x:w,y:C}}if(o&&o.getBoundingClientRect&&((navigator.userAgent.indexOf("MSIE")>0)&&(u.documentMode<8))){p=n(o);q=n(s);return{x:p.x-q.x,y:p.y-q.y}}v=o;while(v&&v!=s&&v.nodeType){t+=v.offsetLeft||0;r+=v.offsetTop||0;v=v.offsetParent}v=o.parentNode;while(v&&v!=s&&v.nodeType){t-=v.scrollLeft||0;r-=v.scrollTop||0;v=v.parentNode}return{x:t,y:r}},getSize:function(n){return{w:n.offsetWidth||n.clientWidth,h:n.offsetHeight||n.clientHeight}},parseSize:function(n){var o;if(typeof(n)=="string"){n=/^([0-9]+)([mgk]?)$/.exec(n.toLowerCase().replace(/[^0-9mkg]/g,""));o=n[2];n=+n[1];if(o=="g"){n*=1073741824}if(o=="m"){n*=1048576}if(o=="k"){n*=1024}}return n},xmlEncode:function(n){return n?(""+n).replace(l,function(o){return a[o]?"&"+a[o]+";":o}):n},toArray:function(p){var o,n=[];for(o=0;o
=0;o--){if(q[o].key===p||q[o].orig===t){if(s.removeEventListener){s.removeEventListener(n,q[o].func,false)}else{if(s.detachEvent){s.detachEvent("on"+n,q[o].func)}}q[o].orig=null;q[o].func=null;q.splice(o,1);if(t!==b){break}}}if(!q.length){delete d[s[e]][n]}if(g.isEmptyObj(d[s[e]])){delete d[s[e]];try{delete s[e]}catch(r){s[e]=b}}},removeAllEvents:function(o){var n=arguments[1];if(o[e]===b||!o[e]){return}g.each(d[o[e]],function(q,p){g.removeEvent(o,p,n)})}};g.Uploader=function(r){var o={},u,t=[],q,p=false;u=new g.QueueProgress();r=g.extend({chunk_size:0,multipart:true,multi_selection:true,file_data_name:"file",filters:[]},r);function s(){var w,x=0,v;if(this.state==g.STARTED){for(v=0;v0?Math.ceil(u.uploaded/t.length*100):0}else{u.bytesPerSec=Math.ceil(u.loaded/((+new Date()-q||1)/1000));u.percent=u.size>0?Math.ceil(u.loaded/u.size*100):0}}g.extend(this,{state:g.STOPPED,runtime:"",features:{},files:t,settings:r,total:u,id:g.guid(),init:function(){var A=this,B,x,w,z=0,y;if(typeof(r.preinit)=="function"){r.preinit(A)}else{g.each(r.preinit,function(D,C){A.bind(C,D)})}r.page_url=r.page_url||document.location.pathname.replace(/\/[^\/]+$/g,"/");if(!/^(\w+:\/\/|\/)/.test(r.url)){r.url=r.page_url+r.url}r.chunk_size=g.parseSize(r.chunk_size);r.max_file_size=g.parseSize(r.max_file_size);A.bind("FilesAdded",function(C,F){var E,D,H=0,I,G=r.filters;if(G&&G.length){I=[];g.each(G,function(J){g.each(J.extensions.split(/,/),function(K){if(/^\s*\*\s*$/.test(K)){I.push("\\.*")}else{I.push("\\."+K.replace(new RegExp("["+("/^$.*+?|()[]{}\\".replace(/./g,"\\$&"))+"]","g"),"\\$&"))}})});I=new RegExp(I.join("|")+"$","i")}for(E=0;Er.max_file_size){C.trigger("Error",{code:g.FILE_SIZE_ERROR,message:g.translate("File size error."),file:D});continue}t.push(D);H++}if(H){c(function(){A.trigger("QueueChanged");A.refresh()},1)}else{return false}});if(r.unique_names){A.bind("UploadFile",function(C,D){var F=D.name.match(/\.([^.]+)$/),E="tmp";if(F){E=F[1]}D.target_name=D.id+"."+E})}A.bind("UploadProgress",function(C,D){D.percent=D.size>0?Math.ceil(D.loaded/D.size*100):100;n()});A.bind("StateChanged",function(C){if(C.state==g.STARTED){q=(+new Date())}else{if(C.state==g.STOPPED){for(B=C.files.length-1;B>=0;B--){if(C.files[B].status==g.UPLOADING){C.files[B].status=g.QUEUED;n()}}}}});A.bind("QueueChanged",n);A.bind("Error",function(C,D){if(D.file){D.file.status=g.FAILED;n();if(C.state==g.STARTED){c(function(){s.call(A)},1)}}});A.bind("FileUploaded",function(C,D){D.status=g.DONE;D.loaded=D.size;C.trigger("UploadProgress",D);c(function(){s.call(A)},1)});if(r.runtimes){x=[];y=r.runtimes.split(/\s?,\s?/);for(B=0;B=0;v--){if(t[v].id===w){return t[v]}}},removeFile:function(w){var v;for(v=t.length-1;v>=0;v--){if(t[v].id===w.id){return this.splice(v,1)[0]}}},splice:function(x,v){var w;w=t.splice(x===b?0:x,v===b?t.length:v);this.trigger("FilesRemoved",w);this.trigger("QueueChanged");return w},trigger:function(w){var y=o[w.toLowerCase()],x,v;if(y){v=Array.prototype.slice.call(arguments);v[0]=this;for(x=0;x=0;w--){if(y[w].func===x){y.splice(w,1);break}}}else{y=[]}if(!y.length){delete o[v]}}},unbindAll:function(){var v=this;g.each(o,function(x,w){v.unbind(w)})},destroy:function(){this.stop();this.trigger("Destroy");this.unbindAll()}})};g.File=function(q,o,p){var n=this;n.id=q;n.name=o;n.size=p;n.loaded=0;n.percent=0;n.status=0};g.Runtime=function(){this.getFeatures=function(){};this.init=function(n,o){}};g.QueueProgress=function(){var n=this;n.size=0;n.loaded=0;n.uploaded=0;n.failed=0;n.queued=0;n.percent=0;n.bytesPerSec=0;n.reset=function(){n.size=n.loaded=n.uploaded=n.failed=n.queued=n.percent=n.bytesPerSec=0}};g.runtimes={};window.plupload=g})();
\ No newline at end of file
diff --git a/static/plupload/js/plupload.silverlight.js b/static/plupload/js/plupload.silverlight.js
deleted file mode 100644
index d333a2b..0000000
--- a/static/plupload/js/plupload.silverlight.js
+++ /dev/null
@@ -1 +0,0 @@
-(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(q,p){var i=n.indexOf(p);if(i+1){return"\\"+n.charAt(i+1)}q=p.charCodeAt().toString(16);return"\\u"+"0000".substring(q.length)+q})+'"'}if(m=="object"){j=o.length!==e;n="";if(j){for(l=0;l3){k.pop()}while(k.length<4){k.push(0)}l=r.split(".");while(l.length>4){l.pop()}do{t=parseInt(l[p],10);m=parseInt(k[p],10);p++}while(p8?"":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 ';function j(){return b.getElementById(p.id+"_silverlight").content.Upload}p.bind("Silverlight:Init",function(){var i,r={};if(h[p.id]){return}h[p.id]=true;p.bind("Silverlight:StartSelectFiles",function(s){i=[]});p.bind("Silverlight:SelectFile",function(s,v,t,u){var w;w=d.guid();r[w]=v;r[v]=w;i.push(new d.File(w,t,u))});p.bind("Silverlight:SelectSuccessful",function(){if(i.length){p.trigger("FilesAdded",i)}});p.bind("Silverlight:UploadChunkError",function(s,v,t,w,u){p.trigger("Error",{code:d.IO_ERROR,message:"IO Error.",details:u,file:s.getFile(r[v])})});p.bind("Silverlight:UploadFileProgress",function(s,w,t,v){var u=s.getFile(r[w]);if(u.status!=d.FAILED){u.size=v;u.loaded=t;s.trigger("UploadProgress",u)}});p.bind("Refresh",function(s){var t,u,v;t=b.getElementById(s.settings.browse_button);if(t){u=d.getPos(t,b.getElementById(s.settings.container));v=d.getSize(t);d.extend(b.getElementById(s.id+"_silverlight_container").style,{top:u.y+"px",left:u.x+"px",width:v.w+"px",height:v.h+"px"})}});p.bind("Silverlight:UploadChunkSuccessful",function(s,v,t,y,x){var w,u=s.getFile(r[v]);w={chunk:t,chunks:y,response:x};s.trigger("ChunkUploaded",u,w);if(u.status!=d.FAILED&&s.state!==d.STOPPED){j().UploadNextChunk()}if(t==y-1){u.status=d.DONE;s.trigger("FileUploaded",u,{response:x})}});p.bind("Silverlight:UploadSuccessful",function(s,v,t){var u=s.getFile(r[v]);u.status=d.DONE;s.trigger("FileUploaded",u,{response:t})});p.bind("FilesRemoved",function(s,u){var t;for(t=0;t
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.
diff --git a/static/style.css b/static/style.css
index 17195c0..8ff2812 100644
--- a/static/style.css
+++ b/static/style.css
@@ -35,7 +35,6 @@ footer a, footer a:visited {
#sub-header {
width:100%;
- float: left;
}
#container {
@@ -94,7 +93,21 @@ a:hover {
text-decoration: underline;
}
-#all-files {
+#sub-header p {
float: right;
text-align: right;
}
+
+span.error {
+ font-weight: bold;
+ color: #F00;
+}
+
+select {
+ font-family: monospace;
+ width: 350px;
+ border: 1px solid #ccc;
+ padding: 2px 5px;
+ background-color: #fff;
+}
+
diff --git a/static/upload.js b/static/upload.js
index 7ab20e0..abd264e 100644
--- a/static/upload.js
+++ b/static/upload.js
@@ -22,7 +22,8 @@ fileUploader.init = function() {
$('#upload-form').html(''+
' Add files |'+
' Upload '+
- '
');
+ '
'+
+ '');
$('#filelist').html('No Files Added ');
});
diff --git a/templates/_files.html b/templates/_files.html
deleted file mode 100644
index 0c0fe41..0000000
--- a/templates/_files.html
+++ /dev/null
@@ -1,19 +0,0 @@
- {% if tags %}
- Files for {{tags|join(', ')}}
- {% else %}
- All uploaded files
- {% endif %}
-
- {% for file in files %}
-
-
- {{ file[0] }}
-
- {% if file[2] %}
- ({{file[2]|join(', ')}})
- {% endif %}
-
- {% else %}
- no files uploaded
- {% endfor %}
-
diff --git a/templates/_formhelpers.html b/templates/_formhelpers.html
new file mode 100644
index 0000000..c78a09f
--- /dev/null
+++ b/templates/_formhelpers.html
@@ -0,0 +1,11 @@
+ {% macro render_field(field) %}
+
+ {{ field.label }}
+ {{ field(**kwargs)|safe }}
+ {% if field.errors %}
+
+ {% for error in field.errors %}{{ error }}{% endfor %}
+
+ {% endif %}
+
+{% endmacro %}
diff --git a/templates/_tags.html b/templates/_tags.html
deleted file mode 100644
index aa22e88..0000000
--- a/templates/_tags.html
+++ /dev/null
@@ -1,8 +0,0 @@
- Tags
-
- {% for tag in tags %}
- {{ tag[0] }}
- {% else %}
- no tags yet
- {% endfor %}
-
diff --git a/templates/files.html b/templates/files.html
deleted file mode 100644
index aafb19c..0000000
--- a/templates/files.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{% extends "layout.html" %}
-{% block body %}
- {% include '_files.html' %}
-{% endblock %}
diff --git a/templates/index.html b/templates/index.html
deleted file mode 100644
index 7570cf4..0000000
--- a/templates/index.html
+++ /dev/null
@@ -1,5 +0,0 @@
-{% extends "layout.html" %}
-{% block body %}
- {% include '_tags.html' %}
-{% endblock %}
-
diff --git a/templates/layout.html b/templates/layout.html
index 61f56b7..d5e3929 100644
--- a/templates/layout.html
+++ b/templates/layout.html
@@ -12,44 +12,26 @@
-