Skip to content

Commit

Permalink
Store source filename as well as the destination file URL in the base…
Browse files Browse the repository at this point in the history
… TextField of the widget
  • Loading branch information
rishi-chalo committed Oct 4, 2015
1 parent 6d50527 commit c6084da
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
9 changes: 6 additions & 3 deletions s3direct/static/s3direct/js/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,13 @@
alert(msg)
}

var update = function(el, xml) {
var update = function(el, xml, file) {
var link = el.querySelector('.file-link'),
url = el.querySelector('.file-url')
url = el.querySelector('.file-url'),
src_filename = el.querySelector('.file-src-filename')

url.value = parseURL(xml)
src_filename.value = file.name
link.setAttribute('href', url.value)
link.innerHTML = url.value.split('/').pop()

Expand Down Expand Up @@ -108,7 +110,7 @@
request('POST', url, form, {}, el, true, function(status, xml){
disableSubmit(false)
if(status !== 201) return error(el, 'Sorry, failed to upload to S3.')
update(el, xml)
update(el, xml, file)
})
}

Expand Down Expand Up @@ -146,6 +148,7 @@

var el = e.target.parentElement
el.querySelector('.file-url').value = ''
e1.querySelector('.file-src-filename').value = ''
el.querySelector('.file-input').value = ''
el.className = 's3direct form-active'
}
Expand Down
35 changes: 27 additions & 8 deletions s3direct/widgets.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import os

import json
from django.forms import widgets
from django.utils.safestring import mark_safe
from django.core.urlresolvers import reverse
from django.conf import settings


class S3DirectWidget(widgets.TextInput):

html = (
'<div class="s3direct" data-policy-url="{policy_url}">'
' <a class="file-link" target="_blank" href="{file_url}">{file_name}</a>'
' <a class="file-link" target="_blank" href="{file_url}">{file_src_filename}</a>'
' <a class="file-remove" href="#remove">Remove</a>'
' <input class="file-url" type="hidden" value="{file_url}" id="{element_id}" name="{name}" />'
' <input class="file-url" type="hidden" value="{file_url}" id="{file_url_element_id}" name="{file_url_name}" />'
' <input class="file-src-filename" type="hidden" value="{file_src_filename}" id="{file_src_filename_element_id}" name="{file_src_filename_name}" />'
' <input class="file-dest" type="hidden" value="{dest}">'
' <input class="file-input" type="file" />'
' <div class="progress progress-striped active">'
Expand All @@ -21,6 +21,8 @@ class S3DirectWidget(widgets.TextInput):
'</div>'
)

src_filename_suffix = '-src-filename'

class Media:
js = (
's3direct/js/scripts.js',
Expand All @@ -37,12 +39,29 @@ def __init__(self, *args, **kwargs):
super(S3DirectWidget, self).__init__(*args, **kwargs)

def render(self, name, value, attrs=None):
if value:
value_dict = json.loads(value)
src_filename = value_dict['src_filename']
dst_url = value_dict['dst_url']
else:
src_filename = ''
dst_url = ''
output = self.html.format(
policy_url=reverse('s3direct'),
element_id=self.build_attrs(attrs).get('id'),
file_name=os.path.basename(value or ''),
file_url_element_id=self.build_attrs(attrs).get('id'),
file_src_filename_element_id=self.build_attrs(attrs).get('id')+self.src_filename_suffix,
file_src_filename=os.path.basename(src_filename),
dest=self.dest,
file_url=value or '',
name=name)
file_url=dst_url,
file_url_name=name,
file_src_filename_name=name+self.src_filename_suffix)

return mark_safe(output)

def value_from_datadict(self, data, files, name):
dst_url = data[name]
src_filename = data[name+self.src_filename_suffix]
value_dict = {'src_filename': src_filename, 'dst_url': dst_url}
value = json.dumps(value_dict)
return value
#return super(S3DirectWidget, self).value_from_datadict(data, files, name)

0 comments on commit c6084da

Please sign in to comment.