doctype html html(lang="en") head meta(charset="UTF-8") meta(name="viewport" content="width=device-width, initial-scale=1.0") title Copy/Paste Detector Report link(href="styles/tailwind.css" rel="stylesheet") link(href="styles/prism.css" rel="stylesheet") body(class="bg-gray-100") header(class="bg-white shadow py-4") div(class="container mx-auto px-4") h1(class="text-3xl font-semibold text-gray-800") jscpd - copy/paste report main(class="container mx-auto my-8 p-4 bg-white shadow rounded") section(id="dashboard" class="mb-8") h2(class="text-2xl font-semibold text-gray-700 mb-4") Dashboard div(class="grid grid-cols-4 gap-4") div(class="bg-blue-200 p-4 rounded text-center") h3(class="text-lg font-semibold text-blue-800 mb-2") Total Files span(class="text-4xl font-bold text-blue-800") #{statistics.total.sources} div(class="bg-green-200 p-4 rounded text-center") h3(class="text-lg font-semibold text-green-800 mb-2") Total Lines of Code span(class="text-4xl font-bold text-green-800") #{statistics.total.lines} div(class="bg-yellow-200 p-4 rounded text-center") h3(class="text-lg font-semibold text-yellow-800 mb-2") Number of Clones span(class="text-4xl font-bold text-yellow-800") #{statistics.total.clones} div(class="bg-red-200 p-4 rounded text-center") h3(class="text-lg font-semibold text-red-800 mb-2") Duplicated Lines span(class="text-4xl font-bold text-red-800") #{statistics.total.duplicatedLines} (#{(100 * statistics.total.duplicatedLines / statistics.total.lines).toFixed(2)}%) section(id="formats" class="mb-8") h2(class="text-2xl font-semibold text-gray-700 mb-4") Formats with Duplications table(class="w-full table-auto") thead tr(class="bg-gray-200 text-gray-600 uppercase text-sm leading-normal") th(class="py-3 px-6 text-left") Format th(class="py-3 px-6 text-left") Files th(class="py-3 px-6 text-left") Lines th(class="py-3 px-6 text-left") Clones th(class="py-3 px-6 text-left") Duplicated Lines th(class="py-3 px-6 text-left") Duplicated Tokens tbody each format, name in statistics.formats tr(class="bg-white border-b border-gray-200 text-gray-800 text-sm") td(class="py-3 px-6") a(href="#" + name + "-clones" class="text-blue-600 hover:underline") #{name} td(class="py-3 px-6") #{format.total.sources} td(class="py-3 px-6") #{format.total.lines} td(class="py-3 px-6") #{format.total.clones} td(class="py-3 px-6") #{format.total.duplicatedLines} td(class="py-3 px-6") #{format.total.duplicatedTokens} section(id="txt-clones" class="mb-8") each format, name in statistics.formats a(name=name + "-clones") h2(class="text-2xl font-semibold text-gray-700 mb-4") #{name} div(class="divide-y divide-gray-200 border-b-2") each clone, index in duplicates if name===clone.format div(class="py-4") p(class="text-gray-600") #{clone.firstFile.name} (Line #{clone.firstFile.startLoc.line}:#{clone.firstFile.startLoc.column} - Line #{clone.firstFile.endLoc.line}:#{clone.firstFile.endLoc.column}), #{clone.secondFile.name} (Line #{clone.secondFile.startLoc.line}:#{clone.secondFile.startLoc.column} - Line #{clone.secondFile.endLoc.line}:#{clone.secondFile.endLoc.column}) button(class="bg-gray-500 text-white px-1 py-0.5 text-xs rounded focus:outline-none ml-2" id="expandBtn" + index onclick="toggleCodeBlock('cloneGroup"+index+"', 'expandBtn" + index + "', 'collapseBtn" +index+ "')") Show code button(class="bg-gray-500 text-white px-1 py-0.5 text-xs rounded focus:outline-none ml-2 hidden" id="collapseBtn" + index onclick="toggleCodeBlock('cloneGroup"+index+"', 'expandBtn" + index + "', 'collapseBtn" +index+ "')") Hide code pre(class="bg-gray-100 border border-gray-200 p-4 rounded mt-2 hidden" id="cloneGroup" + index) code(class="language-" + name + " text-sm text-gray-800") #{clone.fragment} // Add more clone groups for .txt format as needed // Add more clone groups for .txt format as needed // Add more sections for other formats and clone groups as needed footer(class="bg-white shadow mt-8 py-4") div(class="container mx-auto px-4 text-center") p(class="text-sm text-gray-600") This report is generated by jscpd, an open-source copy/paste detector. p(class="text-sm text-gray-600") jscpd is licensed under the MIT License. a(href="https://github.com/kucherenko/jscpd" class="text-blue-500 text-sm" target="_blank" rel="noopener noreferrer") View jscpd on GitHub script(src="js/prism.js") script. function toggleCodeBlock(codeBlockId, expandBtnId, collapseBtnId) { const codeBlock = document.getElementById(codeBlockId); const expandBtn = document.getElementById(expandBtnId); const collapseBtn = document.getElementById(collapseBtnId); codeBlock.classList.toggle('hidden'); expandBtn.classList.toggle('hidden'); collapseBtn.classList.toggle('hidden'); }