From 02e78b1a6c511a593529972c62d81f577986ede3 Mon Sep 17 00:00:00 2001 From: Florent Lebreton Date: Wed, 26 Nov 2014 18:35:33 +0100 Subject: [PATCH] Better rendering and javascript initialization (@andybak / #2) --- MANIFEST.in | 1 + jsignature/static/js/django_jsignature.js | 12 +++++++--- jsignature/templates/jsignature/widget.html | 8 +++++++ jsignature/tests/widgets.py | 7 +++--- jsignature/widgets.py | 20 ++++++++--------- requirements.txt | 1 + setup.py | 25 +++++++++++---------- 7 files changed, 46 insertions(+), 28 deletions(-) create mode 100644 jsignature/templates/jsignature/widget.html diff --git a/MANIFEST.in b/MANIFEST.in index 80c7acd..421e471 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,4 @@ include README.rst LICENSE recursive-include jsignature/static *.js recursive-include jsignature/locale *.mo +recursive-include jsignature/templates *.html diff --git a/jsignature/static/js/django_jsignature.js b/jsignature/static/js/django_jsignature.js index bff178d..df01be1 100644 --- a/jsignature/static/js/django_jsignature.js +++ b/jsignature/static/js/django_jsignature.js @@ -1,15 +1,21 @@ $(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 */ - $(document).delegate(".jsign-container", "change", function(e) { + $(".jsign-container").on("change", function(e) { var jSignature_data = $(this).jSignature('getData', 'native'); var django_field_name = $(this).attr('id').split(/_(.+)/)[1]; $('#id_' + django_field_name).val(JSON.stringify(jSignature_data)); }); /* Bind clear button */ - $(document).delegate(".jsign-wrapper input", "click", function(e) { + $(".jsign-wrapper input").on("click", function(e) { $(this).siblings('.jsign-container').jSignature('reset'); }); -}) +}); diff --git a/jsignature/templates/jsignature/widget.html b/jsignature/templates/jsignature/widget.html new file mode 100644 index 0000000..16c7032 --- /dev/null +++ b/jsignature/templates/jsignature/widget.html @@ -0,0 +1,8 @@ +
+ {{ hidden }} +
+ +
\ No newline at end of file diff --git a/jsignature/tests/widgets.py b/jsignature/tests/widgets.py index 77b6071..f06d985 100644 --- a/jsignature/tests/widgets.py +++ b/jsignature/tests/widgets.py @@ -1,4 +1,6 @@ import json +from pyquery import PyQuery as pq + from django.test import SimpleTestCase from django.core.exceptions import ValidationError @@ -59,6 +61,5 @@ class JSignatureWidgetTest(SimpleTestCase): w = JSignatureWidget() output = w.render(name='foo', value=None) # Almost useless :/ - self.assertIn('class="jsign-wrapper"', output) - self.assertIn('type="hidden"', output) - self.assertIn('type="text/javascript"', output) + self.assertEqual(1, len(pq('.jsign-wrapper', output))) + self.assertEqual(1, len(pq('[type=hidden]', output))) diff --git a/jsignature/widgets.py b/jsignature/widgets.py index 6244e34..0ed7b1a 100644 --- a/jsignature/widgets.py +++ b/jsignature/widgets.py @@ -3,6 +3,8 @@ with jSignature jQuery plugin """ import json + +from django.template.loader import render_to_string from django.forms.widgets import HiddenInput from django.core import validators from django.core.exceptions import ValidationError @@ -65,15 +67,13 @@ class JSignatureWidget(HiddenInput): value = self.prep_value(value) # Build output - hidden_input = super(JSignatureWidget, self).render(name, value, attrs) - div = u'
' % jsign_id - clr = u'' % _('Reset') - js = u'$("#%s").jSignature(%s);' % ( - jsign_id, json.dumps(jsignature_config)) - js += u'$("#%s").jSignature("setData", %s,"native");' % ( - jsign_id, value) - js = u'' % js - out = u'
%s%s%s%s
' % ( - hidden_input, div, clr, js) + context = { + 'hidden': super(JSignatureWidget, self).render(name, value, attrs), + 'jsign_id': jsign_id, + 'reset_btn_text': _('Reset'), + 'config': mark_safe(json.dumps(jsignature_config)), + 'value': mark_safe(value), + } + out = render_to_string('jsignature/widget.html', context) return mark_safe(out) diff --git a/requirements.txt b/requirements.txt index f21076c..9990ae9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ south pillow +pyquery \ No newline at end of file diff --git a/setup.py b/setup.py index 82a8b2e..8945b11 100644 --- a/setup.py +++ b/setup.py @@ -5,24 +5,25 @@ here = os.path.abspath(os.path.dirname(__file__)) setup( name='django-jsignature', - version='0.7.5.dev0', + version='0.7.6', author='Florent Lebreton', author_email='florent.lebreton@makina-corpus.com', 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", long_description=open(os.path.join(here, 'README.rst')).read(), license='LPGL, see LICENSE file.', install_requires=['Django'], packages=find_packages(), - include_package_data = True, - zip_safe = False, - classifiers = ['Topic :: Utilities', - 'Natural Language :: English', - 'Operating System :: OS Independent', - 'Intended Audience :: Developers', - 'Environment :: Web Environment', - 'Framework :: Django', - 'Development Status :: 4 - Beta', - 'Programming Language :: Python :: 2.7'], + include_package_data=True, + zip_safe=False, + classifiers=[ + 'Topic :: Utilities', + 'Natural Language :: English', + 'Operating System :: OS Independent', + 'Intended Audience :: Developers', + 'Environment :: Web Environment', + 'Framework :: Django', + 'Development Status :: 4 - Beta', + 'Programming Language :: Python :: 2.7'], )