summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNico von Geyso <Nico.Geyso@FU-Berlin.de>2012-05-14 11:52:42 +0200
committerNico von Geyso <Nico.Geyso@FU-Berlin.de>2012-05-14 11:52:42 +0200
commit0a2ed52efaf75405928644b04093f34dc5fff9d8 (patch)
tree151adc2d088adebe5d4c8d4935c70ca813d30623
parent84424f7955c0108b6e69b893a427fb1136ff3728 (diff)
downloadklausuren-0a2ed52efaf75405928644b04093f34dc5fff9d8.tar.gz
klausuren-0a2ed52efaf75405928644b04093f34dc5fff9d8.tar.bz2
klausuren-0a2ed52efaf75405928644b04093f34dc5fff9d8.zip
search rewritten and refactoring
* search result are only files which are in all search tags * javascript refactoring
-rw-r--r--app.py12
-rw-r--r--fit.py34
-rw-r--r--static/upload.js75
-rw-r--r--templates/_files.html9
-rw-r--r--templates/layout.html83
5 files changed, 122 insertions, 91 deletions
diff --git a/app.py b/app.py
index 7d0356d..6b96cae 100644
--- a/app.py
+++ b/app.py
@@ -10,7 +10,8 @@ fit = Fit('static/fit.git')
app = Flask(__name__)
app.secret_key = 'naidiequ8zies1weed4we6iexood1Bae'
-ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
+ALLOWED_EXTENSIONS = set(
+ ['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'zip', 'gs', 'gz' ])
def allowed_file(filename):
@@ -39,17 +40,22 @@ def search():
@app.route('/all')
@app.route('/tags/<path:tag>')
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=fit.get_files_for_tags(params),
+ files=get_files(fit.get_files_for_tags(params)),
tags=params
)
return render_template(
'files.html',
- files=fit.get_all_files()
+ files=get_files(fit.get_all_files())
)
diff --git a/fit.py b/fit.py
index 529b787..28e818d 100644
--- a/fit.py
+++ b/fit.py
@@ -1,4 +1,5 @@
import os, time
+import collections
from pygit2 import Repository, Signature
from binascii import b2a_hex
@@ -127,22 +128,35 @@ class Fit:
def get_files_for_tags(self, tags):
try:
commit = self._get_last_commit()
- tree = commit.tree['tags'].to_object()
- entries = [ tree[x.encode('ascii')].to_object() for x in tags]
- add = lambda x,y: x+y
- return reduce(add,
- map(lambda entry: [ (x.name, x.hex) for x in entry ],entries)
- )
+ root = commit.tree['tags'].to_object()
+
+ def get_obj(x):
+ try:
+ return root[x.encode('ascii')].to_object()
+ except KeyError:
+ return []
+
+ entries = [get_obj(x) for x in tags]
+
+ 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)]
+
except:
return []
- def get_file_with_tags(self, oid):
+ def get_tags_for_file(self, oid):
tags = []
- for name, tag_oid in fit.get_all_tags():
+ for name, tag_oid in self.get_all_tags():
for entry in self.repo[tag_oid]:
- if entry.oid == oid:
- tags.append((name, tag_oid))
+ if b2a_hex(entry.oid).decode('ascii') == oid:
+ tags.append(name)
return tags
diff --git a/static/upload.js b/static/upload.js
new file mode 100644
index 0000000..3a6d0ca
--- /dev/null
+++ b/static/upload.js
@@ -0,0 +1,75 @@
+var fileUploader = {};
+
+fileUploader.init = function() {
+ var uploader = new plupload.Uploader({
+ runtimes : 'html5,flash,html4,silverlight',
+ browse_button : 'pickfiles',
+ container : 'container',
+ max_file_size : '10mb',
+ url : '/',
+ flash_swf_url : '/static/plupload/js/plupload.flash.swf',
+ silverlight_xap_url : '/static/plupload/js/plupload.silverlight.xap',
+ multipart_params: {},
+ filters : [
+ {title : "Image files", extensions : "jpg,gif,png"},
+ {title : "Data Compression", extensions : "zip,tar.gz"},
+ {title : "Additional", extensions : "pdf,gs"}
+ ],
+ });
+
+ uploader.bind('Init', function(up, params) {
+ console.log("using runtime: " + params.runtime);
+ $('#upload-form').html('<p id="modern-form">'+
+ ' <a id="pickfiles" href="#">Add files</a> |'+
+ ' <a id="uploadfiles" href="#">Upload</a>'+
+ '</p>');
+ $('#filelist').html('<li id="no-files">No Files Added</li>');
+
+ });
+
+ $('#uploadfiles').live('click', function(e) {
+ uploader.start();
+ e.preventDefault();
+ });
+
+ uploader.init();
+
+ uploader.bind('BeforeUpload', function(up, file) {
+ uploader.settings.multipart_params.tags = $('input[name='+file.id +']').val();
+ });
+
+ uploader.bind('FilesAdded', function(up, files) {
+ $('#no-files').remove()
+ $.each(files, function(i, file) {
+ $('#filelist').append(
+ '<li id="' + file.id + '">' +
+ '<label for="">' +
+ file.name + ' (' + plupload.formatSize(file.size) + ')' +
+ '</label>' +
+ '<input type="text" placeholder="Tag" name="'+file.id+'" />' +
+ '<b></b>' +
+ '</li>');
+ });
+
+ up.refresh(); // Reposition Flash/Silverlight
+ });
+
+ uploader.bind('UploadProgress', function(up, file) {
+ $('#' + file.id + " input").attr('disabled', true);
+ $('#' + file.id + " b").html(file.percent + "%");
+ });
+
+ uploader.bind('Error', function(up, err) {
+ $('#filelist').append("<div>Error: " + err.code +
+ ", Message: " + err.message +
+ (err.file ? ", File: " + err.file.name : "") +
+ "</div>"
+ );
+
+ up.refresh(); // Reposition Flash/Silverlight
+ });
+
+ uploader.bind('FileUploaded', function(up, file) {
+ console.log(file);
+ });
+};
diff --git a/templates/_files.html b/templates/_files.html
index 94a069d..0c0fe41 100644
--- a/templates/_files.html
+++ b/templates/_files.html
@@ -5,7 +5,14 @@
{% endif %}
<ul>
{% for file in files %}
- <li><a href="{{url_for('show', oid=file[1])}}">{{ file[0] }}</a></li>
+ <li>
+ <a href="{{url_for('show', oid=file[1])}}">
+ {{ file[0] }}
+ </a>
+ {% if file[2] %}
+ ({{file[2]|join(', ')}})
+ {% endif %}
+ </li>
{% else %}
<li><strong>no files uploaded</strong></li>
{% endfor %}
diff --git a/templates/layout.html b/templates/layout.html
index 0545347..f97af39 100644
--- a/templates/layout.html
+++ b/templates/layout.html
@@ -6,11 +6,6 @@
<link rel="stylesheet" href="http://960.gs/css/text.css" />
<link rel="stylesheet" href="http://960.gs/css/960.css" />
<link rel="stylesheet" type="text/css" media="all" href="{{url_for('static', filename='style.css')}}" />
-
- <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
- <script type="text/javascript" src="{{url_for('static',filename='plupload/js/plupload.full.js')}}"></script>
-
-
<title>Fit</title>
</head>
<body>
@@ -51,78 +46,12 @@
</html>
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
+<script type="text/javascript" src="{{url_for('static',filename='plupload/js/plupload.full.js')}}"></script>
+<script type="text/javascript" src="{{url_for('static',filename='upload.js')}}"></script>
+
<script type="text/javascript">
-// Custom example logic
-$(function() {
- var uploader = new plupload.Uploader({
- runtimes : 'html5,flash,html4,silverlight',
- browse_button : 'pickfiles',
- container : 'container',
- max_file_size : '10mb',
- url : '{{url_for('index')}}',
- flash_swf_url : '{{url_for('static',filename='plupload/js/plupload.flash.swf')}}',
- silverlight_xap_url : '{{url_for('static',filename='plupload/js/plupload.silverlight.xap')}}',
- multipart_params: {},
- filters : [
- {title : "Image files", extensions : "jpg,gif,png"},
- {title : "Zip files", extensions : "zip"}
- ],
- });
-
- uploader.bind('Init', function(up, params) {
- console.log("using runtime: " + params.runtime);
- $('#upload-form').html('<p id="modern-form">'+
- ' <a id="pickfiles" href="#">Add files</a>|'+
- ' <a id="uploadfiles" href="#">Upload</a>'+
- '</p>');
- $('#filelist').html('<li id="no-files">No Files Added</li>');
-
- });
-
- $('#uploadfiles').live('click', function(e) {
- uploader.start();
- e.preventDefault();
- });
-
- uploader.init();
-
- uploader.bind('BeforeUpload', function(up, file) {
- uploader.settings.multipart_params.tags = $('input[name='+file.id +']').val();
- });
-
- uploader.bind('FilesAdded', function(up, files) {
- $('#no-files').remove()
- $.each(files, function(i, file) {
- $('#filelist').append(
- '<li id="' + file.id + '">' +
- '<label for="">' +
- file.name + ' (' + plupload.formatSize(file.size) + ')' +
- '</label>' +
- '<input type="text" placeholder="Tag" name="'+file.id+'" />' +
- '<b></b>' +
- '</li>');
- });
-
- up.refresh(); // Reposition Flash/Silverlight
- });
-
- uploader.bind('UploadProgress', function(up, file) {
- $('#' + file.id + " input").attr('disabled', true);
- $('#' + file.id + " b").html(file.percent + "%");
- });
-
- uploader.bind('Error', function(up, err) {
- $('#filelist').append("<div>Error: " + err.code +
- ", Message: " + err.message +
- (err.file ? ", File: " + err.file.name : "") +
- "</div>"
- );
-
- up.refresh(); // Reposition Flash/Silverlight
- });
-
- uploader.bind('FileUploaded', function(up, file) {
- console.log(file);
+ $(function() {
+ fileUploader.init();
});
-});
</script>