diff --git a/app/views/tree/_blob.html.haml b/app/views/tree/_blob.html.haml
index 93271d948af0ab6e89cc79adee8cb8dfe261facb..b69135865232e96c706b2cd98577e11c1ad6b4c9 100644
--- a/app/views/tree/_blob.html.haml
+++ b/app/views/tree/_blob.html.haml
@@ -6,32 +6,8 @@
       %small #{blob.mode}
     %span.options= render "tree/blob_actions"
   - if blob.text?
-    - if gitlab_markdown?(blob.name)
-      .file_content.wiki
-        = preserve do
-          = markdown(blob.data)
-    - elsif markup?(blob.name)
-      .file_content.wiki
-        = raw GitHub::Markup.render(blob.name, blob.data)
-    - else
-      .file_content.code
-        - unless blob.empty?
-          %div{class: current_user.dark_scheme ? "black" : "white"}
-            = preserve do
-              = raw blob.colorize(options: { linenos: 'True'})
-        - else
-          %h4.nothing_here_message Empty file
-
+    = render "tree/blob/text", blob: blob
   - elsif blob.image?
-    .file_content.image_file
-      %img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}"}
-
+    = render "tree/blob/image", blob: blob
   - else
-    .file_content.blob_file
-      %center
-        = link_to project_blob_path(@project, @id) do
-          %div.padded
-            %br
-            = image_tag "download.png", width: 64
-            %h3
-              Download (#{blob.mb_size})
+    = render "tree/blob/download", blob: blob
diff --git a/app/views/tree/blob/_download.html.haml b/app/views/tree/blob/_download.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..7623e6f46d0562c9be6409d3f3a75dc2186f0faf
--- /dev/null
+++ b/app/views/tree/blob/_download.html.haml
@@ -0,0 +1,8 @@
+.file_content.blob_file
+  %center
+    = link_to project_blob_path(@project, @id) do
+      %div.padded
+        %br
+        = image_tag "download.png", width: 64
+        %h3
+          Download (#{blob.mb_size})
diff --git a/app/views/tree/blob/_image.html.haml b/app/views/tree/blob/_image.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..7b23f0c810ca41bb5def025c3b41920383005d29
--- /dev/null
+++ b/app/views/tree/blob/_image.html.haml
@@ -0,0 +1,2 @@
+.file_content.image_file
+  %img{ src: "data:#{blob.mime_type};base64,#{Base64.encode64(blob.data)}"}
diff --git a/app/views/tree/blob/_text.html.haml b/app/views/tree/blob/_text.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..c506a39f3389d22f3f80cdd8bad45c12e16f90b1
--- /dev/null
+++ b/app/views/tree/blob/_text.html.haml
@@ -0,0 +1,15 @@
+- if gitlab_markdown?(blob.name)
+  .file_content.wiki
+    = preserve do
+      = markdown(blob.data)
+- elsif markup?(blob.name)
+  .file_content.wiki
+    = raw GitHub::Markup.render(blob.name, blob.data)
+- else
+  .file_content.code
+    - unless blob.empty?
+      %div{class: current_user.dark_scheme ? "black" : "white"}
+        = preserve do
+          = raw blob.colorize(options: { linenos: 'True'})
+    - else
+      %h4.nothing_here_message Empty file