Skip to content

Commit

Permalink
Improved on r17454 to ensure that collapse.js only gets minified wh…
Browse files Browse the repository at this point in the history
…en `DEBUG` is `False`.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17455 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
jphalip committed Feb 5, 2012
1 parent a90aad3 commit 0f6cf4a
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 63 deletions.
6 changes: 5 additions & 1 deletion django/contrib/admin/helpers.py
Expand Up @@ -11,6 +11,7 @@
from django.utils.html import escape, conditional_escape from django.utils.html import escape, conditional_escape
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.conf import settings




ACTION_CHECKBOX_NAME = '_selected_action' ACTION_CHECKBOX_NAME = '_selected_action'
Expand Down Expand Up @@ -75,7 +76,10 @@ def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(),


def _media(self): def _media(self):
if 'collapse' in self.classes: if 'collapse' in self.classes:
js = ['jquery.min.js', 'jquery.init.js', 'collapse.min.js'] extra = '' if settings.DEBUG else '.min'
js = ['jquery%s.js' % extra,
'jquery.init.js',
'collapse%s.js' % extra]
return forms.Media(js=[static('admin/js/%s' % url) for url in js]) return forms.Media(js=[static('admin/js/%s' % url) for url in js])
return forms.Media() return forms.Media()
media = property(_media) media = property(_media)
Expand Down
6 changes: 3 additions & 3 deletions django/contrib/admin/options.py
Expand Up @@ -395,7 +395,7 @@ def urls(self):


@property @property
def media(self): def media(self):
extra = "" if settings.DEBUG else ".min" extra = '' if settings.DEBUG else '.min'
js = [ js = [
'core.js', 'core.js',
'admin/RelatedObjectLookups.js', 'admin/RelatedObjectLookups.js',
Expand Down Expand Up @@ -1373,8 +1373,8 @@ def __init__(self, parent_model, admin_site):


@property @property
def media(self): def media(self):
extra = "" if settings.DEBUG else ".min" extra = '' if settings.DEBUG else '.min'
js = ['jquery%s.js' % extra, 'jquery.init.js', "inlines%s.js" % extra] js = ['jquery%s.js' % extra, 'jquery.init.js', 'inlines%s.js' % extra]
if self.prepopulated_fields: if self.prepopulated_fields:
js.extend(['urlify.js', 'prepopulate%s.js' % extra]) js.extend(['urlify.js', 'prepopulate%s.js' % extra])
if self.filter_vertical or self.filter_horizontal: if self.filter_vertical or self.filter_horizontal:
Expand Down
15 changes: 14 additions & 1 deletion tests/regressiontests/admin_views/admin.py
Expand Up @@ -35,7 +35,19 @@ def callable_year(dt_value):


class ArticleInline(admin.TabularInline): class ArticleInline(admin.TabularInline):
model = Article model = Article

prepopulated_fields = {
'title' : ('content',)
}
fieldsets=(
('Some fields', {
'classes': ('collapse',),
'fields': ('title', 'content')
}),
('Some other fields', {
'classes': ('wide',),
'fields': ('date', 'section')
})
)


class ChapterInline(admin.TabularInline): class ChapterInline(admin.TabularInline):
model = Chapter model = Chapter
Expand Down Expand Up @@ -512,6 +524,7 @@ def get_urls(self):
name='cable_extra'), name='cable_extra'),
) )



site = admin.AdminSite(name="admin") site = admin.AdminSite(name="admin")
site.register(Article, ArticleAdmin) site.register(Article, ArticleAdmin)
site.register(CustomArticle, CustomArticleAdmin) site.register(CustomArticle, CustomArticleAdmin)
Expand Down
1 change: 0 additions & 1 deletion tests/regressiontests/admin_views/models.py
Expand Up @@ -3,7 +3,6 @@
import tempfile import tempfile
import os import os


from django import forms
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
Expand Down
35 changes: 35 additions & 0 deletions tests/regressiontests/admin_views/tests.py
Expand Up @@ -573,6 +573,7 @@ def test_allowed_filtering_15103(self):
except SuspiciousOperation: except SuspiciousOperation:
self.fail("Filters should be allowed if they are defined on a ForeignKey pointing to this model") self.fail("Filters should be allowed if they are defined on a ForeignKey pointing to this model")



class AdminJavaScriptTest(AdminViewBasicTest): class AdminJavaScriptTest(AdminViewBasicTest):
urls = "regressiontests.admin_views.urls" urls = "regressiontests.admin_views.urls"


Expand All @@ -598,6 +599,40 @@ def testMultiWidgetFirsFieldFocus(self):
) )




def test_js_minified_only_if_debug_is_false(self):
"""
Ensure that the minified versions of the JS files are only used when
DEBUG is False.
Refs #17521.
"""
with override_settings(DEBUG=False):
response = self.client.get(
'/test_admin/%s/admin_views/section/add/' % self.urlbit)
self.assertNotContains(response, 'jquery.js')
self.assertContains(response, 'jquery.min.js')
self.assertNotContains(response, 'prepopulate.js')
self.assertContains(response, 'prepopulate.min.js')
self.assertNotContains(response, 'actions.js')
self.assertContains(response, 'actions.min.js')
self.assertNotContains(response, 'collapse.js')
self.assertContains(response, 'collapse.min.js')
self.assertNotContains(response, 'inlines.js')
self.assertContains(response, 'inlines.min.js')
with override_settings(DEBUG=True):
response = self.client.get(
'/test_admin/%s/admin_views/section/add/' % self.urlbit)
self.assertContains(response, 'jquery.js')
self.assertNotContains(response, 'jquery.min.js')
self.assertContains(response, 'prepopulate.js')
self.assertNotContains(response, 'prepopulate.min.js')
self.assertContains(response, 'actions.js')
self.assertNotContains(response, 'actions.min.js')
self.assertContains(response, 'collapse.js')
self.assertNotContains(response, 'collapse.min.js')
self.assertContains(response, 'inlines.js')
self.assertNotContains(response, 'inlines.min.js')


class SaveAsTests(TestCase): class SaveAsTests(TestCase):
urls = "regressiontests.admin_views.urls" urls = "regressiontests.admin_views.urls"
fixtures = ['admin-views-users.xml','admin-views-person.xml'] fixtures = ['admin-views-users.xml','admin-views-person.xml']
Expand Down
57 changes: 0 additions & 57 deletions tests/regressiontests/modeladmin/tests.py
Expand Up @@ -494,63 +494,6 @@ class BandAdmin(ModelAdmin):
list(ma.get_formsets(request))[0]().forms[0].fields.keys(), list(ma.get_formsets(request))[0]().forms[0].fields.keys(),
['extra', 'transport', 'id', 'DELETE', 'main_band']) ['extra', 'transport', 'id', 'DELETE', 'main_band'])


def test_media_minified_only_if_debug_is_false(self):
"""
Ensure that, with ModelAdmin, the minified versions of the JS files are
only used when DEBUG is False.
Refs #17521.
"""
ma = ModelAdmin(Band, self.site)
ma.prepopulated_fields = ['something']
ma.actions = ['some action']

with override_settings(DEBUG=False):
media_js = str(ma.media['js'])
self.assertFalse('jquery.js' in media_js)
self.assertTrue('jquery.min.js' in media_js)
self.assertFalse('prepopulate.js' in media_js)
self.assertTrue('prepopulate.min.js' in media_js)
self.assertFalse('actions.js' in media_js)
self.assertTrue('actions.min.js' in media_js)
with override_settings(DEBUG=True):
media_js = str(ma.media['js'])
self.assertTrue('jquery.js' in media_js)
self.assertFalse('jquery.min.js' in media_js)
self.assertTrue('prepopulate.js' in media_js)
self.assertFalse('prepopulate.min.js' in media_js)
self.assertTrue('actions.js' in media_js)
self.assertFalse('actions.min.js' in media_js)

def test_inlines_media_minified_only_if_debug_is_false(self):
"""
Ensure that, with InlineModelAdmin, the minified versions of the JS
files are only used when DEBUG is False.
Refs #17521.
"""
class InlineBandAdmin(InlineModelAdmin):
model = Band

ma = InlineBandAdmin(Band, self.site)
ma.prepopulated_fields = ['something']
ma.actions = ['some action']

with override_settings(DEBUG=False):
media_js = str(ma.media['js'])
self.assertFalse('jquery.js' in media_js)
self.assertTrue('jquery.min.js' in media_js)
self.assertFalse('prepopulate.js' in media_js)
self.assertTrue('prepopulate.min.js' in media_js)
self.assertFalse('inlines.js' in media_js)
self.assertTrue('inlines.min.js' in media_js)
with override_settings(DEBUG=True):
media_js = str(ma.media['js'])
self.assertTrue('jquery.js' in media_js)
self.assertFalse('jquery.min.js' in media_js)
self.assertTrue('prepopulate.js' in media_js)
self.assertFalse('prepopulate.min.js' in media_js)
self.assertTrue('inlines.js' in media_js)
self.assertFalse('inlines.min.js' in media_js)



class ValidationTests(unittest.TestCase): class ValidationTests(unittest.TestCase):
def test_validation_only_runs_in_debug(self): def test_validation_only_runs_in_debug(self):
Expand Down

0 comments on commit 0f6cf4a

Please sign in to comment.