phoenixinsilico

Untitled

Nov 25th, 2013
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //main.js
  2.  
  3. $(function () {
  4.     'use strict';
  5.  
  6.     // Initialize the jQuery File Upload widget:
  7.     $('#fileupload').fileupload({
  8.         // Uncomment the following to send cross-domain cookies:
  9.         //xhrFields: {withCredentials: true},
  10.         //url: 'server/php/'
  11.     });
  12.  
  13.     // Enable iframe cross-domain access via redirect option:
  14.     $('#fileupload').fileupload(
  15.         'option',
  16.         'redirect',
  17.         window.location.href.replace(
  18.             /\/[^\/]*$/,
  19.             '/cors/result.html?%s'
  20.         )
  21.     );
  22.  
  23.     if (window.location.hostname === 'blueimp.github.io') {
  24.         // Demo settings:
  25.         $('#fileupload').fileupload('option', {
  26.             url: '//jquery-file-upload.appspot.com/',
  27.             // Enable image resizing, except for Android and Opera,
  28.             // which actually support image resizing, but fail to
  29.             // send Blob objects via XHR requests:
  30.             disableImageResize: /Android(?!.*Chrome)|Opera/
  31.                 .test(window.navigator.userAgent),
  32.             maxFileSize: 5000000,
  33.             acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i
  34.         });
  35.         // Upload server status check for browsers with CORS support:
  36.         if ($.support.cors) {
  37.             $.ajax({
  38.                 url: '//jquery-file-upload.appspot.com/',
  39.                 type: 'HEAD'
  40.             }).fail(function () {
  41.                 $('<div class="alert alert-danger"/>')
  42.                     .text('Upload server currently unavailable - ' +
  43.                             new Date())
  44.                     .appendTo('#fileupload');
  45.             });
  46.         }
  47.     } else {
  48.         // Load existing files:
  49.         $('#fileupload').addClass('fileupload-processing');
  50.         $.ajax({
  51.             // Uncomment the following to send cross-domain cookies:
  52.             //xhrFields: {withCredentials: true},
  53.             //url: $('#fileupload').fileupload('option', 'url'),
  54.             url: '//localhost:8000/tracking/view/',
  55.             dataType: 'json',
  56.             context: $('#fileupload')[0]
  57.         }).always(function () {
  58.             $(this).removeClass('fileupload-processing');
  59.         }).done(function (result) {
  60.             $(this).fileupload('option', 'done')
  61.                 .call(this, null, {result: result});
  62.         });
  63.     }
  64.  
  65. });
  66.  
  67.  
  68.  
  69.  
  70. //models.py
  71. class UploadFile(models.Model):
  72.     files = models.FileField(upload_to="multiupload")
  73.     slug = models.SlugField(max_length=50, blank=True)
  74.    
  75.     def __unicode__(self):
  76.         return self.file.name
  77.  
  78.     @models.permalink
  79.     def get_absolute_url(self):
  80.         return ('upload-new', )
  81.  
  82.     def save(self, *args, **kwargs):
  83.         self.slug = self.file.name
  84.         super(UploadFile, self).save(*args, **kwargs)
  85.  
  86.     def delete(self, *args, **kwargs):
  87.         """delete -- Remove to leave file."""
  88.         self.file.delete(False)
  89.         super(UploadFile, self).delete(*args, **kwargs)
  90.  
  91.  
  92.  
  93.  
  94.  
  95. //views.py
  96.  
  97. class UploadFileCreateView(CreateView):
  98.     model = UploadFile
  99.    
  100.     def form_valid(self, form):
  101.         self.object = form.save()
  102.         files = [serialize(self.object)]
  103.         data = {'files': files}
  104.         response = JSONResponse(data, mimetype=response_mimetype(self.request))
  105.         response['Content-Disposition'] = 'inline; filename=files.json'
  106.         return response
  107. class BasicPlusVersionCreateView(UploadFileCreateView):
  108.     template_name_suffix = '_basicplus_form'
  109.  
  110. class jQueryVersionCreateView(UploadFileCreateView):
  111.     template_name_suffix = '_jquery_form'
  112.    
  113. class UploadFileDeleteView(DeleteView):
  114.     model = UploadFile
  115.  
  116.     def delete(self, request, *args, **kwargs):
  117.         self.object = self.get_object()
  118.         self.object.delete()
  119.         response = JSONResponse(True, mimetype=response_mimetype(request))
  120.         response['Content-Disposition'] = 'inline; filename=files.json'
  121.         return response
  122.  
  123.  
  124. class UploadFileListView(ListView):
  125.     model = UploadFile
  126.  
  127.     def render_to_response(self, context, **response_kwargs):
  128.         files = [ serialize(p) for p in self.get_queryset() ]
  129.         data = {'files': files}
  130.         response = JSONResponse(data, mimetype=response_mimetype(self.request))
  131.         response['Content-Disposition'] = 'inline; filename=files.json'
  132.         return response
  133.  
  134.  
  135.  
  136.  
  137. //response.py
  138. # encoding: utf-8
  139. from django.http import HttpResponse
  140. from django.utils import simplejson
  141.  
  142. MIMEANY = '*/*'
  143. MIMEJSON = 'application/json'
  144. MIMETEXT = 'text/plain'
  145.  
  146.  
  147. def response_mimetype(request):
  148.     """response_mimetype -- Return a proper response mimetype, accordingly to
  149.    what the client accepts, as available in the `HTTP_ACCEPT` header.
  150.  
  151.    request -- a HttpRequest instance.
  152.  
  153.    """
  154.     can_json = MIMEJSON in request.META['HTTP_ACCEPT']
  155.     can_json |= MIMEANY in request.META['HTTP_ACCEPT']
  156.     return MIMEJSON if can_json else MIMETEXT
  157.  
  158.  
  159. class JSONResponse(HttpResponse):
  160.     """JSONResponse -- Extends HTTPResponse to handle JSON format response.
  161.  
  162.    This response can be used in any view that should return a json stream of
  163.    data.
  164.  
  165.    Usage:
  166.  
  167.        def a_iew(request):
  168.            content = {'key': 'value'}
  169.            return JSONResponse(content, mimetype=response_mimetype(request))
  170.  
  171.    """
  172.     def __init__(self, obj='', json_opts=None, mimetype=MIMEJSON, *args, **kwargs):
  173.         json_opts = json_opts if isinstance(json_opts, dict) else {}
  174.         content = simplejson.dumps(obj, **json_opts)
  175.         super(JSONResponse, self).__init__(content, mimetype, *args, **kwargs)
  176.  
  177.  
  178.  
  179. //serialize.py
  180.  
  181. # encoding: utf-8
  182. import mimetypes
  183. import re
  184. from django.core.urlresolvers import reverse
  185.  
  186.  
  187. def order_name(name):
  188.     """order_name -- Limit a text to 20 chars length, if necessary strips the
  189.    middle of the text and substitute it for an ellipsis.
  190.  
  191.    name -- text to be limited.
  192.  
  193.    """
  194.     name = re.sub(r'^.*/', '', name)
  195.     if len(name) <= 20:
  196.         return name
  197.     return name[:10] + "..." + name[-7:]
  198.  
  199.  
  200. def serialize(instance, file_attr='file'):
  201.     """serialize -- Serialize a Picture instance into a dict.
  202.  
  203.    instance -- Picture instance
  204.    file_attr -- attribute name that contains the FileField or ImageField
  205.  
  206.    """
  207.     obj = getattr(instance, file_attr)
  208.     return {
  209.         'url': obj.url,
  210.         'name': order_name(obj.name),
  211.         'type': mimetypes.guess_type(obj.path)[0] or 'image/png',
  212.         'thumbnailUrl': obj.url,
  213.         'size': obj.size,
  214.         'deleteUrl': reverse('upload-delete', args=[instance.pk]),
  215.         'deleteType': 'DELETE',
  216.     }
Advertisement
Add Comment
Please, Sign In to add comment