Ver Fonte

changes for the image and some UI fix

VISHAL BHANUSHALI há 3 meses atrás
pai
commit
c5491cfb8c
28 ficheiros alterados com 154 adições e 25 exclusões
  1. BIN
      content_quality_tool_public/static/fonts/aptos-font/Aptos.eot
  2. BIN
      content_quality_tool_public/static/fonts/aptos-font/Aptos.woff
  3. BIN
      content_quality_tool_public/static/fonts/aptos-font/Aptos.woff2
  4. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-black-italic.ttf
  5. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-black.ttf
  6. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-bold.ttf
  7. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold-italic 2.ttf
  8. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold-italic.ttf
  9. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold.ttf
  10. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-italic.ttf
  11. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-light-italic.ttf
  12. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-light.ttf
  13. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-semibold.ttf
  14. BIN
      content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos.ttf
  15. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-black-italic.ttf
  16. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-black.ttf
  17. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-bold.ttf
  18. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold-italic 2.ttf
  19. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold-italic.ttf
  20. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold.ttf
  21. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-italic.ttf
  22. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-light-italic.ttf
  23. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-light.ttf
  24. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos-semibold.ttf
  25. BIN
      content_quality_tool_public/static/fonts/aptos-font/aptos.ttf
  26. 109 22
      content_quality_tool_public/templates/get-data.html
  27. 34 2
      content_quality_tool_public/templates/index.html
  28. 11 1
      content_quality_tool_public/urls.py

BIN
content_quality_tool_public/static/fonts/aptos-font/Aptos.eot


BIN
content_quality_tool_public/static/fonts/aptos-font/Aptos.woff


BIN
content_quality_tool_public/static/fonts/aptos-font/Aptos.woff2


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-black-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-black.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-bold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold-italic 2.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-extrabold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-light-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-light.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos-semibold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/__MACOSX/._aptos.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-black-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-black.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-bold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold-italic 2.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-extrabold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-light-italic.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-light.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos-semibold.ttf


BIN
content_quality_tool_public/static/fonts/aptos-font/aptos.ttf


+ 109 - 22
content_quality_tool_public/templates/get-data.html

@@ -27,6 +27,26 @@
         integrity="sha256-4MX+61mt9NVvvuPjUWdUdyfZfxSB1/Rf9WtqRHgG5S0=" crossorigin="anonymous">
     <!-- <link rel="stylesheet" href="{% static 'dist/WOW-master/css/libs/animate.css' %}"> -->
     <link rel="stylesheet" href="{% static 'css/custom.css' %}">
+    <style>
+        #full-page-loader {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            background-color: rgba(0, 0, 0, 0.6); /* semi-transparent black */
+            z-index: 9999;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+
+        .loader-overlay .spinner-border {
+            width: 3rem;
+            height: 3rem;
+        }
+
+    </style>
 </head>
 
 <body class="layout-fixed sidebar-expand-lg sidebar-mini app-loaded sidebar-collapse"> <!--begin::App Wrapper-->
@@ -136,8 +156,16 @@
             </div>
             <div class="app-content"> <!--begin::Container-->
                 <div class="container-fluid"> <!-- Info boxes -->
+                <!-- Full Page Loader -->
+                <div id="full-page-loader" style="display: none;">
+                    <div class="loader-overlay">
+                        <div class="spinner-border text-light" role="status">
+                            <!-- <span class="sr-only">Loading...</span> -->
+                        </div>
+                    </div>
+                </div>
                     <div id="html"></div>
-                    <div class="row mt-5">
+                    <div class="row mt-5 ai-fix-issues-button"  style="display: none;">
                         <div class="col-sm-12 text-center">
                             <button class="btn btn-primary wow lightSpeedIn" data-wow-delay="1s"
                                 onclick="$(this).hide();$('.after_score').removeClass('d-none');">AI
@@ -145,6 +173,10 @@
                         </div>
                     </div>
                 </div> <!--end::Row--> <!--begin::Row-->
+                <!-- Loader (initially hidden) -->
+                <!-- <div id="ai-loader" class="spinner-border text-primary mt-3" role="status" style="display: none;">
+                    <span class="sr-only">Loading...</span>
+                </div> -->
 
             </div> <!--end::Container-->
         </main> <!--end::App Main--> <!--begin::Footer-->
@@ -201,9 +233,12 @@
         crossorigin="anonymous" referrerpolicy="no-referrer"></script>
     <!-- <script src="{% static 'dist/WOW-master/dist/wow.js' %}"></script> -->
      <script>
+        const mediaUrl = "./../media/";
+        console.log("mediaUrl",mediaUrl);
         document.addEventListener('DOMContentLoaded', function () {
             // const responseDiv = document.getElementById('batchScoreMessage');
-
+            // Show loader
+            $('#full-page-loader').show();
             fetch('/core/api/batch-score/', {
                 method: 'GET', // or 'POST' if your API expects POST
                 headers: {
@@ -218,7 +253,7 @@
                         // console.log(element.final_score);
                         var initial_score = '';
                         var after_score = ''
-                        var base_keys = { 'Title': 'title_quality', 'Description': 'description_quality', 'Image': 'image_score', 'SEO': 'seo_discoverability', 'Attributes': 'attributes' }
+                        var base_keys = { 'Title': 'title_quality', 'Description': 'description_quality', 'Image': 'image_score', 'Attributes': 'attributes' }
 
 
 
@@ -235,6 +270,7 @@
                                 // console.log(element.categorized_feedback[key].issues);
                                 intial_desc = element.categorized_feedback[key].issues.join(', ');
                             }
+                            
 
                             initial_score += `<tr>
                                                     <td class="wow bounceInLeft">
@@ -258,7 +294,7 @@
                                                 </tr>
                                                 <tr>
                                                 <td class="wow bounceInLeft" colspan='2' data-wow-delay="0.2s">
-                                                    <div style='max-height:50px;overflow-y:auto;'>  
+                                                    <div style='max-height:100px;overflow-y:auto;'>  
                                                     <small>
                                                         `+ intial_desc + `
                                                     </small>
@@ -271,28 +307,75 @@
                             let name = k;
                             k = k.toLowerCase();
                             var ik = 'improved_' + k
+                            console.log("ik",ik);
                             var after_desc = '';
                             if (element.ai_suggestions.content[ik]) {
                                 console.log(element.ai_suggestions.content);
                                 after_desc = element.ai_suggestions.content[ik];
                             }
 
-                            after_score += `<tr>
-                                                    <td class="wow bounceInLeft">
-                                                        <a>
-                                                            `+ name + `
-                                                        </a>
-                                                    </td>
-                                                </tr>
-                                                <tr>
-                                                <td class="wow bounceInLeft" colspan='2'  data-wow-delay="0.2s">
-                                                    <div style='max-height:50px;overflow-y:auto;'>  
-                                                    <small>
-                                                        `+ after_desc + `
-                                                    </small>
-                                                    </div>
-                                                    </td>
-                                                </tr>`;
+                            let missing_attributes = '';
+                            if(k == "attributes"){
+                                if(element?.ai_suggestions?.content?.missing_attributes){
+                                    Object.entries(element?.ai_suggestions?.content?.missing_attributes).forEach(([key, value]) => {     
+                                        missing_attributes += `<li><span class="attribute-label">${key}:</span> ${value}</li>`         
+                                    });
+                                }
+                            }
+
+
+                            if(k == "image"){
+                                after_score += `<tr>
+                                        <td class="wow bounceInLeft">
+                                            <a>
+                                                `+ name + ` Note
+                                            </a>
+                                        </td>
+                                    </tr>
+                                    <tr>
+                                    <td class="wow bounceInLeft" colspan='2'  data-wow-delay="0.2s">
+                                        <div style='max-height:100px;overflow-y:auto;'>  
+                                        <small>
+                                            `+ element?.ai_suggestions?.image?.note + `
+                                        </small>
+                                        </div>
+                                        </td>
+                                    </tr>`;
+                            }else if(k == "attributes"){
+                                after_score += `<tr>
+                                    <td class="wow bounceInLeft">
+                                        <a>
+                                           Missing `+ name + `
+                                        </a>
+                                    </td>
+                                </tr>
+                                <tr>
+                                <td class="wow bounceInLeft" colspan='2'  data-wow-delay="0.2s">
+                                    <div style='max-height:100px;overflow-y:auto;'>  
+                                    <small> <ul>
+                                        `+ missing_attributes + `
+                                    </ul></small>
+                                    </div>
+                                    </td>
+                                </tr>`;
+                            }else{
+                                after_score += `<tr>
+                                    <td class="wow bounceInLeft">
+                                        <a>
+                                            `+ name + `
+                                        </a>
+                                    </td>
+                                </tr>
+                                <tr>
+                                <td class="wow bounceInLeft" colspan='2'  data-wow-delay="0.2s">
+                                    <div style='max-height:100px;overflow-y:auto;'>  
+                                    <small>
+                                        `+ after_desc + `
+                                    </small>
+                                    </div>
+                                    </td>
+                                </tr>`;
+                            }                    
                         })
 
 
@@ -300,7 +383,7 @@
                                 <div class="col-md-4">
                                     <div class="card">
                                         <img class="card-img-top wow pulse" data-wow-iteration="2"
-                                            src="`+element.image_path+`">
+                                            src="`+mediaUrl+element.image_path+`">
                                         <div class="card-block">
                                             <h4 class="card-title wow bounceInLeft" data-wow-delay="0.1s">`+element.title+`</h4>
                                             <div class="card-text wow bounceInLeft" data-wow-delay="0.2s">`+element.description+`</div>
@@ -333,7 +416,7 @@
                                 <div class="col-md-4 after_score d-none">
                                     <div class="card">
                                         <div class="card-header py-2">
-                                            <div class="text-sm mb-0">After Score</div>
+                                            <div class="text-sm mb-0">Forecasted Score</div>
                                         </div>
                                         <div class="card-body text-center wow bounceInDown" data-wow-iteration="0.5">
                                             <input type="text" class="dial" value="`+ element.ai_suggestions.content.quality_score_prediction + `" data-width="120" data-height="120"
@@ -356,8 +439,12 @@
 
                     $('#html').html(html);
                     $('.dial').knob();
+                    
+                    document.querySelector('.ai-fix-issues-button').style.display = 'block';
+                    $('#full-page-loader').hide();
                     // });
                     new WOW().init();
+
                     // responseDiv.innerHTML = `<div class="alert alert-success">✅ ${data.message}</div>`;
                 } else {
                     // responseDiv.innerHTML = `<div class="alert alert-danger">❌ ${data.error}</div>`;

+ 34 - 2
content_quality_tool_public/templates/index.html

@@ -35,6 +35,26 @@
             font-size: 14px;
         }
     </style>
+    <style>
+        #full-page-loader {
+            position: fixed;
+            top: 0;
+            left: 0;
+            width: 100%;
+            height: 100%;
+            background-color: rgba(0, 0, 0, 0.6); /* semi-transparent black */
+            z-index: 9999;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+        }
+
+        .loader-overlay .spinner-border {
+            width: 3rem;
+            height: 3rem;
+        }
+
+    </style>
 </head>
 
 <body class="layout-fixed sidebar-expand-lg sidebar-mini app-loaded sidebar-collapse">
@@ -144,6 +164,13 @@
             </div>
             <div class="app-content"> <!--begin::Container-->
                 <div class="container-fluid"> <!-- Info boxes -->
+                    <div id="full-page-loader" style="display: none;">
+                    <div class="loader-overlay">
+                        <div class="spinner-border text-light" role="status">
+                            <!-- <span class="sr-only">Loading...</span> -->
+                        </div>
+                    </div>
+                </div>
                     <div class="row">
                         <div class="col-md-12">
                             <div class="card mb-4">
@@ -291,7 +318,7 @@ document.addEventListener('DOMContentLoaded', function () {
     // Handle form submission
     form.addEventListener('submit', function (e) {
         e.preventDefault();
-
+        $('#full-page-loader').show();
         // Disable button during upload
         submitBtn.disabled = true;
         submitBtn.textContent = 'Uploading...';
@@ -311,22 +338,27 @@ document.addEventListener('DOMContentLoaded', function () {
                 responseDiv.innerHTML = `<div class="alert alert-success">✅ ${data.message}</div>`;
                 fileInput.value = ''; // Clear file input
                 submitBtn.disabled = true; // Keep disabled until new file selected
+                $('#full-page-loader').hide();
             } else {
                 responseDiv.innerHTML = `<div class="alert alert-danger">❌ ${data.error}</div>`;
                 submitBtn.disabled = false;
+                $('#full-page-loader').hide();
             }
         })
         .catch(error => {
             responseDiv.innerHTML = `<div class="alert alert-danger">❌ Upload failed: ${error}</div>`;
             submitBtn.disabled = false;
+            $('#full-page-loader').hide();
         })
         .finally(() => {
             submitBtn.textContent = 'Upload';
+            $('#full-page-loader').hide();
 
             // Remove message after 5 seconds
             setTimeout(() => {
                 responseDiv.innerHTML = '';
-            }, 5000);
+                window.location.href = "/tool-check";
+            }, 3000);
         });
     });
 });

+ 11 - 1
content_quality_tool_public/urls.py

@@ -1,14 +1,24 @@
 from django.urls import path
+from django.conf import settings
 from . import views
+from django.conf.urls.static import static
+
+
 urlpatterns = [
 
     path('', views.login_view, name='login'),
     path('login/', views.logout_view, name='logout'),
     path('home/', views.upload, name='file-upload'),
     path('tool-check/', views.getData, name='tool-check'),
+    
+    # path('upload-rules/', views.as_view(), name='upload-rules'),
+
 
     
 
     #Management URLS
     # path('file-upload/', views.get_company_list, name='fileUpload'),
-]
+]
+
+if settings.DEBUG:
+    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)