get-data.html 29 KB

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