From 0eba22b827956253486ae539b8173fa57f1a6de0 Mon Sep 17 00:00:00 2001
From: Josh Sudung <josh.sudung07@gmail.com>
Date: Fri, 30 Oct 2020 21:06:32 +0700
Subject: [PATCH] Implement document preview pre-upload Materi

---
 app/templates/app/base_dashboard.html |  1 +
 app/templates/unggah.html             | 15 +++++++++++++++
 staticfiles/css/button.css            |  5 +++++
 staticfiles/js/upload-preview.js      | 22 ++++++++++++++++++++++
 4 files changed, 43 insertions(+)
 create mode 100644 staticfiles/js/upload-preview.js

diff --git a/app/templates/app/base_dashboard.html b/app/templates/app/base_dashboard.html
index b828193..c74bd58 100644
--- a/app/templates/app/base_dashboard.html
+++ b/app/templates/app/base_dashboard.html
@@ -24,6 +24,7 @@
     <!-- Custom styles for this page -->
     <link href="{% static 'vendor/datatables/dataTables.bootstrap4.min.css' %}" rel="stylesheet">
     {% block stylesheets %}{% endblock %}
+    {% block scripts %}{% endblock %}
 </head>
 
 <body id="page-top" style="font-family: 'Poppins', sans-serif;">
diff --git a/app/templates/unggah.html b/app/templates/unggah.html
index 5f9a0c1..b6668bb 100644
--- a/app/templates/unggah.html
+++ b/app/templates/unggah.html
@@ -5,6 +5,10 @@
 <title>Unggah Materi | Digipus</title>
 {% endblock %}
 
+{% block scripts %}
+<script src="{% static 'js/upload-preview.js' %}"></script>
+{% endblock %}
+
 {% block content %}
 <div class="container">
     <div class="col-20">
@@ -36,6 +40,17 @@
                     {% if field.help_text %}
                     <p class="help">{{ field.help_text|safe }}</p>
                     {% endif %}
+                    {% if field.name == 'cover' %}
+                    <div hidden id="frame_cover_parent" class="my-3">
+                      <div class="mb-2">Preview Cover:</div>
+                      <img id="frame_cover" class="constraint-frame" alt="Cover Preview" />
+                    </div>
+                    {% elif field.name == 'content' %}
+                    <div hidden id="frame_content_parent" class="my-3">
+                      <div class="mb-2">Preview Content:</div>
+                      <embed id="frame_content" width="550px" height="550px" />
+                    </div>
+                    {% endif %}
                 </div>
             </div>
             {% endfor %}
diff --git a/staticfiles/css/button.css b/staticfiles/css/button.css
index 90a8a87..8ea2c9f 100755
--- a/staticfiles/css/button.css
+++ b/staticfiles/css/button.css
@@ -117,4 +117,9 @@
 .margin-content {
     margin: 0;
     padding: 0;
+}
+
+.constraint-frame {
+    max-width: 550px; 
+    max-height: 550px;
 }
\ No newline at end of file
diff --git a/staticfiles/js/upload-preview.js b/staticfiles/js/upload-preview.js
new file mode 100644
index 0000000..c424f70
--- /dev/null
+++ b/staticfiles/js/upload-preview.js
@@ -0,0 +1,22 @@
+window.onload = () => {
+  document.querySelector('input[name="cover"]').setAttribute("onchange", "preview('frame_cover')");
+  document.querySelector('input[name="content"]').setAttribute("onchange", "preview('frame_content')");
+}
+
+const preview = (elementClass) => {
+  let frame = document.getElementById(elementClass);
+  let frameParent = document.getElementById(`${elementClass}_parent`);
+  
+  // Embed elements need to be recreated on source change
+  if (frame.nodeName.toLowerCase() === 'embed') {
+    frameParent.removeChild(frame);
+    frameParent.insertAdjacentHTML(
+      'beforeend',
+      '<embed id="frame_content" width="550px" height="550px" />'
+    );
+    frame = document.getElementById(elementClass);
+  }
+
+  frame.src = URL.createObjectURL(event.target.files[0]);
+  frameParent.removeAttribute('hidden');
+}
\ No newline at end of file
-- 
GitLab