diff --git a/README.rst b/README.rst index f41848e..600c0e9 100644 --- a/README.rst +++ b/README.rst @@ -82,6 +82,13 @@ USAGE # or as a file signature_file_path = draw_signature(signature, as_file=True) +* By default, jSignature is made to work outside of admin, requiring that + you include the jQuery library in your ````. + + If you want to use jSignature in the Django admin site, set the + ``JSIGNATURE_JQUERY`` setting to ``admin``. Otherwise if set to any url + pointing to jQuery, it will be automatically included. + ================== CUSTOMIZATION ================== diff --git a/jsignature/fields.py b/jsignature/fields.py index 831cf91..0fece1d 100644 --- a/jsignature/fields.py +++ b/jsignature/fields.py @@ -14,12 +14,12 @@ from .forms import ( try: from django.utils import six + string_types = six.string_types except ImportError: string_types = str - class JSignatureField(models.Field): """ A model field handling a signature captured with jSignature diff --git a/jsignature/settings.py b/jsignature/settings.py index e20258d..ba0b04f 100644 --- a/jsignature/settings.py +++ b/jsignature/settings.py @@ -17,6 +17,9 @@ JSIGNATURE_UNDO_BUTTON = getattr( JSIGNATURE_RESET_BUTTON = getattr( settings, 'JSIGNATURE_RESET_BUTTON', True) +JSIGNATURE_JQUERY = getattr( + settings, 'JSIGNATURE_JQUERY', 'custom') + JSIGNATURE_DEFAULT_CONFIG = { 'width': JSIGNATURE_WIDTH, 'height': JSIGNATURE_HEIGHT, diff --git a/jsignature/static/js/django_jsignature.js b/jsignature/static/js/django_jsignature.js index df01be1..9c67e8a 100644 --- a/jsignature/static/js/django_jsignature.js +++ b/jsignature/static/js/django_jsignature.js @@ -1,21 +1,22 @@ -$(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"); - }); +(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 */ - $(".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)); - }); + /* Each time user is done drawing a stroke, update value of hidden input */ + $(".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 */ - $(".jsign-wrapper input").on("click", function(e) { - $(this).siblings('.jsign-container').jSignature('reset'); + /* Bind clear button */ + $(".jsign-wrapper input").on("click", function(e) { + $(this).siblings('.jsign-container').jSignature('reset'); + }); }); - -}); +})(jQuery || django.jQuery) diff --git a/jsignature/static/js/jsignature_admin_init.js b/jsignature/static/js/jsignature_admin_init.js new file mode 100644 index 0000000..c0a715d --- /dev/null +++ b/jsignature/static/js/jsignature_admin_init.js @@ -0,0 +1,4 @@ +if (django && django.jQuery) { + var jQuery = django.jQuery; + var $ = django.jQuery; +} diff --git a/jsignature/widgets.py b/jsignature/widgets.py index 5a0e5cc..6cdcf21 100644 --- a/jsignature/widgets.py +++ b/jsignature/widgets.py @@ -5,13 +5,13 @@ import json from django.template.loader import render_to_string -from django.forms.widgets import HiddenInput +from django import forms from django.core import validators from django.core.exceptions import ValidationError from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from jsignature.settings import JSIGNATURE_DEFAULT_CONFIG +from jsignature.settings import JSIGNATURE_DEFAULT_CONFIG, JSIGNATURE_JQUERY JSIGNATURE_EMPTY_VALUES = validators.EMPTY_VALUES + ('[]', ) @@ -23,7 +23,7 @@ except ImportError: string_types = str -class JSignatureWidget(HiddenInput): +class JSignatureWidget(forms.HiddenInput): """ A widget handling a signature capture field with with jSignature """ @@ -32,10 +32,21 @@ class JSignatureWidget(HiddenInput): # normal field, not a hidden one is_hidden = False - class Media: - js = ('admin/js/jquery.init.js', - 'js/jSignature.min.js', - 'js/django_jsignature.js') + @property + def media(self): + files = () + if JSIGNATURE_JQUERY == 'admin': + files = ( + 'admin/js/jquery.init.js', + 'js/jsignature_admin_init.js', + ) + elif JSIGNATURE_JQUERY != 'custom': + files = (JSIGNATURE_JQUERY,) + files += ( + 'js/jSignature.min.js', + 'js/django_jsignature.js', + ) + return forms.Media(js=files) def __init__(self, attrs=None, jsignature_attrs=None): super(JSignatureWidget, self).__init__(attrs)