get-data.html 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574
  1. {% load static %}
  2. <!DOCTYPE html>
  3. <html lang="en"> <!--begin::Head-->
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  6. <title>Dashboard</title><!--begin::Primary Meta Tags-->
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <meta name="title" content="AdminLTE | Dashboard v2">
  9. <meta name="author" content="ColorlibHQ">
  10. <meta name="description"
  11. content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS.">
  12. <meta name="keywords"
  13. content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard">
  14. <!--end::Primary Meta Tags--><!--begin::Fonts-->
  15. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
  16. integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q=" crossorigin="anonymous">
  17. <!--end::Fonts--><!--begin::Third Party Plugin(OverlayScrollbars)-->
  18. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.3.0/styles/overlayscrollbars.min.css"
  19. integrity="sha256-dSokZseQNT08wYEWiz5iLI8QPlKxG+TswNRD8k35cpg=" crossorigin="anonymous">
  20. <!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Third Party Plugin(Bootstrap Icons)-->
  21. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.min.css"
  22. integrity="sha256-Qsx5lrStHZyR9REqhUF8iQt73X06c8LGIUPzpOhwRrI=" crossorigin="anonymous">
  23. <!--end::Third Party Plugin(Bootstrap Icons)--><!--begin::Required Plugin(AdminLTE)-->
  24. <link rel="stylesheet" href="{% static './css/adminlte.css' %}"><!--end::Required Plugin(AdminLTE)--><!-- apexcharts -->
  25. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/apexcharts@3.37.1/dist/apexcharts.css"
  26. integrity="sha256-4MX+61mt9NVvvuPjUWdUdyfZfxSB1/Rf9WtqRHgG5S0=" crossorigin="anonymous">
  27. <!-- <link rel="stylesheet" href="{% static 'dist/WOW-master/css/libs/animate.css' %}"> -->
  28. <link rel="stylesheet" href="{% static 'css/custom.css' %}">
  29. <style>
  30. #full-page-loader {
  31. position: fixed;
  32. top: 0;
  33. left: 0;
  34. width: 100%;
  35. height: 100%;
  36. background-color: rgba(0, 0, 0, 0.6); /* semi-transparent black */
  37. z-index: 9999;
  38. display: flex;
  39. justify-content: center;
  40. align-items: center;
  41. }
  42. .loader-overlay .spinner-border {
  43. width: 3rem;
  44. height: 3rem;
  45. }
  46. </style>
  47. <style>
  48. .card {
  49. border: 1px solid #e0e0e0;
  50. border-radius: 8px;
  51. box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
  52. overflow: hidden;
  53. background-color: #fff;
  54. transition: box-shadow 0.3s ease;
  55. }
  56. .card:hover {
  57. box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
  58. }
  59. .card-img-top {
  60. width: 100%;
  61. height: 200px;
  62. object-fit: cover;
  63. border-bottom: 1px solid #e0e0e0;
  64. }
  65. .card-block {
  66. padding: 16px;
  67. }
  68. .card-title {
  69. font-size: 1.2rem;
  70. font-weight: 600;
  71. margin-bottom: 8px;
  72. color: #333;
  73. }
  74. .card-text {
  75. font-size: 0.95rem;
  76. color: #555;
  77. line-height: 1.4;
  78. }
  79. .card-footer {
  80. padding: 10px 16px;
  81. font-size: 0.85rem;
  82. background-color: #f8f9fa;
  83. border-top: 1px solid #e0e0e0;
  84. color: #666;
  85. }
  86. .card-header {
  87. background-color: #f1f1f1;
  88. padding: 10px 16px;
  89. font-weight: 600;
  90. font-size: 0.95rem;
  91. color: #333;
  92. border-bottom: 1px solid #ddd;
  93. }
  94. .table.projects {
  95. margin: 0;
  96. }
  97. .table td, .table th {
  98. padding: 8px;
  99. font-size: 0.9rem;
  100. vertical-align: middle;
  101. }
  102. .attribute-label {
  103. font-weight: 600;
  104. color: #333;
  105. margin-right: 4px;
  106. }
  107. .card-body input.dial {
  108. margin-bottom: 10px;
  109. }
  110. .after_score {
  111. animation: fadeIn 0.3s ease-in-out;
  112. }
  113. .row.mb-4 {
  114. margin-bottom: 2rem !important;
  115. }
  116. .table-striped tbody tr:nth-of-type(odd) {
  117. background-color: #fafafa;
  118. }
  119. @keyframes fadeIn {
  120. from { opacity: 0; }
  121. to { opacity: 1; }
  122. }
  123. @media (max-width: 768px) {
  124. .col-md-4 {
  125. flex: 0 0 100%;
  126. max-width: 100%;
  127. margin-bottom: 1rem;
  128. }
  129. .card-img-top {
  130. height: 180px;
  131. }
  132. }
  133. </style>
  134. </head>
  135. <body class="layout-fixed sidebar-expand-lg sidebar-mini app-loaded sidebar-collapse"> <!--begin::App Wrapper-->
  136. <div class="app-wrapper"> <!--begin::Header-->
  137. <nav class="app-header navbar navbar-expand bg-body"> <!--begin::Container-->
  138. <div class="container-fluid"> <!--begin::Start Navbar Links-->
  139. <ul class="navbar-nav">
  140. <li class="nav-item"> <a class="nav-link" data-lte-toggle="sidebar" href="#" role="button"> <i
  141. class="bi bi-list"></i> </a> </li>
  142. <li class="nav-item d-none d-md-block"> <a href="{% url 'file-upload' %}" class="nav-link">Home</a> </li>
  143. <!-- <li class="nav-item d-none d-md-block"> <a href="#" class="nav-link">Contact</a> </li> -->
  144. </ul> <!--end::Start Navbar Links--> <!--begin::End Navbar Links-->
  145. <ul class="navbar-nav ms-auto"> <!--begin::Navbar Search-->
  146. <!-- <li class="nav-item"> <a class="nav-link" data-widget="navbar-search" href="search.html"
  147. role="button"> <i class="bi bi-search"></i> </a> </li>
  148. <li class="nav-item dropdown"> <a class="nav-link" data-bs-toggle="dropdown" href="#"> <i
  149. class="bi bi-bell-fill"></i> <span class="navbar-badge badge text-bg-warning">15</span>
  150. </a>
  151. <div class="dropdown-menu dropdown-menu-lg dropdown-menu-end"> <span
  152. class="dropdown-item dropdown-header">3 Notifications</span>
  153. <div class="dropdown-divider"></div> <a href="#" class="dropdown-item"> <i
  154. class="bi bi-people-fill me-2"></i> filename_22_09_2024.xml is ready for review.
  155. <span class="float-end text-secondary fs-7">1 hours</span> </a>
  156. <div class="dropdown-divider"></div> <a href="#" class="dropdown-item"> <i
  157. class="bi bi-people-fill me-2"></i> filename_22_09_2024.xml is uploaded
  158. successfully.
  159. <span class="float-end text-secondary fs-7">12 hours</span> </a>
  160. <div class="dropdown-divider"></div> <a href="#" class="dropdown-item"> <i
  161. class="bi bi-file-earmark-fill me-2"></i> filename_12_09_2024.xml is uploaded
  162. successfully.
  163. <span class="float-end text-secondary fs-7">2 days</span> </a>
  164. <div class="dropdown-divider"></div> <a href="#" class="dropdown-item dropdown-footer">
  165. See All Notifications
  166. </a>
  167. </div>
  168. </li> -->
  169. <li class="nav-item"> <a class="nav-link" href="#" data-lte-toggle="fullscreen"> <i
  170. data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i> <i
  171. data-lte-icon="minimize" class="bi bi-fullscreen-exit" style="display: none;"></i> </a>
  172. </li> <!--end::Fullscreen Toggle--> <!--begin::User Menu Dropdown-->
  173. <li class="nav-item dropdown user-menu"> <a href="#" class="nav-link dropdown-toggle"
  174. data-bs-toggle="dropdown"> <img src="{% static './images/user2-160x160.jpg' %}"
  175. class="user-image rounded-circle shadow" alt="User Image"> <span
  176. class="d-none d-md-inline">Arun Devar</span> </a>
  177. <ul class="dropdown-menu dropdown-menu-lg dropdown-menu-end"> <!--begin::User Image-->
  178. <li class="user-header text-bg-secondary"> <img src="{% static './images/user2-160x160.jpg' %}"
  179. class="rounded-circle shadow" alt="User Image">
  180. <p>
  181. Arun Devar - Senior Manager
  182. <small>Since Nov. 2023</small>
  183. </p>
  184. </li> <!--end::User Image--> <!--begin::Menu Body-->
  185. <li class="user-footer"> <a href="#" class="btn btn-default btn-flat">Profile</a> <a
  186. href="{% url 'logout' %}" class="btn btn-default btn-flat float-end">Sign out</a> </li>
  187. <!--end::Menu Footer-->
  188. </ul>
  189. </li> <!--end::User Menu Dropdown-->
  190. </ul> <!--end::End Navbar Links-->
  191. </div> <!--end::Container-->
  192. </nav> <!--end::Header--> <!--begin::Sidebar-->
  193. <aside class="app-sidebar shadow"> <!--begin::Sidebar Brand-->
  194. <div class="sidebar-brand"> <!--begin::Brand Link--> <a href="{% url 'file-upload' %}" class="brand-link">
  195. <!--begin::Brand Image--> <img src="{% static './images/logo-mini.png' %}" alt="Lumina Datamatics"
  196. class="brand-image logo-mini"> <!--end::Brand Image--> <!--begin::Brand Text--> <span
  197. class="brand-text fw-light"><img style="position:relative; left: -40px;"
  198. src="{% static './images/logo.png' %}" alt="Lumina Datamatics" class="brand-image"></span>
  199. <!--end::Brand Text--> </a>
  200. </div> <!--end::Sidebar Brand--> <!--begin::Sidebar Wrapper-->
  201. <div class="sidebar-wrapper">
  202. <nav class="mt-2"> <!--begin::Sidebar Menu-->
  203. <ul class="nav sidebar-menu flex-column" data-lte-toggle="treeview" role="menu"
  204. data-accordion="false">
  205. <li class="nav-item"> <a href="{% url 'file-upload' %}" class="nav-link"> <i
  206. class="nav-icon bi bi-upload"></i>
  207. <p>Upload</p>
  208. </a> </li>
  209. <li class="nav-item"> <a href="{% url 'tool-check' %}" class="nav-link active"> <i
  210. class="nav-icon bi bi-house"></i>
  211. <p>Home</p>
  212. </a> </li>
  213. </ul> <!--end::Sidebar Menu-->
  214. </nav>
  215. </div> <!--end::Sidebar Wrapper-->
  216. </aside> <!--end::Sidebar--> <!--begin::App Main-->
  217. <main class="app-main"> <!--begin::App Content Header-->
  218. <div class="app-content-header"> <!--begin::Container-->
  219. <div class="container-fluid"> <!--begin::Row-->
  220. <div class="row">
  221. <div class="col-sm-6">
  222. <h3 class="mb-0">Dashboard</h3>
  223. </div>
  224. <div class="col-sm-6">
  225. <ol class="breadcrumb float-sm-end">
  226. <li class="breadcrumb-item"><a href="./upload.html">Upload</a></li>
  227. <li class="breadcrumb-item active" aria-current="page">
  228. Dashboard
  229. </li>
  230. </ol>
  231. </div>
  232. </div> <!--end::Row-->
  233. </div> <!--end::Container-->
  234. </div>
  235. <div class="app-content"> <!--begin::Container-->
  236. <div class="container-fluid"> <!-- Info boxes -->
  237. <!-- Full Page Loader -->
  238. <div id="full-page-loader" style="display: none;">
  239. <div class="loader-overlay">
  240. <div class="spinner-border text-light" role="status">
  241. <!-- <span class="sr-only">Loading...</span> -->
  242. </div>
  243. </div>
  244. </div>
  245. <div id="html"></div>
  246. <div class="row mt-5 ai-fix-issues-button" style="display: none;">
  247. <div class="col-sm-12 text-center">
  248. <button class="btn btn-primary wow lightSpeedIn" data-wow-delay="1s"
  249. onclick="$(this).hide();$('.after_score').removeClass('d-none');">AI
  250. Fix Issues</button>
  251. </div>
  252. </div>
  253. </div> <!--end::Row--> <!--begin::Row-->
  254. <!-- Loader (initially hidden) -->
  255. <!-- <div id="ai-loader" class="spinner-border text-primary mt-3" role="status" style="display: none;">
  256. <span class="sr-only">Loading...</span>
  257. </div> -->
  258. </div> <!--end::Container-->
  259. </main> <!--end::App Main--> <!--begin::Footer-->
  260. <footer class="app-footer"> <!--begin::To the end-->
  261. <!-- <div class="float-end d-none d-sm-inline">Anything you want</div>--> <!--end::To the end-->
  262. <!--begin::Copyright--> <strong>
  263. Copyright &copy; 2014-2024&nbsp;
  264. <a href="https://www.luminadatamatics.com/" target="_blank" class="text-decoration-none">Lumina
  265. Datamatics
  266. LTD</a>.
  267. </strong>
  268. All rights reserved.
  269. <!--end::Copyright-->
  270. </footer> <!--end::Footer-->
  271. </div> <!--end::App Wrapper--> <!--begin::Script--> <!--begin::Third Party Plugin(OverlayScrollbars)-->
  272. <script src="https://code.jquery.com/jquery-3.7.1.min.js"
  273. integrity="sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=" crossorigin="anonymous"></script>
  274. <script src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.3.0/browser/overlayscrollbars.browser.es6.min.js"
  275. integrity="sha256-H2VM7BKda+v2Z4+DRy69uknwxjyDRhszjXFhsL4gD3w=" crossorigin="anonymous"></script>
  276. <!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
  277. <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
  278. integrity="sha256-whL0tQWoY1Ku1iskqPFvmZ+CHsvmRWx/PIoEvIeWh4I=" crossorigin="anonymous"></script>
  279. <!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
  280. <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
  281. integrity="sha256-YMa+wAM6QkVyz999odX7lPRxkoYAan8suedu4k2Zur8=" crossorigin="anonymous"></script>
  282. <!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
  283. <script src="{% static './js/adminlte.js' %}"></script>
  284. <!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
  285. <script>
  286. const SELECTOR_SIDEBAR_WRAPPER = ".sidebar-wrapper";
  287. const Default = {
  288. scrollbarTheme: "os-theme-light",
  289. scrollbarAutoHide: "leave",
  290. scrollbarClickScroll: true,
  291. };
  292. document.addEventListener("DOMContentLoaded", function () {
  293. const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
  294. if (
  295. sidebarWrapper &&
  296. typeof OverlayScrollbarsGlobal?.OverlayScrollbars !== "undefined"
  297. ) {
  298. OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
  299. scrollbars: {
  300. theme: Default.scrollbarTheme,
  301. autoHide: Default.scrollbarAutoHide,
  302. clickScroll: Default.scrollbarClickScroll,
  303. },
  304. });
  305. }
  306. });
  307. </script> <!--end::OverlayScrollbars Configure--> <!-- OPTIONAL SCRIPTS --> <!-- apexcharts -->
  308. <script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-Knob/1.2.13/jquery.knob.min.js"
  309. integrity="sha512-NhRZzPdzMOMf005Xmd4JonwPftz4Pe99mRVcFeRDcdCtfjv46zPIi/7ZKScbpHD/V0HB1Eb+ZWigMqw94VUVaw=="
  310. crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  311. <!-- <script src="{% static 'dist/WOW-master/dist/wow.js' %}"></script> -->
  312. <script>
  313. const mediaUrl = "./../media/";
  314. console.log("mediaUrl",mediaUrl);
  315. document.addEventListener('DOMContentLoaded', function () {
  316. // const responseDiv = document.getElementById('batchScoreMessage');
  317. // Show loader
  318. $('#full-page-loader').show();
  319. fetch('/core/api/batch-score/', {
  320. method: 'GET', // or 'POST' if your API expects POST
  321. headers: {
  322. 'X-CSRFToken': document.querySelector('[name=csrfmiddlewaretoken]')?.value || ''
  323. }
  324. })
  325. .then(response => response.json())
  326. .then(data => {
  327. if (data.success) {
  328. var html = '';
  329. data.results.forEach(element => {
  330. // console.log(element.final_score);
  331. var initial_score = '';
  332. var after_score = ''
  333. var base_keys = { 'Title': 'title_quality', 'Description': 'description_quality', 'Image': 'image_score', 'Attributes': 'attributes' }
  334. Object.entries(base_keys).forEach(([key, value]) => {
  335. let name = key;
  336. key = key.toLowerCase();
  337. console.log(element.breakdown[value], value);
  338. var per = 0
  339. if (element.breakdown[value]) {
  340. per = element.breakdown[value];
  341. }
  342. var intial_desc = '';
  343. if (element.categorized_feedback[key]) {
  344. // console.log(element.categorized_feedback[key].issues);
  345. intial_desc = element.categorized_feedback[key].issues.join(', ');
  346. }
  347. initial_score += `<tr>
  348. <td class="wow bounceInLeft">
  349. <a>
  350. `+ name + `
  351. </a>
  352. </td>
  353. <td class="project_progress wow bounceInRight">
  354. <div class="progress progress-sm">
  355. <div class="progress-bar bg-green" role="progressbar"
  356. aria-valuenow="`+ per + `" aria-valuemin="0" aria-valuemax="100"
  357. style="width: `+ per + `%">
  358. </div>
  359. </div>
  360. <small>
  361. `+ per + `%
  362. </small>
  363. </td>
  364. </tr>
  365. <tr>
  366. <td class="wow bounceInLeft" colspan='2' data-wow-delay="0.2s">
  367. <div style='max-height:100px;overflow-y:auto;'>
  368. <small>
  369. `+ intial_desc + `
  370. </small>
  371. </div>
  372. </td>
  373. </tr>`;
  374. })
  375. Object.keys(base_keys).forEach(k => {
  376. let name = k;
  377. k = k.toLowerCase();
  378. var ik = 'improved_' + k
  379. console.log("ik",ik);
  380. var after_desc = '';
  381. if (element.ai_suggestions.content[ik]) {
  382. console.log(element.ai_suggestions.content);
  383. after_desc = element.ai_suggestions.content[ik];
  384. }
  385. let missing_attributes = '';
  386. if(k == "attributes"){
  387. if(element?.ai_suggestions?.content?.missing_attributes){
  388. Object.entries(element?.ai_suggestions?.content?.missing_attributes).forEach(([key, value]) => {
  389. missing_attributes += `<li><span class="attribute-label">${key}:</span> ${value}</li>`
  390. });
  391. }
  392. }
  393. if(k == "image"){
  394. after_score += `<tr>
  395. <td class="wow bounceInLeft">
  396. <a>
  397. `+ name + ` Note
  398. </a>
  399. </td>
  400. </tr>
  401. <tr>
  402. <td class="wow bounceInLeft" colspan='2' data-wow-delay="0.2s">
  403. <div style='max-height:100px;overflow-y:auto;'>
  404. <small>
  405. `+ element?.ai_suggestions?.image?.note + `
  406. </small>
  407. </div>
  408. </td>
  409. </tr>`;
  410. }else if(k == "attributes"){
  411. after_score += `<tr>
  412. <td class="wow bounceInLeft">
  413. <a>
  414. Missing `+ name + `
  415. </a>
  416. </td>
  417. </tr>
  418. <tr>
  419. <td class="wow bounceInLeft" colspan='2' data-wow-delay="0.2s">
  420. <div style='max-height:100px;overflow-y:auto;'>
  421. <small> <ul>
  422. `+ missing_attributes + `
  423. </ul></small>
  424. </div>
  425. </td>
  426. </tr>`;
  427. }else{
  428. after_score += `<tr>
  429. <td class="wow bounceInLeft">
  430. <a>
  431. `+ name + `
  432. </a>
  433. </td>
  434. </tr>
  435. <tr>
  436. <td class="wow bounceInLeft" colspan='2' data-wow-delay="0.2s">
  437. <div style='max-height:100px;overflow-y:auto;'>
  438. <small>
  439. `+ after_desc + `
  440. </small>
  441. </div>
  442. </td>
  443. </tr>`;
  444. }
  445. })
  446. html += `<div class="row mb-4" >
  447. <div class="col-md-4">
  448. <div class="card">
  449. <img class="card-img-top wow pulse" data-wow-iteration="2"
  450. src="`+mediaUrl+element.image_path+`">
  451. <div class="card-block">
  452. <h4 class="card-title wow bounceInLeft" data-wow-delay="0.1s">`+element.title+`</h4>
  453. <div class="card-text wow bounceInLeft" data-wow-delay="0.2s">`+element.description+`</div>
  454. </div>
  455. <div class="card-footer wow bounceInLeft" data-wow-delay="0.3s">
  456. <small>`+element.created_at+`</small>
  457. </div>
  458. </div>
  459. </div>
  460. <div class="col-md-4">
  461. <div class="card">
  462. <div class="card-header py-2">
  463. <div class="text-sm mb-0">Initial Score</div>
  464. </div>
  465. <div class="card-body text-center wow bounceInDown" data-wow-iteration="0.5">
  466. <input type="text" class="dial" value="`+ element.final_score + `" data-width="120" data-height="120"
  467. data-readOnly='true' data-fgColor="#3c8dbc" data-bgColor="#e8e8e8"
  468. data-thickness=".2">
  469. <div class="mt-2">Overall Score</div>
  470. </div>
  471. <table class="table table-striped projects mb-0 table-sm">
  472. <tbody>
  473. `+ initial_score + `
  474. </tbody>
  475. </table>
  476. </div>
  477. </div>
  478. <div class="col-md-4 after_score d-none">
  479. <div class="card">
  480. <div class="card-header py-2">
  481. <div class="text-sm mb-0">Forecasted Score</div>
  482. </div>
  483. <div class="card-body text-center wow bounceInDown" data-wow-iteration="0.5">
  484. <input type="text" class="dial" value="`+ element.ai_suggestions.content.quality_score_prediction + `" data-width="120" data-height="120"
  485. data-readOnly='true' data-fgColor="#198754" data-bgColor="#e8e8e8"
  486. data-thickness=".2">
  487. <div class="mt-2">Overall Score</div>
  488. </div>
  489. <table class="table table-striped projects mb-0 table-sm">
  490. <tbody>
  491. `+ after_score + `
  492. </tbody>
  493. </table>
  494. </div>
  495. </div>
  496. </div > `;
  497. // console.log('werrrrrrrrrrrrrrrrrrr', html);
  498. });
  499. $('#html').html(html);
  500. $('.dial').knob();
  501. document.querySelector('.ai-fix-issues-button').style.display = 'block';
  502. $('#full-page-loader').hide();
  503. // });
  504. new WOW().init();
  505. // responseDiv.innerHTML = `<div class="alert alert-success">✅ ${data.message}</div>`;
  506. } else {
  507. // responseDiv.innerHTML = `<div class="alert alert-danger">❌ ${data.error}</div>`;
  508. }
  509. // Remove message after 5 seconds
  510. // setTimeout(() => {
  511. // responseDiv.innerHTML = '';
  512. // }, 5000);
  513. })
  514. .catch(error => {
  515. // responseDiv.innerHTML = `<div class="alert alert-danger">❌ API call failed: ${error}</div>`;
  516. // setTimeout(() => {
  517. // responseDiv.innerHTML = '';
  518. // }, 5000);
  519. });
  520. });
  521. </script>
  522. </body><!--end::Body-->
  523. </html>