diff options
author | Nico von Geyso <Nico.Geyso@FU-Berlin.de> | 2012-05-14 11:52:42 +0200 |
---|---|---|
committer | Nico von Geyso <Nico.Geyso@FU-Berlin.de> | 2012-05-14 11:52:42 +0200 |
commit | 0a2ed52efaf75405928644b04093f34dc5fff9d8 (patch) | |
tree | 151adc2d088adebe5d4c8d4935c70ca813d30623 | |
parent | 84424f7955c0108b6e69b893a427fb1136ff3728 (diff) | |
download | klausuren-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.py | 12 | ||||
-rw-r--r-- | fit.py | 34 | ||||
-rw-r--r-- | static/upload.js | 75 | ||||
-rw-r--r-- | templates/_files.html | 9 | ||||
-rw-r--r-- | templates/layout.html | 83 |
5 files changed, 122 insertions, 91 deletions
@@ -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()) ) @@ -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> |