diff --git a/reviewboard/diffviewer/diffutils.py b/reviewboard/diffviewer/diffutils.py
index d087a0660aa68e8e11f2a65c2cd2fcecb7fe5ff7..a109733dd45428bd0d23e6b63b6e68d458619823 100644
--- a/reviewboard/diffviewer/diffutils.py
+++ b/reviewboard/diffviewer/diffutils.py
@@ -900,6 +900,7 @@ def get_diff_files(diffset, filediff=None, interdiffset=None,
                             break
 
         f = {
+            'minified': 'min' in depot_filename.split('.'),
             'depot_filename': depot_filename,
             'dest_filename': dest_filename or depot_filename,
             'revision': source_revision,
@@ -956,6 +957,13 @@ def populate_diff_chunks(files, enable_syntax_highlighting=True,
     This accepts a list of files (generated by get_diff_files) and generates
     diff chunk data for each file in the list. The chunk data is stored in
     the file state.
+
+    Checks the file content's number of chunks and number of lines in those
+    to determine if there are less than 20 lines to determine the file to
+    possibly be a minified file that does not have the '.min.' file extension.
+
+    The chunk lines are then checked to be greater than 500 characters to be
+    determined to be long enough to contain a minified script in the line.
     """
     from reviewboard.diffviewer.chunk_generator import get_diff_chunk_generator
 
@@ -976,6 +984,12 @@ def populate_diff_chunks(files, enable_syntax_highlighting=True,
             'whitespace_only': len(chunks) > 0,
         })
 
+        if len(chunks) > 0:
+            if chunks[0]['numlines'] < 20 and not diff_file['minified']:
+                for line in chunks[0]['lines']:
+                    if len(line[2]) > 500 or len(line[5]) > 500:
+                        diff_file['minified'] = True
+
         for j, chunk in enumerate(chunks):
             chunk['index'] = j
 
diff --git a/reviewboard/diffviewer/renderers.py b/reviewboard/diffviewer/renderers.py
index adb1d077896074e374e84a4b9c67074662b5b2e5..c942e25333725d6979118eed759486e64fa6e864 100644
--- a/reviewboard/diffviewer/renderers.py
+++ b/reviewboard/diffviewer/renderers.py
@@ -36,7 +36,7 @@ class DiffRenderer(object):
     def __init__(self, diff_file, chunk_index=None, highlighting=False,
                  collapse_all=True, lines_of_context=None, extra_context=None,
                  allow_caching=True, template_name=default_template_name,
-                 show_deleted=False):
+                 show_deleted=False, show_minified=False):
         self.diff_file = diff_file
         self.chunk_index = chunk_index
         self.highlighting = highlighting
@@ -47,6 +47,7 @@ class DiffRenderer(object):
         self.template_name = template_name
         self.num_chunks = 0
         self.show_deleted = show_deleted
+        self.show_minified = show_minified
 
         if self.lines_of_context and len(self.lines_of_context) == 1:
             # If we only have one value, then assume it represents before
@@ -136,6 +137,9 @@ class DiffRenderer(object):
         if self.show_deleted:
             key += '-show_deleted'
 
+        if self.show_minified:
+            key += '-show_minified'
+
         key += '-%s-%s' % (get_language(), settings.TEMPLATE_SERIAL)
 
         return key
@@ -247,6 +251,7 @@ class DiffRenderer(object):
             'equal_lines': equal_lines,
             'standalone': self.chunk_index is not None,
             'show_deleted': self.show_deleted,
+            'show_minified': self.show_minified,
         })
 
         return context
diff --git a/reviewboard/diffviewer/tests/test_diffutils.py b/reviewboard/diffviewer/tests/test_diffutils.py
index 2500cb279810248b01c5538d80d9917451c076ad..155f78d9118304023f06c156c22b86e999e52ead 100644
--- a/reviewboard/diffviewer/tests/test_diffutils.py
+++ b/reviewboard/diffviewer/tests/test_diffutils.py
@@ -738,6 +738,58 @@ class GetDiffFilesTests(BaseFileDiffAncestorTests):
         'test_users',
     ] + BaseFileDiffAncestorTests.fixtures
 
+    def test_minified_file_detection(self):
+        """Testing get_diff_files for minified detection results"""
+        repository = self.create_repository(tool_name='Git')
+        review_request = self.create_review_request(repository=repository)
+
+        diff_min = (b'diff --git a/min.txt b/min.txt\n'
+                    b'deleted file mode 100644\n'
+                    b'index d45ac29..0000000\n'
+                    b'--- a/min.txt\n'
+                    b'+++ /dev/null\n'
+                    b'@@ -1,2 +0,0 @@\n'
+                    b'-// test comment here\n'
+                    b'+CODE.RGBA_PVRTC_2BPPV1_Format=1120;'
+                    b'CODE.Color=function(a){return 3===arguments.length?'
+                    b'this.setRGB(arguments[0],arguments[1],arguments[2])};'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'FOO.SHADER.Format=(argument1>argument2)?123512:122211;'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'CODE.RGBA_PVRTC_2BPPV1_Format=1120;'
+                    b'CODE.Color=function(a){return 3===arguments.length?'
+                    b'this.setRGB(arguments[0],arguments[1],arguments[2])};'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'FOO.SHADER.Format=(argument1>argument2)?123512:122211;'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'diff --git a/min1.txt b/min1.txt\n'
+                    b'index 0000000..d45ac29\n'
+                    b'--- /dev/null\n'
+                    b'+++ b/min1.txt\n'
+                    b'@@ -0,0 +1,2 @@\n'
+                    b'+//test comment here\n'
+                    b'+CODE.RGBA_PVRTC_2BPPV1_Format=1120;'
+                    b'CODE.Color=function(a){return 3===arguments.length?'
+                    b'this.setRGB(arguments[0],arguments[1],arguments[2])};'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'FOO.SHADER.Format=(argument1>argument2)?123512:122211;'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'CODE.RGBA_PVRTC_2BPPV1_Format=1120;'
+                    b'CODE.Color=function(a){return 3===arguments.length?'
+                    b'this.setRGB(arguments[0],arguments[1],arguments[2])};'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});'
+                    b'FOO.SHADER.Format=(argument1>argument2)?123512:122211;'
+                    b'void 0===Math.sign&&(Math.sign=function(a){return 0});')
+
+        diffset = self.create_diffset(review_request=review_request)
+        self.create_filediff(diffset=diffset, source_file='min.txt',
+                             dest_file='min1.txt', status=FileDiff.MODIFIED,
+                             diff=diff_min)
+        diff_files = get_diff_files(diffset=diffset)
+
+        self.assertEqual(diff_files[0]['minified'], True)
+
+
     def test_interdiff_when_renaming_twice(self):
         """Testing get_diff_files with interdiff when renaming twice"""
         repository = self.create_repository(tool_name='Git')
diff --git a/reviewboard/diffviewer/views.py b/reviewboard/diffviewer/views.py
index 54ac7987f085e4036617215f47acd9bd209eb57c..a815323e93f09ab6a9d0de95590cad49ef2a6b6a 100644
--- a/reviewboard/diffviewer/views.py
+++ b/reviewboard/diffviewer/views.py
@@ -525,7 +525,8 @@ class DiffFragmentView(View):
                 The following keys are required: ``collapse_all`` and
                 ``highlighting``.
 
-                The following key is optional: ``show_deleted``.
+                The following keys are optional: ``show_deleted`` and
+                ``show_minified``.
 
             filediff_id (int):
                 The ID of the
@@ -557,6 +558,11 @@ class DiffFragmentView(View):
         if show_deleted:
             etag += ':%s' % show_deleted
 
+        show_minified = renderer_settings.get('show_minified')
+
+        if show_minified:
+            etag += ':%s' % show_minified
+
         return encode_etag(etag)
 
     def process_diffset_info(self, diffset_or_id, filediff_id,
@@ -712,6 +718,7 @@ class DiffFragmentView(View):
             collapse_all = get_collapse_diff(self.request)
 
         show_deleted = (self.request.GET.get('show-deleted') == '1')
+        show_minified = (self.request.GET.get('show-minified') == '1')
 
         return {
             'chunk_index': chunk_index,
@@ -719,6 +726,7 @@ class DiffFragmentView(View):
             'highlighting': highlighting,
             'lines_of_context': lines_of_context,
             'show_deleted': show_deleted,
+            'show_minified': show_minified,
         }
 
     def _get_requested_diff_file(self, diffset, filediff, interdiffset,
diff --git a/reviewboard/static/rb/css/pages/diffviewer.less b/reviewboard/static/rb/css/pages/diffviewer.less
index 47e5ee912bfc546b552f3b7a543008964fdaf5ec..df15612db369126dbbebc8010579bcf7f1e4eb6b 100644
--- a/reviewboard/static/rb/css/pages/diffviewer.less
+++ b/reviewboard/static/rb/css/pages/diffviewer.less
@@ -335,6 +335,15 @@
       }
     }
 
+    &.minified td {
+      padding: 1em;
+
+      a {
+	color: #0000FF;
+	text-decoration: underline;
+      }
+    }
+
     &.new-empty-file td {
       background: @diff-insert-color;
       padding: 1em;
diff --git a/reviewboard/static/rb/js/diffviewer/models/diffFileModel.es6.js b/reviewboard/static/rb/js/diffviewer/models/diffFileModel.es6.js
index 0b558bb2e3cdda3b610eaddfa9576bb8c2af0d76..c943ddbcf8cf167598fffafd604fee51374402db 100644
--- a/reviewboard/static/rb/js/diffviewer/models/diffFileModel.es6.js
+++ b/reviewboard/static/rb/js/diffviewer/models/diffFileModel.es6.js
@@ -16,6 +16,9 @@
  *     deleted (boolean):
  *         Whether or not the file was deleted.
  *
+ *     minified (boolean):
+ *         Whether or not the file is minified.
+ *
  *     depotFilename (string):
  *         The file's path in the repository.
  *
@@ -46,6 +49,7 @@ RB.DiffFile = Backbone.Model.extend({
         binary: false,
         commentCounts: null,
         deleted: false,
+	minified: false,
         depotFilename: null,
         destFilename: null,
         destRevision: null,
@@ -74,6 +78,7 @@ RB.DiffFile = Backbone.Model.extend({
             baseFileDiffID: rsp.base_filediff_id,
             commentCounts: rsp.comment_counts,
             deleted: rsp.deleted,
+	    minified: rsp.minified,
             depotFilename: rsp.depot_filename,
             destFilename: rsp.dest_filename,
             destRevision: rsp.dest_revision,
diff --git a/reviewboard/static/rb/js/diffviewer/models/diffReviewableModel.es6.js b/reviewboard/static/rb/js/diffviewer/models/diffReviewableModel.es6.js
index 450acb87b28dcbec2bd9b10652fb49583bb27309..2f646ca0a3e0f04466735b9a9c65e1708b0f2076 100644
--- a/reviewboard/static/rb/js/diffviewer/models/diffReviewableModel.es6.js
+++ b/reviewboard/static/rb/js/diffviewer/models/diffReviewableModel.es6.js
@@ -99,6 +99,10 @@ RB.DiffReviewable = RB.AbstractReviewable.extend({
             url += '&show-deleted=1';
         }
 
+	if (options.showMinified) {
+            url += '&show-minified=1';
+	}
+
         url += '&' + TEMPLATE_SERIAL;
 
         this._fetchFragment({
diff --git a/reviewboard/static/rb/js/diffviewer/models/tests/diffFileModelTests.es6.js b/reviewboard/static/rb/js/diffviewer/models/tests/diffFileModelTests.es6.js
index cec5de572eecf95fe98d2497afd9612968b73559..a18b86ccad603a866fa88a009bd9b4c57c824ec7 100644
--- a/reviewboard/static/rb/js/diffviewer/models/tests/diffFileModelTests.es6.js
+++ b/reviewboard/static/rb/js/diffviewer/models/tests/diffFileModelTests.es6.js
@@ -6,6 +6,7 @@ suite('rb/diffviewer/models/DiffFile', function() {
                 binary: false,
                 comment_counts: [1],
                 deleted: true,
+		minified: true,
                 depot_filename: 'foo',
                 dest_filename: 'bar',
                 filediff: {
@@ -27,6 +28,7 @@ suite('rb/diffviewer/models/DiffFile', function() {
             expect(data.binary).toBe(false);
             expect(data.commentCounts).toEqual([1]);
             expect(data.deleted).toBe(true);
+	    expect(data.minified).toBe(true);
             expect(data.depotFilename).toBe('foo');
             expect(data.destFilename).toBe('bar');
             expect(data.filediff).not.toBe(undefined);
diff --git a/reviewboard/static/rb/js/diffviewer/views/diffReviewableView.es6.js b/reviewboard/static/rb/js/diffviewer/views/diffReviewableView.es6.js
index 80283cf818b127b14ee91d7970e35e9d1706a911..5dab1baf21783d5ba0e14ec1047849588f66c09a 100644
--- a/reviewboard/static/rb/js/diffviewer/views/diffReviewableView.es6.js
+++ b/reviewboard/static/rb/js/diffviewer/views/diffReviewableView.es6.js
@@ -18,6 +18,7 @@ RB.DiffReviewableView = RB.AbstractReviewableView.extend({
         'click .diff-collapse-btn': '_onCollapseChunkClicked',
         'click .diff-expand-btn': '_onExpandChunkClicked',
         'click .show-deleted-content-action': '_onShowDeletedClicked',
+	'click .show-minified-content-action': '_onShowMinifiedClicked',
         'mouseup': '_onMouseUp'
     },
 
@@ -640,4 +641,28 @@ RB.DiffReviewableView = RB.AbstractReviewableView.extend({
 
         this.trigger('showDeletedClicked');
     },
+
+    /**
+     * Handler for when show content is clicked.
+     *
+     * This requeues the corresponding diff to show its minified content.
+     *
+     * Args:
+     *     e (jQuery.Event):
+     *         The ``click`` event that triggered this handler.
+     */
+    _onShowMinifiedClicked: function(e) {
+	e.preventDefault();
+	e.stopPropagation();
+
+	/*
+	 * Replace the current contents ("This file is minified ... ") with a
+	 * spinner. This will automatically be replaced with the file contents
+	 * once loaded from the server.
+	 */
+	$(e.target).parent()
+	    .html('<span class="fa fa-spinner fa-pulse"></span>');
+
+	this.trigger('showMinifiedClicked');
+    }
 });
diff --git a/reviewboard/static/rb/js/pages/views/diffViewerPageView.es6.js b/reviewboard/static/rb/js/pages/views/diffViewerPageView.es6.js
index 6fbca7c84c3db6a1c0793814678c9904b8b57c8e..b3ac807f33e0fe5e3c4316c1bf566433347c82bd 100644
--- a/reviewboard/static/rb/js/pages/views/diffViewerPageView.es6.js
+++ b/reviewboard/static/rb/js/pages/views/diffViewerPageView.es6.js
@@ -334,21 +334,21 @@ RB.DiffViewerPageView = RB.ReviewablePageView.extend({
         $.funcQueue('diff_files').add(() => {
             const fileDiffID = diffReviewable.get('fileDiffID');
 
-            if (!options.showDeleted && $(`#file${fileDiffID}`).length === 1) {
+            if (!options.showDeleted && !options.showMinified
+		    && $(`#file${fileDiffID}`).length === 1) {
                 /*
                  * We already have this diff (probably pre-loaded), and we
-                 * don't want to requeue it to show its deleted content.
+                 * don't want to requeue it to show its deleted/min content.
                  */
                 this._renderFileDiff(diffReviewable);
             } else {
                 /*
                  * We either want to queue this diff for the first time, or we
-                 * want to requeue it to show its deleted content.
+                 * want to requeue it to show its deleted or minified content.
                  */
-                const prefix = (options.showDeleted
+                const prefix = ((options.showDeleted || options.showMinified)
                                 ? '#file'
                                 : '#file_container_');
-
                 diffReviewable.getRenderedDiff({
                     complete: xhr => {
                         const $container = $(prefix + fileDiffID)
@@ -481,6 +481,11 @@ RB.DiffViewerPageView = RB.ReviewablePageView.extend({
             $.funcQueue('diff_files').start();
         });
 
+	this.listenTo(diffReviewableView, 'showMinifiedClicked', () => {
+            this.queueLoadDiff(diffReviewable, {showMinified: true});
+	    $.funcQueue('diff_files').start();
+	});
+
         $.funcQueue('diff_files').next();
     },
 
diff --git a/reviewboard/templates/diffviewer/diff_file_fragment.html b/reviewboard/templates/diffviewer/diff_file_fragment.html
index fb029d45e1f72a5d2757a68e560b551b5c6ac3ab..bd5ff1e4e0c5a849a2cfa1ac4bbdbb83f8e00af8 100644
--- a/reviewboard/templates/diffviewer/diff_file_fragment.html
+++ b/reviewboard/templates/diffviewer/diff_file_fragment.html
@@ -49,6 +49,7 @@
   {% if file.is_new_file %}newfile{% endif %}
   {% if file.binary %}diff-binary{% endif %}
   {% if file.deleted %}diff-deleted{% endif %}
+  {% if file.minified %}diff-minified{% endif %}
   {% endspaceless %}"
        data-lines-equal="{{equal_lines}}">
  <colgroup>
@@ -76,7 +77,7 @@
   </th>
 {%  else %}
 {%   if not file.is_new_file %}
-   <th colspan="2"><a name="{{file.index}}" class="file-anchor"></a>{{ file.depot_filename }}</th>
+<th colspan="2"><a name="{{file.index}}" class="file-anchor"></a>{{ file.depot_filename }}</th>
 {%   endif %}
    <th colspan="2">
 {%   if file.is_new_file %}
@@ -189,6 +190,15 @@
    <td colspan="4">{% trans "This is an empty file." %}</td>
   </tr>
  </tbody>
+{% elif file.minified and not show_minified %}
+ <tbody class="minified">
+  <tr>
+   <td colspan="4">
+{%   trans "This file is minified." %}
+     <a class="show-minified-content-action" href="#">{% trans "Show content." %}</a>
+   </td>
+  </tr>
+ </tbody>
 {% elif file.deleted and not show_deleted %}
  <tbody class="deleted">
   <tr>
