﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
22972	HashedFilesMixin.patterns should limit URL matches to their respective filetypes	alex.ehlke@…	aehlke	"{{{HashedFilesMixin}}} contains a {{{patterns}}} property which maps file extensions to regex patterns. This works great for the default case that Django ships with  {{{""*.css""}}} as the only filetype, but results in surprising behavior once extended with multiple filetypes. I would expect the regex patterns to only apply to the filetype they're categorized under, but once I added {{{""*.js""}}} to {{{patterns}}} (via subclassing), the CSS rules also applied to my JS files.

My use-case of extending this is to add URL rewriting to JS source map references, e.g. {{{//# sourceMappingURL=foo.js.map }}} which can appear at the end of JS files. I need to be able to rewrite these URLs in the same way that Django's staticfiles can rewrite URLs in CSS, for e.g. adding hashes to filenames.

Once I tried extending {{{patterns}}} with this:
{{{
    patterns = HashedFilesMixin.patterns + (
        (""*.js"", (
            (r""""""(//# sourceMappingURL=(\s*))"""""", """"""//# sourceMappingURL=%s""""""),
        )),
    )
}}}
The surprising and broken behavior was that Django tried to rewrite ""URLs"" for this JS (from Backbone.js): {{{this.loadUrl(window.location.hash)}}}, which matched the CSS pattern for rewriting {{{url(foo)}}} because the regex patterns are case-insensitive.

This also applies to the previous {{{CachedFilesMixin}}} from before 1.7.

Please let me know if a fix for this would be accepted, and I'll put together a test case and patch."	Bug	closed	contrib.staticfiles	dev	Normal	duplicate	HashedFilesMixin CachedFilesMixin staticfiles		Accepted	1	0	0	1	0	0
