Skip to content
This repository has been archived by the owner on Nov 14, 2023. It is now read-only.

Commit

Permalink
fix #3
Browse files Browse the repository at this point in the history
  • Loading branch information
alswl committed Jul 5, 2014
1 parent d993d6f commit c3b36c2
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 21 deletions.
6 changes: 3 additions & 3 deletions kuku/app.py
Expand Up @@ -11,7 +11,7 @@
from kuku import settings from kuku import settings




re_safe_name_with_slash = ur'[ \w\u2e80-\u9fff\-_\.,/]' re_safe_name_with_slash = ur'[ \w\u2e80-\u9fff\-_\.,%/]'




class MainHandler(tornado.web.RequestHandler): class MainHandler(tornado.web.RequestHandler):
Expand All @@ -20,8 +20,8 @@ def get(self):




route = [ route = [
(r'/_admin/login', MainHandler), # TODO #(r'/_admin/login', MainHandler), # TODO
(r'/_admin/logout', MainHandler), # TODO #(r'/_admin/logout', MainHandler), # TODO
(r'/_api/upload', MainHandler), # TODO (r'/_api/upload', MainHandler), # TODO
(r'/_api/mkdir', MainHandler), # TODO (r'/_api/mkdir', MainHandler), # TODO
(r'/_api/delete', MainHandler), # TODO (r'/_api/delete', MainHandler), # TODO
Expand Down
8 changes: 6 additions & 2 deletions kuku/handlers/dir.py
Expand Up @@ -4,6 +4,7 @@


import tornado.ioloop import tornado.ioloop
import tornado.web import tornado.web
import magic


from kuku import settings from kuku import settings
from kuku.handlers import decorators from kuku.handlers import decorators
Expand All @@ -28,15 +29,18 @@ def get(self, path):
abs_path = os.path.abspath(os.path.join(settings.UPLOAD_PATH, path)) abs_path = os.path.abspath(os.path.join(settings.UPLOAD_PATH, path))
dirs = [] dirs = []
files = [] files = []
file_types = {}
l = os.listdir(abs_path) l = os.listdir(abs_path)
for f in l: for f in l:
if os.path.isdir(os.path.join(abs_path, f)): if os.path.isdir(os.path.join(abs_path, f)):
dirs.append(f) dirs.append(f)
else: else:
files.append(f) files.append(f)

file_types = dict([(x, magic.from_file(os.path.join(abs_path, x), mime=True)) for x in files])

parent_dir = os.path.dirname(path) parent_dir = os.path.dirname(path)
if not is_security_path(parent_dir): if not is_security_path(parent_dir):
parent_dir = None parent_dir = None


self.render('dir.html', dirs=dirs, files=files, parent_dir=parent_dir) self.render('dir.html', dirs=dirs, files=files, file_types=file_types, parent_dir=parent_dir)

2 changes: 2 additions & 0 deletions kuku/settings.py.sample
Expand Up @@ -13,6 +13,8 @@ UPLOAD_PATH = os.path.abspath(os.path.join(ROOT_PATH, '..', 'upload'))
MAX_FILE_SIZE = 5 * 1024 * 1024 # 3 * 1024 * 1024 bytes MAX_FILE_SIZE = 5 * 1024 * 1024 # 3 * 1024 * 1024 bytes
ALLOWED_EXTENSIONS = ['jpg', 'png', 'gif', 'zip', 'rar', 'gz'] ALLOWED_EXTENSIONS = ['jpg', 'png', 'gif', 'zip', 'rar', 'gz']




#DEFAULT_DIR_MODE = '755' #DEFAULT_DIR_MODE = '755'
#DEFAULT_FILE_MODE = '644' #DEFAULT_FILE_MODE = '644'


Expand Down
76 changes: 60 additions & 16 deletions kuku/templates/dir.html
@@ -1,27 +1,71 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head lang="en"> <head>
<meta charset="UTF-8"> <title>Kuku</title>
<title></title> <link rel="stylesheet" href="http://cdn.staticfile.org/twitter-bootstrap/3.1.1/css/bootstrap.min.css">
</head> </head>
<body> <body>


<ul>
{% if parent_dir %}
<li><a href="/{{ parent_dir }}/">..</a></li>
{% end %}
{% for dir in dirs %}
<li><a href="./{{ dir }}/">{{ dir }}</a>/</li>
{% end %}


</ul> <div class="container">


<ul> <div class="row">
{% for file in files %} <div class="col-md-6">
<li><a href="./{{ file }}">{{ file }}</a></li>
{% end %}


</ul>
<form role="form">
<select id="selector" multiple="multiple" style="width: 100%; height: 480px">
{% if parent_dir is not None %}
<option value=".." data-type="dir">..</option>
{% end %}
{% for dir in dirs %}
<option value="./{{ dir }}/" data-type="dir">{{ dir }}/</option>
{% end %}
{% for file in files %}
<option value="./{{ file }}" data-name="{{ file }}" data-type="file" data-filetype="{{ file_types[file] }}">{{ file }}</option>
{% end %}
</select>

</form>

</div>

<div id="preview" class="col-md-6">
Preview
</div>
</div>


</div>


</body> </body>
<script src="http://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="http://cdn.staticfile.org/underscore.js/1.6.0/underscore-min.js"></script>
<script src="http://cdn.staticfile.org/twitter-bootstrap/3.1.1/js/bootstrap.min.js"></script>
<script>
$(function() {
$('#selector option').click(function() {
var self = $(this);
console.info(self.attr('data-filetype'));
if (self.attr('data-type') === 'file' && _.contains(['image/jpeg', 'image/png'], self.attr('data-filetype'))) {
$('#preview').html('<img class="img-thumbnail" src="' + self.val() + '" alt="' + self.attr('data-name') + '"/>');
} else if (self.attr('data-type') === 'dir') {
window.location = self.val();
} else {
$('#preview').html('content type not support preview');
}
});

$('#selector option').dblclick(function() {
var self = $(this);
if (self.attr('data-type') === 'file' && _.contains(['image/jpeg', 'image/png'], self.attr('data-filetype'))) {
window.open(self.val(), 'window name', 'window settings');
} else if (self.attr('data-type') === 'dir') {
return false;
} else {
return false;
}
});
});
</script>
</html> </html>

0 comments on commit c3b36c2

Please sign in to comment.