Better rendering and javascript initialization (@andybak / #2)

This commit is contained in:
Florent Lebreton
2014-11-26 18:35:33 +01:00
parent b29c5964af
commit 02e78b1a6c
7 changed files with 46 additions and 28 deletions

View File

@@ -1,3 +1,4 @@
include README.rst LICENSE include README.rst LICENSE
recursive-include jsignature/static *.js recursive-include jsignature/static *.js
recursive-include jsignature/locale *.mo recursive-include jsignature/locale *.mo
recursive-include jsignature/templates *.html

View File

@@ -1,15 +1,21 @@
$(document).ready(function() { $(document).ready(function() {
$(".jsign-container").each(function(){
var config = $(this).data('config');
var value = $(this).data('initial-value');
$(this).jSignature(config);
$(this).jSignature("setData", value, "native");
});
/* Each time user is done drawing a stroke, update value of hidden input */ /* Each time user is done drawing a stroke, update value of hidden input */
$(document).delegate(".jsign-container", "change", function(e) { $(".jsign-container").on("change", function(e) {
var jSignature_data = $(this).jSignature('getData', 'native'); var jSignature_data = $(this).jSignature('getData', 'native');
var django_field_name = $(this).attr('id').split(/_(.+)/)[1]; var django_field_name = $(this).attr('id').split(/_(.+)/)[1];
$('#id_' + django_field_name).val(JSON.stringify(jSignature_data)); $('#id_' + django_field_name).val(JSON.stringify(jSignature_data));
}); });
/* Bind clear button */ /* Bind clear button */
$(document).delegate(".jsign-wrapper input", "click", function(e) { $(".jsign-wrapper input").on("click", function(e) {
$(this).siblings('.jsign-container').jSignature('reset'); $(this).siblings('.jsign-container').jSignature('reset');
}); });
}) });

View File

@@ -0,0 +1,8 @@
<div class='jsign-wrapper'>
{{ hidden }}
<div id='{{ jsign_id }}'
data-config='{{ config }}'
data-initial-value='{{ value }}'
class='jsign-container'></div>
<input type='button' value='{{ reset_btn_text }}' class="btn">
</div>

View File

@@ -1,4 +1,6 @@
import json import json
from pyquery import PyQuery as pq
from django.test import SimpleTestCase from django.test import SimpleTestCase
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@@ -59,6 +61,5 @@ class JSignatureWidgetTest(SimpleTestCase):
w = JSignatureWidget() w = JSignatureWidget()
output = w.render(name='foo', value=None) output = w.render(name='foo', value=None)
# Almost useless :/ # Almost useless :/
self.assertIn('class="jsign-wrapper"', output) self.assertEqual(1, len(pq('.jsign-wrapper', output)))
self.assertIn('type="hidden"', output) self.assertEqual(1, len(pq('[type=hidden]', output)))
self.assertIn('type="text/javascript"', output)

View File

@@ -3,6 +3,8 @@
with jSignature jQuery plugin with jSignature jQuery plugin
""" """
import json import json
from django.template.loader import render_to_string
from django.forms.widgets import HiddenInput from django.forms.widgets import HiddenInput
from django.core import validators from django.core import validators
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@@ -65,15 +67,13 @@ class JSignatureWidget(HiddenInput):
value = self.prep_value(value) value = self.prep_value(value)
# Build output # Build output
hidden_input = super(JSignatureWidget, self).render(name, value, attrs) context = {
div = u'<div id="%s" class="jsign-container"></div>' % jsign_id 'hidden': super(JSignatureWidget, self).render(name, value, attrs),
clr = u'<input type="button" value="%s" class="btn">' % _('Reset') 'jsign_id': jsign_id,
js = u'$("#%s").jSignature(%s);' % ( 'reset_btn_text': _('Reset'),
jsign_id, json.dumps(jsignature_config)) 'config': mark_safe(json.dumps(jsignature_config)),
js += u'$("#%s").jSignature("setData", %s,"native");' % ( 'value': mark_safe(value),
jsign_id, value) }
js = u'<script type="text/javascript">%s</script>' % js out = render_to_string('jsignature/widget.html', context)
out = u'<div class="jsign-wrapper">%s%s%s%s</div>' % (
hidden_input, div, clr, js)
return mark_safe(out) return mark_safe(out)

View File

@@ -1,2 +1,3 @@
south south
pillow pillow
pyquery

View File

@@ -5,24 +5,25 @@ here = os.path.abspath(os.path.dirname(__file__))
setup( setup(
name='django-jsignature', name='django-jsignature',
version='0.7.5.dev0', version='0.7.6',
author='Florent Lebreton', author='Florent Lebreton',
author_email='florent.lebreton@makina-corpus.com', author_email='florent.lebreton@makina-corpus.com',
url='https://github.com/makinacorpus/django-jsignature', url='https://github.com/makinacorpus/django-jsignature',
download_url = "http://pypi.python.org/pypi/django-jsignature/", download_url="http://pypi.python.org/pypi/django-jsignature/",
description="Use jSignature jQuery plugin in your django projects", description="Use jSignature jQuery plugin in your django projects",
long_description=open(os.path.join(here, 'README.rst')).read(), long_description=open(os.path.join(here, 'README.rst')).read(),
license='LPGL, see LICENSE file.', license='LPGL, see LICENSE file.',
install_requires=['Django'], install_requires=['Django'],
packages=find_packages(), packages=find_packages(),
include_package_data = True, include_package_data=True,
zip_safe = False, zip_safe=False,
classifiers = ['Topic :: Utilities', classifiers=[
'Natural Language :: English', 'Topic :: Utilities',
'Operating System :: OS Independent', 'Natural Language :: English',
'Intended Audience :: Developers', 'Operating System :: OS Independent',
'Environment :: Web Environment', 'Intended Audience :: Developers',
'Framework :: Django', 'Environment :: Web Environment',
'Development Status :: 4 - Beta', 'Framework :: Django',
'Programming Language :: Python :: 2.7'], 'Development Status :: 4 - Beta',
'Programming Language :: Python :: 2.7'],
) )