diff --git a/djangojs/conf.py b/djangojs/conf.py
index b2b43ca..e9423bc 100644
--- a/djangojs/conf.py
+++ b/djangojs/conf.py
@@ -17,6 +17,7 @@
'JS_USER_ENABLED': True,
'JS_URLS': None,
'JS_URLS_EXCLUDE': None,
+ 'JS_URL_CONFS': _settings.ROOT_URLCONF,
'JS_URLS_NAMESPACES': None,
'JS_URLS_NAMESPACES_EXCLUDE': None,
'JS_URLS_UNNAMED': False,
diff --git a/djangojs/context_serializer.py b/djangojs/context_serializer.py
index 0c34c32..a7ed7b6 100644
--- a/djangojs/context_serializer.py
+++ b/djangojs/context_serializer.py
@@ -4,6 +4,7 @@
import json
import logging
+from django.conf import settings
from django.template.context import RequestContext
from django.utils import translation, six
@@ -54,6 +55,13 @@ def as_dict(self):
data[key] = value
if settings.JS_USER_ENABLED:
self.handle_user(data)
+ # Monkey patch for https://github.com/noirbizarre/django.js/issues/53
+ data.update({
+ 'STATIC_URL': settings.STATIC_URL,
+ 'MEDIA_URL': settings.MEDIA_URL,
+ 'LANGUAGES': settings.LANGUAGES,
+ 'LANGUAGE_CODE': settings.LANGUAGE_CODE,
+ })
return data
def as_json(self):
diff --git a/djangojs/phantomjs/qunit-runner.js b/djangojs/phantomjs/qunit-runner.js
index 86ec9d3..256d0ac 100644
--- a/djangojs/phantomjs/qunit-runner.js
+++ b/djangojs/phantomjs/qunit-runner.js
@@ -53,7 +53,7 @@ page.onConsoleMessage = function(msg) {
console.log(msg);
};
-page.open(phantom.args[0], function(status){
+page.open(system.args[1], function(status){
if (status !== "success") {
console.log("Unable to access network");
phantom.exit(1);
diff --git a/djangojs/runners.py b/djangojs/runners.py
index d0ce2c5..f850a16 100644
--- a/djangojs/runners.py
+++ b/djangojs/runners.py
@@ -17,12 +17,16 @@
from django.core.urlresolvers import reverse
from django.template.loader import render_to_string
from django.test import LiveServerTestCase
+from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from django.utils.encoding import python_2_unicode_compatible
from djangojs.tap import TapParser
from djangojs.utils import StorageGlobber
-from django.utils.unittest import TestCase
+try:
+ from django.utils.unittest import TestCase
+except ImportError:
+ from django.test.testcases import TestCase
#: Console output line length for separators
LINE_SIZE = 70
@@ -175,7 +179,7 @@ def cleanup(self):
pass
-class JsTestCase(PhantomJsRunner, LiveServerTestCase):
+class JsTestCase(PhantomJsRunner, StaticLiveServerTestCase):
'''
A PhantomJS suite that run against the Django LiveServerTestCase
'''
diff --git a/djangojs/templates/djangojs/django_js_init.html b/djangojs/templates/djangojs/django_js_init.html
index eeffb7c..fa07439 100644
--- a/djangojs/templates/djangojs/django_js_init.html
+++ b/djangojs/templates/djangojs/django_js_init.html
@@ -1,5 +1,4 @@
{% load js %}
-{% load url from future %}
{% if js.i18n %}
diff --git a/djangojs/templatetags/js.py b/djangojs/templatetags/js.py
index 6c6b7f5..72401ee 100644
--- a/djangojs/templatetags/js.py
+++ b/djangojs/templatetags/js.py
@@ -7,6 +7,7 @@
from django import template
from django.contrib.staticfiles.storage import staticfiles_storage
from django.utils import six
+from django.utils.safestring import mark_safe
from djangojs import JQUERY_MIGRATE_VERSION
from djangojs.conf import settings
@@ -112,9 +113,9 @@ def javascript(filename, type='text/javascript'):
'''A simple shortcut to render a ``script`` tag to a static javascript file'''
if '?' in filename and len(filename.split('?')) is 2:
filename, params = filename.split('?')
- return '' % (type, staticfiles_storage.url(filename), params)
+ return mark_safe('' % (type, staticfiles_storage.url(filename), params))
else:
- return '' % (type, staticfiles_storage.url(filename))
+ return mark_safe('' % (type, staticfiles_storage.url(filename)))
@register.simple_tag
@@ -138,7 +139,7 @@ def coffee(filename):
@register.simple_tag
def css(filename):
'''A simple shortcut to render a ``link`` tag to a static CSS file'''
- return '' % staticfiles_storage.url(filename)
+ return mark_safe('' % staticfiles_storage.url(filename))
def _boolean(value):
diff --git a/djangojs/tests/test_tap.py b/djangojs/tests/test_tap.py
index 9dc3ec0..28f9ae8 100644
--- a/djangojs/tests/test_tap.py
+++ b/djangojs/tests/test_tap.py
@@ -130,7 +130,6 @@ def test_parse_module(self):
class TapParserTest(unittest.TestCase):
def test_single_test(self):
'''Should parse a test and its children'''
- # import ipdb; ipdb.set_trace()
parser = TapParser(TapAssertion)
output = '''
# test: should be defined
diff --git a/djangojs/urls.py b/djangojs/urls.py
index 32d0a71..60bf42f 100644
--- a/djangojs/urls.py
+++ b/djangojs/urls.py
@@ -6,7 +6,7 @@
from django.conf.urls import patterns, url
from djangojs.conf import settings
-from djangojs.views import UrlsJsonView, ContextJsonView, JsInitView
+from djangojs.views import UrlsJsonView, ContextJsonView, JsInitView, cached_javascript_catalog
def js_info_dict():
@@ -33,5 +33,5 @@ def js_info_dict():
url(r'^init\.js$', JsInitView.as_view(), name='django_js_init'),
url(r'^urls$', UrlsJsonView.as_view(), name='django_js_urls'),
url(r'^context$', ContextJsonView.as_view(), name='django_js_context'),
- url(r'^translation$', 'django.views.i18n.javascript_catalog', js_info_dict(), name='js_catalog'),
+ url(r'^translation$', cached_javascript_catalog, js_info_dict(), name='js_catalog'),
)
diff --git a/djangojs/urls_serializer.py b/djangojs/urls_serializer.py
index f57452f..be9d9d2 100644
--- a/djangojs/urls_serializer.py
+++ b/djangojs/urls_serializer.py
@@ -39,8 +39,18 @@ def urls_as_dict():
'''
Get the URLs mapping as a dictionnary
'''
- module = settings.ROOT_URLCONF
- return _get_urls(module) if settings.JS_URLS_ENABLED else {}
+ module = settings.JS_URL_CONFS
+ urls = {}
+ if settings.JS_URLS_ENABLED:
+ if isinstance(module, (six.text_type, six.string_types)):
+ urls = _get_urls(module)
+ else:
+ for item in module:
+ urls = dict(urls.items() + _get_urls(item).items())
+ else:
+ return {}
+
+ return urls
def urls_as_json():
diff --git a/djangojs/views.py b/djangojs/views.py
index 713d8b3..1a6ac05 100644
--- a/djangojs/views.py
+++ b/djangojs/views.py
@@ -12,6 +12,7 @@
from django.utils.cache import patch_vary_headers
from django.views.decorators.cache import cache_page
from django.views.generic import View, TemplateView
+from django.views.i18n import javascript_catalog
from djangojs.conf import settings
from djangojs.urls_serializer import urls_as_dict, urls_as_json
@@ -150,3 +151,8 @@ def get_context_data(self, **kwargs):
context = super(QUnitView, self).get_context_data(**kwargs)
context['css_theme'] = 'js/test/libs/%s.css' % self.theme
return context
+
+
+@cache_page(60 * settings.JS_CACHE_DURATION)
+def cached_javascript_catalog(request, domain='djangojs', packages=None):
+ return javascript_catalog(request, domain, packages)