2025-11-17 12:17:44 +07:00

1 line
172 KiB
HTML
Raw Blame History

<!doctype html><html lang=en><meta charset=UTF-8><meta content="width=device-width,initial-scale=1" name=viewport><title>Code Counter Report</title><link href=https://unpkg.com/tabulator-tables@6.2.1/dist/css/tabulator_simple.min.css rel=stylesheet><style>:root{--bg-primary:#ffffff;--bg-secondary:#f8f9fa;--bg-tertiary:#f5f5f5;--text-primary:#333333;--text-secondary:#666666;--text-muted:#999999;--border-color:#e1e4e8;--shadow:0 2px 10px rgba(0,0,0,0.1);--accent-color:#007acc;--accent-gradient:linear-gradient(135deg, #007acc, #005a9e);--success-color:#28a745;--warning-color:#cb7300;--danger-color:#dc3545;--hover-bg:#555}@media (prefers-color-scheme:dark){:root{--bg-primary:#1e1e1e;--bg-secondary:#2d2d30;--bg-tertiary:#252526;--text-primary:#cccccc;--text-secondary:#9d9d9d;--text-muted:#6d6d6d;--border-color:#3c3c3c;--shadow:0 2px 10px rgba(0,0,0,0.3);--accent-color:#0078d4;--accent-gradient:linear-gradient(135deg, #0078d4, #106ebe);--success-color:#4ec9b0;--warning-color:#dd6f01;--danger-color:#f85149;--hover-bg:#555}}[data-theme=dark]{--bg-primary:#1e1e1e;--bg-secondary:#2d2d30;--bg-tertiary:#252526;--text-primary:#cccccc;--text-secondary:#9d9d9d;--text-muted:#6d6d6d;--border-color:#3c3c3c;--shadow:0 2px 10px rgba(0,0,0,0.3);--accent-color:#0078d4;--accent-gradient:linear-gradient(135deg, #0078d4, #106ebe);--success-color:#4ec9b0;--warning-color:#e17102;--danger-color:#f85149;--hover-bg:#555}[data-theme=light]{--bg-primary:#ffffff;--bg-secondary:#f8f9fa;--bg-tertiary:#f5f5f5;--text-primary:#333333;--text-secondary:#666666;--text-muted:#999999;--border-color:#e1e4e8;--shadow:0 2px 10px rgba(0,0,0,0.1);--accent-color:#007acc;--accent-gradient:linear-gradient(135deg, #007acc, #005a9e);--success-color:#28a745;--warning-color:#dc7200;--danger-color:#dc3545;--hover-bg:rgba(0,122,204,0.05)}[data-theme=light] .tabulator{background:#fff;border:1px solid #e1e4e8}[data-theme=light] .tabulator .tabulator-header{background:#f8f9fa;border-bottom:1px solid #e1e4e8}[data-theme=light] .tabulator .tabulator-header .tabulator-col{background:#f8f9fa;color:#333;border-right:1px solid #e1e4e8}[data-theme=light] .tabulator .tabulator-header .tabulator-col .tabulator-col-content{color:#007acc}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row{background:#fff;color:#333}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row:nth-child(2n){background:#f8f9fa}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row:hover{background:rgba(0,122,204,.05)!important}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #e1e4e8;border-bottom:1px solid #e1e4e8}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-group{background:#f0f0f0;color:#333}[data-theme=light] .tabulator .tabulator-header .tabulator-col.tabulator-frozen{background:#f8f9fa;border-right:2px solid #007acc;box-shadow:2px 0 4px rgba(0,0,0,.1)}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.tabulator-frozen{background:#fff;border-right:2px solid #007acc;box-shadow:2px 0 4px rgba(0,0,0,.1)}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row:nth-child(2n) .tabulator-cell.tabulator-frozen{background:#f8f9fa}[data-theme=light] .tabulator .tabulator-tableholder .tabulator-table .tabulator-row:hover .tabulator-cell.tabulator-frozen{background:rgba(0,122,204,.05)!important}[data-theme=light] .tabulator .tabulator-col.tabulator-frozen .tabulator-col-title:before{content:'📌 ';margin-right:4px;opacity:.8}[data-theme=light] .advanced-group-header{background:linear-gradient(135deg,#007acc 0,#005a9e 100%);color:#fff}[data-theme=light] .group-cell-combined{background:linear-gradient(135deg,#007acc 0,#005a9e 100%)}[data-theme=light] .group-cell-stat{background:linear-gradient(135deg,#005a9e 0,#007acc 100%)}[data-theme=light] .advanced-group-header:hover .group-cell-combined,[data-theme=light] .advanced-group-header:hover .group-cell-stat{background:linear-gradient(135deg,#0066b3 0,#004a80 100%)}[data-theme=light] .filter-controls,[data-theme=light] .quick-filters{background:#f8f9fa;border:1px solid #e1e4e8}[data-theme=light] .quick-filter-btn{border:1px solid #e1e4e8}[data-theme=light] .quick-filter-btn.active{background:#007acc;color:#fff;border-color:#007acc}[data-theme=light] .actions-section{background:#fff;border-top:1px solid #e1e4e8}body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;margin:0;padding:20px;background-color:var(--bg-tertiary);color:var(--text-primary);transition:background-color .3s,color .3s}.container{max-width:1200px;margin:0 auto;padding:20px}.header{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;padding:20px;margin-bottom:20px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px}.header h1{margin:0;color:var(--accent-color);font-size:1.8em;display:flex;align-items:center;gap:10px}.header-info{color:var(--text-secondary);font-size:.9em}.actions{display:flex}.btn{background:var(--accent-color);display:flex;align-items:center;justify-content:center;gap:5px}.btn:disabled{opacity:.6;cursor:not-allowed}.export-dropdown{position:relative;display:inline-block}.export-dropdown-btn{background:var(--accent-color);color:var(--bg-primary);border:none;padding:8px 16px;border-radius:4px;cursor:pointer;font-size:.9em;display:flex;align-items:center;justify-content:center;gap:5px;transition:background-color .2s}.export-dropdown-btn:hover{background:var(--hover-bg)}.export-dropdown-content{display:none;position:absolute;background-color:var(--bg-primary);min-width:180px;box-shadow:var(--shadow);border:1px solid var(--border-color);border-radius:4px;z-index:1000;top:100%;right:0}.export-dropdown-content.show{display:block!important}.export-dropdown-content a{color:var(--text-primary);padding:12px 16px;text-decoration:none;display:block;cursor:pointer;transition:background-color .2s}.export-dropdown-content a:hover{background-color:var(--bg-secondary)}.export-dropdown.show .export-dropdown-content{display:block}.summary-section{margin-bottom:30px}.section-title{color:var(--accent-color);font-size:1.4em;margin-bottom:15px;display:flex;align-items:center;gap:10px}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:15px;margin-bottom:20px}.stat-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;padding:15px;text-align:center}.stat-value{font-size:2em;font-weight:700;color:var(--accent-color);margin-bottom:5px}.stat-label{color:var(--text-secondary);font-size:.9em}.section{margin-bottom:30px}.language-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:15px;margin-bottom:30px}.language-item{background:var(--bg-secondary);border-radius:6px;border-left:3px solid var(--success-color);border:1px solid var(--border-color)}.language-name{color:var(--text-primary);margin-bottom:5px}.language-details{font-size:.9em;color:var(--text-secondary)}.files-table{width:100%;border-collapse:collapse;margin-top:20px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;overflow:hidden}.files-table td,.files-table th{padding:12px;text-align:left;border-bottom:1px solid var(--border-color)}.files-table th{background:var(--bg-secondary);color:var(--accent-color);font-weight:600;position:sticky;top:0}.files-table tr:hover{background:var(--hover-bg)}.files-table tbody tr:nth-child(2n){background:rgba(0,0,0,.02)}[data-theme=dark] .files-table tbody tr:nth-child(2n){background:rgba(255,255,255,.02)}.file-path{color:var(--text-secondary)}.file-name-cell{position:relative;max-width:300px}.file-name-display{display:flex;flex-direction:column}.file-name{font-weight:500;color:var(--accent-color);display:block}.file-path-toggle{font-size:.85em;color:var(--text-secondary);margin-top:2px;font-family:'Courier New',monospace;display:none}.file-path-toggle:empty{display:none}.file-name-text{font-weight:500;color:var(--accent-color);display:block}.file-path-text{font-size:.85em;color:var(--text-secondary);margin-top:2px;font-family:'Courier New',monospace}.file-full-path{font-family:'Courier New',monospace;font-size:.9em;color:var(--text-secondary);word-break:break-all;max-width:400px}.path-toggle{background:0 0;border:none;cursor:pointer;padding:2px 4px;margin-left:8px;border-radius:3px;font-size:.9em;color:var(--text-primary)}.path-toggle:hover{background-color:var(--hover-bg)}.path-column{min-width:200px;max-width:400px}@media (max-width:768px){.path-column{display:none!important}}.language-badge{background:var(--accent-color);color:#fff;padding:3px 8px;border-radius:12px;font-size:.8em;font-weight:500}.footer{padding:20px 30px;text-align:center;color:var(--text-secondary);font-size:.9em;border-top:1px solid var(--border-color);background:var(--bg-primary)}.footer a,.generator-info a{color:var(--accent-color);text-decoration:none}.footer a:hover,.generator-info a:hover{text-decoration:underline}.generator-info{font-size:.9em;color:var(--text-muted);margin-top:5px}.search-box{width:100%;padding:10px;border:1px solid var(--border-color);border-radius:4px;margin-bottom:20px;background:var(--bg-primary);color:var(--text-primary);font-size:16px;transition:border-color .2s}.search-box:focus{outline:0;border-color:var(--accent-color);box-shadow:0 0 0 2px rgba(0,122,204,.2)}.search-box::placeholder{color:var(--text-muted)}.loading-indicator{text-align:center;padding:20px;color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;margin:20px 0}.loading-spinner{display:inline-block;width:20px;height:20px;border:3px solid var(--border-color);border-top:3px solid var(--accent-color);border-radius:50%;animation:1s linear infinite spin;margin-right:10px}.error-message{text-align:center;padding:20px;color:var(--danger-color);background:var(--bg-primary);border:1px solid var(--danger-color);border-radius:6px;margin:20px 0}.theme-toggle{position:fixed;top:20px;right:20px;background:var(--bg-secondary);border:1px solid var(--border-color);color:var(--text-primary);padding:10px 15px;border-radius:20px;cursor:pointer;font-size:14px;transition:.3s;box-shadow:var(--shadow);z-index:1000}.theme-toggle:hover{background:var(--hover-bg);transform:translateY(-1px);box-shadow:0 4px 15px rgba(0,0,0,.2)}.theme-toggle:active{transform:translateY(0)}@media (max-width:768px){.theme-toggle{top:10px;right:10px;padding:8px 12px;font-size:12px}.container{margin-top:60px}}.quick-filters{display:flex;flex-wrap:wrap;padding:15px;background:var(--bg-secondary);border-radius:6px;border:1px solid var(--border-color)}.quick-filter-btn{background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-primary);white-space:nowrap}.quick-filter-btn:hover{background:var(--hover-bg);transform:translateY(-1px)}.filter-controls{background:var(--bg-secondary);border:1px solid var(--border-color)}.filter-control-row{display:flex;flex-direction:row;flex-wrap:wrap;align-items:end}.filter-group{display:flex;flex-direction:column;min-width:150px;flex:1}.filter-label{color:var(--text-primary);margin-bottom:5px}.search-input{border:1px solid var(--border-color);background:var(--bg-primary);color:var(--text-primary);transition:border-color .2s;width:100%}.search-input:focus{outline:0;border-color:var(--accent-color);box-shadow:0 0 0 2px rgba(0,122,204,.2)}.search-input::placeholder{color:var(--text-muted)}.range-filter{display:flex;align-items:center}.range-filter input{min-width:200px;padding:8px 12px;border:1px solid var(--border-color);border-radius:4px;background:var(--bg-primary);color:var(--text-primary);font-size:14px}.range-filter>div:nth-child(2){color:var(--text-secondary);font-size:14px}.btn{padding:8px 16px;background:var(--accent-color);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:14px;transition:background-color .2s}.btn:hover{background:var(--accent-color);opacity:.9}.actions-section{padding:15px 30px;border-top:1px solid var(--border-color);background:var(--bg-primary)}.actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;align-items:center}.actions .btn{white-space:nowrap;min-width:140px}.actions .btn:first-child,.actions .btn:nth-child(2){background:var(--success-color)}.actions .btn:first-child:hover,.actions .btn:nth-child(2):hover{background:var(--success-color);opacity:.9}.actions .btn:nth-child(3){background:var(--warning-color);color:var(--text-primary)}.actions .btn:nth-child(3):hover{background:var(--warning-color);opacity:.9}.actions .btn.active{box-shadow:0 0 0 2px rgba(255,255,255,.3);transform:translateY(-1px);background:var(--accent-color)!important;color:var(--text-on-accent)!important;border-color:var(--accent-color)!important}.tabulator{border:1px solid var(--border-color);background:var(--bg-primary)}.tabulator .tabulator-header{background:var(--bg-secondary);border-bottom:1px solid var(--border-color)}.tabulator .tabulator-header .tabulator-col{background:var(--bg-secondary);color:var(--text-primary);border-right:1px solid var(--border-color)}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{color:var(--accent-color);font-weight:600}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row{background:var(--bg-primary);color:var(--text-primary)}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row:hover{background:var(--hover-bg)!important}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid var(--border-color);border-bottom:1px solid var(--border-color)}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row.tabulator-group{background:var(--bg-secondary);color:var(--text-primary)}.tabulator .tabulator-header .tabulator-col.tabulator-frozen{background:var(--bg-secondary);border-right:2px solid var(--accent-color);box-shadow:2px 0 4px rgba(0,0,0,.1);z-index:10}.tabulator .tabulator-col.tabulator-frozen .tabulator-col-title:before{content:'📌 ';margin-right:4px;opacity:.8}.advanced-group-header{display:flex;width:100%;background:linear-gradient(135deg,var(--accent-color) 0,#0c5a8a 100%);color:#fff;font-weight:600;border-bottom:2px solid var(--accent-color)}.group-cell-combined{background:linear-gradient(135deg,var(--accent-color) 0,#0c5a8a 100%);border-right:2px solid rgba(255,255,255,.3);padding:12px;display:flex;flex-direction:column;justify-content:center}.group-header-combined{display:flex;flex-direction:column;gap:4px}.group-directory{font-size:1.1em;font-weight:700;text-shadow:1px 1px 2px rgba(0,0,0,.5)}.group-file-count{font-size:.85em;opacity:.9;text-shadow:1px 1px 2px rgba(0,0,0,.3)}.group-cell-stat{background:linear-gradient(135deg,#0c5a8a 0,var(--accent-color) 100%);border-right:1px solid rgba(255,255,255,.2);padding:8px;text-align:center;display:flex;flex-direction:column;justify-content:center;min-height:50px}.group-stat-value{font-size:1em;font-weight:700;text-shadow:1px 1px 2px rgba(0,0,0,.5);line-height:1.2}.group-stat-label{font-size:.7em;opacity:.8;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.advanced-group-header:hover .group-cell-combined,.advanced-group-header:hover .group-cell-stat{background:linear-gradient(135deg,#17b 0,#0a4d75 100%)}.tabulator .tabulator-row.tabulator-group.tabulator-sticky:before{content:'📌 ';position:absolute;left:8px;top:50%;transform:translateY(-50%);font-size:.9em;opacity:.8;z-index:1;color:#fff;text-shadow:1px 1px 2px rgba(0,0,0,.8)}.tabulator .tabulator-row.tabulator-group.tabulator-sticky{box-shadow:0 2px 8px rgba(0,0,0,.3);z-index:15}.tabulator .tabulator-row.tabulator-group.tabulator-sticky .tabulator-cell.tabulator-frozen{background:linear-gradient(135deg,#0c5a8a 0,#17b 100%)!important;border-right:3px solid #00bfff!important;box-shadow:inset -2px 0 8px rgba(0,191,255,.4),3px 0 10px rgba(0,0,0,.5)!important;z-index:16}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row .tabulator-cell.tabulator-frozen{background:var(--bg-primary);border-right:2px solid var(--accent-color);box-shadow:2px 0 4px rgba(0,0,0,.1);z-index:5}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row:nth-child(2n) .tabulator-cell.tabulator-frozen{background:var(--bg-secondary)}.tabulator .tabulator-tableholder .tabulator-table .tabulator-row:hover .tabulator-cell.tabulator-frozen{background:var(--hover-bg)!important}@media (max-width:768px){.filter-control-row{flex-direction:row;gap:15px}.filter-group{min-width:unset}.range-filter{flex-wrap:wrap}.quick-filters{padding:10px}.quick-filter-btn{padding:6px 12px;font-size:12px}.actions-section{padding:10px 15px}.actions{justify-content:center;gap:8px}.actions .btn{min-width:120px;padding:6px 12px;font-size:12px}}.native-group-header{display:flex;width:100%;background:var(--vscode-editorGroupHeader-tabsBackground,#2d2d30);border-bottom:1px solid var(--vscode-editorGroup-border,#3e3e42);font-weight:600;font-size:12px;position:relative;z-index:100;user-select:none}.native-group-header .tabulator-cell{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:6px 10px;border-right:1px solid var(--vscode-editorGroup-border,#3e3e42);background:0 0;color:var(--vscode-foreground,#ccc);min-height:45px;box-sizing:border-box;flex-shrink:0;overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap}.native-group-header .group-cell-frozen{background:linear-gradient(135deg,var(--vscode-editorGroupHeader-tabsBackground,#2d2d30) 0,color-mix(in srgb,var(--vscode-editorGroupHeader-tabsBackground,#2d2d30) 95%,var(--vscode-focusBorder,#007acc) 5%) 100%);border-right:2px solid var(--vscode-focusBorder,#007acc);position:sticky;left:0;z-index:102;box-shadow:2px 0 4px rgba(0,0,0,.1)}.native-group-header .group-cell-normal{background:var(--vscode-editorGroupHeader-tabsBackground,#2d2d30)}.group-directory-combined{padding:8px 12px}.combined-cell-content{display:flex;flex-direction:column;width:100%;gap:2px}.directory-section{font-weight:700;font-size:13px;color:var(--vscode-terminal-ansiBlue,#4fc1ff);display:flex;align-items:center;gap:4px}.files-section{display:flex;gap:8px;align-items:center;font-size:11px}.group-stats{text-align:center;padding:4px 6px}.stat-value-primary{color:var(--vscode-terminal-ansiGreen,#4ec9b0);line-height:1.2}.stat-label-secondary{font-weight:400;color:var(--vscode-descriptionForeground,#cccccc99);line-height:1.1}.frozen-group-overlay{border-right:2px solid var(--vscode-focusBorder,#007acc);align-items:center}.frozen-group-cell{color:var(--vscode-foreground,#ccc);border-right:1px solid var(--vscode-editorGroup-border,#3e3e42);display:flex;flex-direction:column;justify-content:center;box-sizing:border-box}.group-chevron{cursor:pointer;margin-left:4px;transition:transform .2s;font-size:10px;color:var(--vscode-icon-foreground,#ccc)}.group-chevron.expanded{transform:rotate(90deg)}.group-chevron:hover{color:var(--vscode-focusBorder,#007acc)}[data-vscode-theme-kind=vscode-light] .native-group-header{background:var(--vscode-editorGroupHeader-tabsBackground,#f3f3f3);border-bottom:1px solid var(--vscode-editorGroup-border,#e1e1e1)}[data-vscode-theme-kind=vscode-light] .frozen-group-overlay,[data-vscode-theme-kind=vscode-light] .native-group-header .group-cell-frozen{background:linear-gradient(135deg,var(--vscode-editorGroupHeader-tabsBackground,#f3f3f3) 0,color-mix(in srgb,var(--vscode-editorGroupHeader-tabsBackground,#f3f3f3) 95%,var(--vscode-focusBorder,#005fb8) 5%) 100%);border-right:2px solid var(--vscode-focusBorder,#005fb8)}[data-vscode-theme-kind=vscode-high-contrast] .native-group-header{border:1px solid var(--vscode-contrastBorder,#6fc3df)}[data-vscode-theme-kind=vscode-high-contrast] .native-group-header .tabulator-cell{border-right:1px solid var(--vscode-contrastBorder,#6fc3df)}@media (max-width:768px){.native-group-header .tabulator-cell{padding:4px 6px;min-height:40px}.stat-value-primary{font-size:12px}.stat-label-secondary{font-size:9px}}.tabulator{width:100%!important}.tabulator .tabulator-row.tabulator-group{background:linear-gradient(135deg,#0a4d78 0,#0e639c 50%,#17b 100%)!important;border-bottom:2px solid #007acc!important;padding:0;position:relative!important;overflow:visible!important;width:100%!important;max-width:100%!important;box-sizing:border-box!important}.dynamic-group-header{width:100%!important;max-width:100%!important;overflow:hidden!important;box-sizing:border-box!important}.dynamic-group-header table,.tabulator .tabulator-row.tabulator-group table{width:100%!important;max-width:100%!important;table-layout:fixed!important;border-collapse:collapse!important;margin:0!important;padding:0!important;box-sizing:border-box!important}.dynamic-group-header td,.tabulator .tabulator-row.tabulator-group td{border:none!important;background:0 0!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;transition:width .2s!important;box-sizing:border-box!important;min-width:0!important}.stat-value-primary{font-size:14px;font-weight:600;color:inherit;margin:0}.stat-label-secondary{font-size:11px;opacity:.8;color:inherit;margin:0}.stat-value-secondary{font-size:12px;opacity:.9;color:inherit}.filter-controls{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;padding:15px;margin-bottom:20px}.filter-control-row{display:flex;gap:20px;margin-bottom:15px;align-items:end;flex-wrap:wrap}.filter-control-row:last-child{margin-bottom:0}.filter-group{display:flex;flex-direction:column;gap:5px;width:50%}.filter-control-span{display:flex;align-items:stretch;gap:10px;width:100%}.filter-label{font-size:.9em;font-weight:500;color:var(--text-primary)}.search-input{padding:6px 10px;border:1px solid var(--border-color);border-radius:4px;background:var(--bg-primary);color:var(--text-primary);font-size:.9em}.range-filter{display:flex;flex-direction:column;align-content:flex-start;align-items:flex-start;gap:8px}.quick-filters{display:flex;gap:10px;margin-bottom:15px;flex-wrap:wrap}.quick-filter-btn{padding:6px 12px;border:1px solid var(--border-color);border-radius:4px;background:var(--bg-primary);color:var(--text-primary);cursor:pointer;font-size:.85em;transition:.2s}.quick-filter-btn:hover{background:var(--hover-bg);border-color:var(--accent-color)}.quick-filter-btn.active{background:var(--accent-color);color:#fff;border-color:var(--accent-color)}.frozen-group-overlay{position:absolute;top:0;left:0;background:linear-gradient(135deg,var(--bg-secondary) 0,color-mix(in srgb,var(--bg-secondary) 95%,var(--accent-color) 5%) 100%);border-right:2px solid var(--accent-color);z-index:103;box-shadow:2px 0 4px rgba(0,0,0,.1);align-items:center}.frozen-group-cell{padding:6px 10px;color:var(--text-primary);font-weight:600;font-size:12px;border-right:1px solid var(--border-color);display:flex;flex-direction:column;justify-content:center;min-height:45px;box-sizing:border-box}[data-theme=light] .tabulator .tabulator-row.tabulator-group{background:linear-gradient(135deg,#007acc 0,#005a9e 50%,#004a80 100%)!important}[data-theme=light] .filter-controls{background:#f8f9fa;border-color:#e1e4e8}[data-theme=light] .quick-filter-btn,[data-theme=light] .search-input{background:#fff;border-color:#e1e4e8;color:#333}[data-theme=light] .quick-filter-btn:hover{background:rgba(0,122,204,.05);border-color:#007acc}[data-theme=light] .frozen-group-overlay{border-right-color:#007acc}[data-theme=light] .frozen-group-cell{color:#333;border-right-color:#e1e4e8}[data-theme=auto] .tabulator .tabulator-row.tabulator-group,[data-theme=dark] .tabulator .tabulator-row.tabulator-group{background:linear-gradient(135deg,#0a4d78 0,#0e639c 50%,#17b 100%)!important}.search-controls{margin-bottom:15px;display:flex;gap:10px;flex-wrap:wrap}.language-item{display:flex;justify-content:space-between;align-items:center;padding:8px;border-bottom:1px solid var(--border-color)}.language-item:last-child{border-bottom:none}.language-name{font-weight:500}.language-files{color:var(--text-secondary);font-size:.9em}.table-container{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:6px;margin-bottom:20px}.file-path{font-family:Consolas,'Courier New',monospace;font-size:.9em}.loading{text-align:center;padding:40px;color:var(--text-secondary)}.hidden{display:none}.error{background:#dc3545;color:#fff;border:1px solid #dc3545;border-radius:4px;padding:15px;margin:10px 0}.spinner{display:inline-block;width:20px;height:20px;border:2px solid var(--border-color);border-radius:50%;border-top-color:var(--accent-color);animation:1s ease-in-out infinite spin;margin-right:10px}@keyframes spin{0%{transform:rotate(0)}100%,to{transform:rotate(360deg)}}.group-header-table{width:100%;table-layout:fixed;border-collapse:collapse;margin:0;position:relative}[data-theme=light] .table-container{background:#f8f9fa;border-color:#e1e4e8}[data-theme=light] .language-item{border-bottom-color:#e1e4e8}[data-theme=light] .error{background:#dc3545;border-color:#dc3545}[data-theme=light] .spinner{border-color:#007acc #e1e4e8 #e1e4e8}.frozen-group-overlay,.frozen-group-overlay-standalone{display:none!important;visibility:hidden!important}.tabulator .tabulator-row.tabulator-group{background:linear-gradient(135deg,var(--accent-color) 0,color-mix(in srgb,var(--accent-color) 80%,#000 20%) 100%)!important;color:#fff!important;font-weight:600!important;border-bottom:2px solid var(--accent-color)!important;box-shadow:0 2px 6px rgba(0,0,0,.3)!important}.native-group-header{background:var(--bg-secondary)!important;border-bottom:1px solid var(--border-color)!important;color:var(--text-primary)!important}.native-group-header .group-cell-frozen{background:linear-gradient(135deg,var(--bg-secondary) 0,color-mix(in srgb,var(--bg-secondary) 95%,var(--accent-color) 5%) 100%)!important;border-right:2px solid var(--accent-color)!important}.native-group-header .group-cell-normal{background:var(--bg-secondary)!important}.stat-value-primary{color:var(--accent-color)!important}.stat-label-secondary{color:var(--text-secondary)!important}.tabulator{position:relative!important;overflow:visible!important}.tabulator-tableholder{overflow:auto!important}[data-theme=light] .native-group-header{background:#f8f9fa!important;border-bottom-color:#e1e4e8!important;color:#333!important}[data-theme=light] .native-group-header .group-cell-frozen{background:linear-gradient(135deg,#f8f9fa 0,color-mix(in srgb,#f8f9fa 95%,#007acc 5%) 100%)!important;border-right-color:#007acc!important}[data-theme=light] .stat-value-primary{color:#007acc!important}[data-theme=light] .stat-label-secondary{color:#666!important}[data-theme=dark] .native-group-header{background:#2d2d30!important;border-bottom-color:#3c3c3c!important;color:#ccc!important}[data-theme=dark] .native-group-header .group-cell-frozen{background:linear-gradient(135deg,#2d2d30 0,color-mix(in srgb,#2d2d30 95%,#0078d4 5%) 100%)!important;border-right-color:#0078d4!important}[data-theme=dark] .stat-value-primary{color:#0078d4!important}[data-theme=dark] .stat-label-secondary{color:#9d9d9d!important}@media (max-width:768px){.native-group-header .tabulator-cell{padding:4px 6px!important;min-height:40px!important}.stat-value-primary{font-size:12px!important}.stat-label-secondary{font-size:9px!important}}.table-container{position:relative!important;overflow:hidden!important}.tabulator-row.tabulator-group *{pointer-events:auto!important}</style><button class=theme-toggle id=theme-toggle title="Toggle dark/light theme"><span id=theme-icon><EFBFBD></span> <span id=theme-text>Auto</span></button><div class=container><div class=header><div><h1>📊 Code Counter Report</h1><div class=header-info><p>Generated on 11/16/2025, 9:55:42 PM<p>Workspace: c:/Users/Bambang Herlambang/Documents/Semester 3/4_Back End Web Programming/uas 6/lost-and-found</div></div><div class=actions><div class=export-dropdown><button class=export-dropdown-btn id=export-dropdown-btn-1 title="Export Data">📊 Export ▼</button><div class=export-dropdown-content><a href=# data-export=csv>📊 Export CSV</a> <a href=# data-export=json>📋 Export JSON</a> <a href=# data-export=xml>📄 Export XML</a></div></div></div></div><div class=loading-indicator id=loading-indicator><div class=loading-spinner></div>Loading report data...</div><div class="hidden error-message" id=error-message><strong>Error:</strong> <span id=error-text></span></div><div class=hidden id=report-content><div class=summary-section><h2 class=section-title>📈 Summary Statistics</h2><div class=stats-grid id=summary-stats></div></div><div class=section><h2 class=section-title>🖥️ Language Statistics</h2><div class=language-stats id=language-stats></div></div><div class=actions-section><div class=actions><button class=btn id=group-language-btn title="Group by Language">📂 Group by Language</button> <button class=btn id=group-directory-btn title="Group by Directory">📁 Group by Directory</button> <button class=btn id=clear-group-btn title="Clear Grouping">📋 Clear Groups</button><div class=export-dropdown><button class=export-dropdown-btn id=export-dropdown-btn-2 title="Export Data">📊 Export ▼</button><div class=export-dropdown-content><a href=# data-export=csv>📊 Export CSV</a> <a href=# data-export=json>📋 Export JSON</a> <a href=# data-export=xml>📄 Export XML</a></div></div></div></div><div class=section><h2 class=section-title>📁 Files</h2><div class=filter-controls><div class=filter-control-row><div class=filter-control-span><label class=filter-label>🖥️ Language</label> <select class=search-input id=language-filter-tabulator><option value="">All Languages</select></div></div><div class=filter-control-row><div class=filter-group><label class=filter-label>📈 Lines Range</label><div class=range-filter><div><input class=search-input id=lines-min placeholder=Min style=width:60px type=number></div><div>to</div><div><input class=search-input id=lines-max placeholder=Max style=width:60px type=number></div></div></div><div class=filter-group><label class=filter-label>📦 File Size</label><div class=range-filter><div><input class=search-input id=size-min placeholder="Min KB" style=width:60px type=number></div><div>to</div><div><input class=search-input id=size-max placeholder="Max KB" style=width:60px type=number></div></div></div></div><div class=filter-group><label class=filter-label>🔄 Actions</label> <button class=btn id=clear-all-filters-btn title="Clear all search filters">Clear Filters</button></div></div><div class=table-container><div id=files-table-tabulator></div></div></div><div class=footer><p>Generated by <a href="https://marketplace.visualstudio.com/items?itemName=DelightfulGames.vscode-code-counter" target=_blank>VS Code Code Counter Extension v1.1.0</a> by DelightfulGames<p><small>Visit our <a href=https://github.com/DelightfulGames/vscode-code-counter target=_blank>GitHub Repository</a> for support and updates</small></div></div></div><script src=https://unpkg.com/tabulator-tables@6.2.1/dist/js/tabulator.min.js></script><script>function escapeForJavaScript(e){return e?e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/"/g,'\\"').replace(/\r?\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\0/g,"\\0"):""}function escapeForHTMLAttribute(e){return e?e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r?\n/g,"&#10;").replace(/\r/g,"&#13;"):""}function formatSizeKB(e){return e<1?`${(1024*e).toLocaleString()} B`:e<1024?`${e.toFixed(2)} KB`:`${(e/1024).toFixed(2)} MB`}function calculateGroupStats(e,n){const a=e.getRows(),t={totalLines:0,codeLines:0,commentLines:0,blankLines:0,size:0},o=new Set;a.forEach(e=>{const n=e.getData();t.totalLines+=n.lines||0,t.codeLines+=n.codeLines||0,t.commentLines+=n.commentLines||0,t.blankLines+=n.blankLines||0,t.size+=n.size||0,n.language&&""!==n.language.trim()&&o.add(n.language)});const r=t.totalLines>0?Math.round(t.commentLines/t.totalLines*100):0;return{...t,avgCommentRatio:r,languageCount:o.size,languages:Array.from(o).sort(),count:n}}function updateGroupHeaderStructure(){if(window.filesTable){debug.info("🔄 [updateGroupHeaderStructure] Starting smooth group header reordering...");try{const e=window.filesTable.getColumns();debug.info("🔄 [updateGroupHeaderStructure] Current columns:",e.map(e=>e.getField()));const n=document.querySelectorAll(".native-group-header");if(0===n.length)return void debug.warning("⚠️ [updateGroupHeaderStructure] No group headers found in DOM");debug.info(`🔄 [updateGroupHeaderStructure] Found ${n.length} group headers to update`),n.forEach((n,a)=>{try{const t=Array.from(n.children);debug.verbose(`🔄 [updateGroupHeaderStructure] Group ${a}: Found ${t.length} existing cells`);const o=new Map;t.forEach(e=>{const n=e.getAttribute("data-field");n&&o.set(n,e)});const r=[];let i=!1;e.forEach((n,a)=>{const t=n.getField();if(0===a&&!i){const n=o.get("directory-fileName");if(n){const a=e[0],t=e[1];if(a&&t){const e=a.getWidth()+t.getWidth();n.style.width=`${e}px`,n.style.minWidth=`${e}px`,n.style.flex=`0 0 ${e}px`}r.push(n)}return void(i=!0)}if(1===a)return;const s=o.get(t);if(s){const e=n.getWidth();s.style.width=`${e}px`,s.style.minWidth=`${e}px`,s.style.flex=`0 0 ${e}px`,r.push(s)}}),t.forEach(e=>e.remove()),r.forEach(e=>{e&&n.appendChild(e)}),debug.verbose(`✅ [updateGroupHeaderStructure] Group ${a}: Reordered ${r.length} cells`)}catch(e){debug.error(`❌ [updateGroupHeaderStructure] Error updating group header ${a}:`,e)}}),debug.info("✅ [updateGroupHeaderStructure] Group headers smoothly reordered without disrupting grouping"),setTimeout(()=>{"function"==typeof updateGroupHeaderWidths&&(debug.info("🔄 [updateGroupHeaderStructure] Calling updateGroupHeaderWidths after reordering"),updateGroupHeaderWidths())},10)}catch(e){debug.error("❌ [updateGroupHeaderStructure] Error during smooth group header update:",e),debug.warning("🔄 [updateGroupHeaderStructure] Falling back to basic width update only"),"function"==typeof updateGroupHeaderWidths&&updateGroupHeaderWidths()}}else debug.warning("⚠️ updateGroupHeaderStructure: window.filesTable not available")}function safeToLocaleString(e){return null==e||isNaN(e)?"0":Number(e).toLocaleString()}function runInSafeContext(e,...n){try{return e.apply(this,n)}catch(a){throw debug.error("Error in embedded function:",a),debug.error("Function name:",e.name),debug.error("Arguments:",n),a}}function initializeReportFromEmbeddedData(){debug.info("🎯 Initializing report from embedded data...");const e=[{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\README.md",relativePath:"README.md",directory:"",fileName:"README.md",language:"Markdown",lines:1,codeLines:0,commentLines:0,blankLines:1,size:0},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\setup.go",relativePath:"setup.go",directory:"",fileName:"setup.go",language:"Go",lines:254,codeLines:214,commentLines:14,blankLines:26,size:8715},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\Makefile",relativePath:"Makefile",directory:"",fileName:"Makefile",language:"Unknown",lines:1,codeLines:0,commentLines:0,blankLines:1,size:0},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\user.html",relativePath:"web/user.html",directory:"web",fileName:"user.html",language:"HTML",lines:638,codeLines:557,commentLines:6,blankLines:75,size:19659},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\register.html",relativePath:"web/register.html",directory:"web",fileName:"register.html",language:"HTML",lines:519,codeLines:439,commentLines:0,blankLines:80,size:16471},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\manager.html",relativePath:"web/manager.html",directory:"web",fileName:"manager.html",language:"HTML",lines:253,codeLines:225,commentLines:8,blankLines:20,size:11597},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\login.html",relativePath:"web/login.html",directory:"web",fileName:"login.html",language:"HTML",lines:396,codeLines:334,commentLines:0,blankLines:62,size:11744},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\index.html",relativePath:"web/index.html",directory:"web",fileName:"index.html",language:"HTML",lines:322,codeLines:279,commentLines:0,blankLines:43,size:9520},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\excel_export.go",relativePath:"internal/utils/excel_export.go",directory:"internal/utils",fileName:"excel_export.go",language:"Go",lines:99,codeLines:80,commentLines:8,blankLines:11,size:2302},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\hash.go",relativePath:"internal/utils/hash.go",directory:"internal/utils",fileName:"hash.go",language:"Go",lines:17,codeLines:12,commentLines:2,blankLines:3,size:480},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\notification_worker.go",relativePath:"internal/workers/notification_worker.go",directory:"internal/workers",fileName:"notification_worker.go",language:"Go",lines:116,codeLines:83,commentLines:12,blankLines:21,size:2961},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\error.go",relativePath:"internal/utils/error.go",directory:"internal/utils",fileName:"error.go",language:"Go",lines:66,codeLines:50,commentLines:4,blankLines:12,size:1642},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\matching_worker.go",relativePath:"internal/workers/matching_worker.go",directory:"internal/workers",fileName:"matching_worker.go",language:"Go",lines:89,codeLines:66,commentLines:9,blankLines:14,size:2180},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\expire_worker.go",relativePath:"internal/workers/expire_worker.go",directory:"internal/workers",fileName:"expire_worker.go",language:"Go",lines:103,codeLines:73,commentLines:12,blankLines:18,size:2485},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\audit_worker.go",relativePath:"internal/workers/audit_worker.go",directory:"internal/workers",fileName:"audit_worker.go",language:"Go",lines:72,codeLines:52,commentLines:6,blankLines:14,size:1655},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\user.js",relativePath:"web/js/user.js",directory:"web/js",fileName:"user.js",language:"JavaScript",lines:491,codeLines:413,commentLines:22,blankLines:56,size:15187},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\manager.js",relativePath:"web/js/manager.js",directory:"web/js",fileName:"manager.js",language:"JavaScript",lines:768,codeLines:667,commentLines:26,blankLines:75,size:25041},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\css\\style.css",relativePath:"web/css/style.css",directory:"web/css",fileName:"style.css",language:"CSS",lines:675,codeLines:551,commentLines:19,blankLines:105,size:11308},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\main.js",relativePath:"web/js/main.js",directory:"web/js",fileName:"main.js",language:"JavaScript",lines:350,codeLines:270,commentLines:28,blankLines:52,size:9386},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\admin.js",relativePath:"web/js/admin.js",directory:"web/js",fileName:"admin.js",language:"JavaScript",lines:435,codeLines:356,commentLines:22,blankLines:57,size:12457},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\image_handler.go",relativePath:"internal/utils/image_handler.go",directory:"internal/utils",fileName:"image_handler.go",language:"Go",lines:187,codeLines:131,commentLines:27,blankLines:29,size:4600},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\pdf_export.go",relativePath:"internal/utils/pdf_export.go",directory:"internal/utils",fileName:"pdf_export.go",language:"Go",lines:105,codeLines:78,commentLines:12,blankLines:15,size:2410},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\validator.go",relativePath:"internal/utils/validator.go",directory:"internal/utils",fileName:"validator.go",language:"Go",lines:84,codeLines:57,commentLines:12,blankLines:15,size:2095},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\similarity.go",relativePath:"internal/utils/similarity.go",directory:"internal/utils",fileName:"similarity.go",language:"Go",lines:159,codeLines:115,commentLines:18,blankLines:26,size:3592},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\response.go",relativePath:"internal/utils/response.go",directory:"internal/utils",fileName:"response.go",language:"Go",lines:67,codeLines:53,commentLines:6,blankLines:8,size:1841},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\matching.go",relativePath:"internal/utils/matching.go",directory:"internal/utils",fileName:"matching.go",language:"Go",lines:102,codeLines:79,commentLines:8,blankLines:15,size:2429},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\archive_repo.go",relativePath:"internal/repositories/archive_repo.go",directory:"internal/repositories",fileName:"archive_repo.go",language:"Go",lines:91,codeLines:67,commentLines:9,blankLines:15,size:2537},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\notification_service.go",relativePath:"internal/services/notification_service.go",directory:"internal/services",fileName:"notification_service.go",language:"Go",lines:115,codeLines:79,commentLines:14,blankLines:22,size:3873},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\match_service.go",relativePath:"internal/services/match_service.go",directory:"internal/services",fileName:"match_service.go",language:"Go",lines:239,codeLines:185,commentLines:23,blankLines:31,size:6999},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\audit_log_repo.go",relativePath:"internal/repositories/audit_log_repo.go",directory:"internal/repositories",fileName:"audit_log_repo.go",language:"Go",lines:104,codeLines:74,commentLines:11,blankLines:19,size:2856},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\lost_item_service.go",relativePath:"internal/services/lost_item_service.go",directory:"internal/services",fileName:"lost_item_service.go",language:"Go",lines:207,codeLines:151,commentLines:21,blankLines:35,size:6408},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\match_result_repo.go",relativePath:"internal/repositories/match_result_repo.go",directory:"internal/repositories",fileName:"match_result_repo.go",language:"Go",lines:124,codeLines:92,commentLines:13,blankLines:19,size:3768},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\lost_item_repo.go",relativePath:"internal/repositories/lost_item_repo.go",directory:"internal/repositories",fileName:"lost_item_repo.go",language:"Go",lines:127,codeLines:89,commentLines:15,blankLines:23,size:3714},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\notification_repo.go",relativePath:"internal/repositories/notification_repo.go",directory:"internal/repositories",fileName:"notification_repo.go",language:"Go",lines:103,codeLines:73,commentLines:12,blankLines:18,size:3064},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\item_repo.go",relativePath:"internal/repositories/item_repo.go",directory:"internal/repositories",fileName:"item_repo.go",language:"Go",lines:158,codeLines:111,commentLines:18,blankLines:29,size:4412},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_verification_repo.go",relativePath:"internal/repositories/claim_verification_repo.go",directory:"internal/repositories",fileName:"claim_verification_repo.go",language:"Go",lines:66,codeLines:50,commentLines:6,blankLines:10,size:2144},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_repo.go",relativePath:"internal/repositories/claim_repo.go",directory:"internal/repositories",fileName:"claim_repo.go",language:"Go",lines:145,codeLines:107,commentLines:15,blankLines:23,size:3957},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\category_repo.go",relativePath:"internal/repositories/category_repo.go",directory:"internal/repositories",fileName:"category_repo.go",language:"Go",lines:101,codeLines:76,commentLines:8,blankLines:17,size:2731},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\item_service.go",relativePath:"internal/services/item_service.go",directory:"internal/services",fileName:"item_service.go",language:"Go",lines:211,codeLines:156,commentLines:20,blankLines:35,size:7010},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\export_service.go",relativePath:"internal/services/export_service.go",directory:"internal/services",fileName:"export_service.go",language:"Go",lines:254,codeLines:198,commentLines:21,blankLines:35,size:7335},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\claim_service.go",relativePath:"internal/services/claim_service.go",directory:"internal/services",fileName:"claim_service.go",language:"Go",lines:268,codeLines:188,commentLines:32,blankLines:48,size:8230},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\category_service.go",relativePath:"internal/services/category_service.go",directory:"internal/services",fileName:"category_service.go",language:"Go",lines:147,codeLines:104,commentLines:17,blankLines:26,size:4313},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\auth_service.go",relativePath:"internal/services/auth_service.go",directory:"internal/services",fileName:"auth_service.go",language:"Go",lines:172,codeLines:121,commentLines:23,blankLines:28,size:4586},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\routes\\routes.go",relativePath:"internal/routes/routes.go",directory:"internal/routes",fileName:"routes.go",language:"Go",lines:128,codeLines:89,commentLines:21,blankLines:18,size:5324},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\audit_service.go",relativePath:"internal/services/audit_service.go",directory:"internal/services",fileName:"audit_service.go",language:"Go",lines:68,codeLines:50,commentLines:4,blankLines:14,size:2038},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\archive_service.go",relativePath:"internal/services/archive_service.go",directory:"internal/services",fileName:"archive_service.go",language:"Go",lines:67,codeLines:48,commentLines:5,blankLines:14,size:1859},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\revision_log_repo.go",relativePath:"internal/repositories/revision_log_repo.go",directory:"internal/repositories",fileName:"revision_log_repo.go",language:"Go",lines:92,codeLines:64,commentLines:10,blankLines:18,size:2479},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\item.go",relativePath:"internal/models/item.go",directory:"internal/models",fileName:"item.go",language:"Go",lines:152,codeLines:119,commentLines:15,blankLines:18,size:5266},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\lost_item.go",relativePath:"internal/models/lost_item.go",directory:"internal/models",fileName:"lost_item.go",language:"Go",lines:93,codeLines:73,commentLines:8,blankLines:12,size:2867},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\match_result.go",relativePath:"internal/models/match_result.go",directory:"internal/models",fileName:"match_result.go",language:"Go",lines:128,codeLines:104,commentLines:10,blankLines:14,size:4330},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim_verification.go",relativePath:"internal/models/claim_verification.go",directory:"internal/models",fileName:"claim_verification.go",language:"Go",lines:77,codeLines:59,commentLines:8,blankLines:10,size:2898},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim.go",relativePath:"internal/models/claim.go",directory:"internal/models",fileName:"claim.go",language:"Go",lines:164,codeLines:128,commentLines:14,blankLines:22,size:5082},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\category.go",relativePath:"internal/models/category.go",directory:"internal/models",fileName:"category.go",language:"Go",lines:48,codeLines:36,commentLines:5,blankLines:7,size:1500},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\verification_service.go",relativePath:"internal/services/verification_service.go",directory:"internal/services",fileName:"verification_service.go",language:"Go",lines:153,codeLines:122,commentLines:10,blankLines:21,size:4950},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\audit_log.go",relativePath:"internal/models/audit_log.go",directory:"internal/models",fileName:"audit_log.go",language:"Go",lines:98,codeLines:80,commentLines:7,blankLines:11,size:2895},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\archive.go",relativePath:"internal/models/archive.go",directory:"internal/models",fileName:"archive.go",language:"Go",lines:110,codeLines:92,commentLines:7,blankLines:11,size:3881},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\user_service.go",relativePath:"internal/services/user_service.go",directory:"internal/services",fileName:"user_service.go",language:"Go",lines:190,codeLines:128,commentLines:26,blankLines:36,size:5388},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\user_repo.go",relativePath:"internal/repositories/user_repo.go",directory:"internal/repositories",fileName:"user_repo.go",language:"Go",lines:152,codeLines:108,commentLines:19,blankLines:25,size:4242},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\role_repo.go",relativePath:"internal/repositories/role_repo.go",directory:"internal/repositories",fileName:"role_repo.go",language:"Go",lines:64,codeLines:48,commentLines:6,blankLines:10,size:1470},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\user.go",relativePath:"internal/models/user.go",directory:"internal/models",fileName:"user.go",language:"Go",lines:104,codeLines:75,commentLines:13,blankLines:16,size:2986},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\role.go",relativePath:"internal/models/role.go",directory:"internal/models",fileName:"role.go",language:"Go",lines:52,codeLines:38,commentLines:6,blankLines:8,size:1296},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\revision_log.go",relativePath:"internal/models/revision_log.go",directory:"internal/models",fileName:"revision_log.go",language:"Go",lines:72,codeLines:58,commentLines:5,blankLines:9,size:2294},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\notification.go",relativePath:"internal/models/notification.go",directory:"internal/models",fileName:"notification.go",language:"Go",lines:127,codeLines:104,commentLines:10,blankLines:13,size:4112},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\admin.html",relativePath:"web/admin.html",directory:"web",fileName:"admin.html",language:"HTML",lines:316,codeLines:290,commentLines:8,blankLines:18,size:14095},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\config.go",relativePath:"internal/config/config.go",directory:"internal/config",fileName:"config.go",language:"Go",lines:66,codeLines:50,commentLines:6,blankLines:10,size:1469},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\archive_controller.go",relativePath:"internal/controllers/archive_controller.go",directory:"internal/controllers",fileName:"archive_controller.go",language:"Go",lines:68,codeLines:50,commentLines:6,blankLines:12,size:2021},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\database.go",relativePath:"internal/config/database.go",directory:"internal/config",fileName:"database.go",language:"Go",lines:145,codeLines:110,commentLines:14,blankLines:21,size:3424},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\admin_controller.go",relativePath:"internal/controllers/admin_controller.go",directory:"internal/controllers",fileName:"admin_controller.go",language:"Go",lines:98,codeLines:75,commentLines:7,blankLines:16,size:3139},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\role_middleware.go",relativePath:"internal/middleware/role_middleware.go",directory:"internal/middleware",fileName:"role_middleware.go",language:"Go",lines:56,codeLines:41,commentLines:5,blankLines:10,size:1302},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\rate_limiter.go",relativePath:"internal/middleware/rate_limiter.go",directory:"internal/middleware",fileName:"rate_limiter.go",language:"Go",lines:112,codeLines:81,commentLines:11,blankLines:20,size:2358},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\logger.go",relativePath:"internal/middleware/logger.go",directory:"internal/middleware",fileName:"logger.go",language:"Go",lines:45,codeLines:30,commentLines:7,blankLines:8,size:865},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\jwt_middleware.go",relativePath:"internal/middleware/jwt_middleware.go",directory:"internal/middleware",fileName:"jwt_middleware.go",language:"Go",lines:105,codeLines:81,commentLines:8,blankLines:16,size:2507},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\jwt.go",relativePath:"internal/config/jwt.go",directory:"internal/config",fileName:"jwt.go",language:"Go",lines:131,codeLines:92,commentLines:17,blankLines:22,size:3167},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\cors.go",relativePath:"internal/middleware/cors.go",directory:"internal/middleware",fileName:"cors.go",language:"Go",lines:22,codeLines:17,commentLines:1,blankLines:4,size:702},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\auth_controller.go",relativePath:"internal/controllers/auth_controller.go",directory:"internal/controllers",fileName:"auth_controller.go",language:"Go",lines:102,codeLines:71,commentLines:13,blankLines:18,size:2712},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\report_controller.go",relativePath:"internal/controllers/report_controller.go",directory:"internal/controllers",fileName:"report_controller.go",language:"Go",lines:109,codeLines:89,commentLines:5,blankLines:15,size:2911},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\match_controller.go",relativePath:"internal/controllers/match_controller.go",directory:"internal/controllers",fileName:"match_controller.go",language:"Go",lines:86,codeLines:63,commentLines:8,blankLines:15,size:2532},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\lost_item_controller.go",relativePath:"internal/controllers/lost_item_controller.go",directory:"internal/controllers",fileName:"lost_item_controller.go",language:"Go",lines:193,codeLines:141,commentLines:15,blankLines:37,size:6229},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\item_controller.go",relativePath:"internal/controllers/item_controller.go",directory:"internal/controllers",fileName:"item_controller.go",language:"Go",lines:222,codeLines:161,commentLines:18,blankLines:43,size:6891},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\claim_controller.go",relativePath:"internal/controllers/claim_controller.go",directory:"internal/controllers",fileName:"claim_controller.go",language:"Go",lines:247,codeLines:184,commentLines:20,blankLines:43,size:7320},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\user_controller.go",relativePath:"internal/controllers/user_controller.go",directory:"internal/controllers",fileName:"user_controller.go",language:"Go",lines:237,codeLines:169,commentLines:20,blankLines:48,size:7199},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\category_controller.go",relativePath:"internal/controllers/category_controller.go",directory:"internal/controllers",fileName:"category_controller.go",language:"Go",lines:129,codeLines:94,commentLines:10,blankLines:25,size:3999},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.sum",relativePath:"go.sum",directory:"",fileName:"go.sum",language:"Unknown",lines:132,codeLines:131,commentLines:0,blankLines:1,size:11488},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.mod",relativePath:"go.mod",directory:"",fileName:"go.mod",language:"Unknown",lines:58,codeLines:54,commentLines:0,blankLines:4,size:2272},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\seed.sql",relativePath:"database/seed.sql",directory:"database",fileName:"seed.sql",language:"SQL",lines:202,codeLines:95,commentLines:75,blankLines:32,size:13363},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\schema.sql",relativePath:"database/schema.sql",directory:"database",fileName:"schema.sql",language:"SQL",lines:300,codeLines:242,commentLines:43,blankLines:15,size:13447},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\cmd\\server\\main.go",relativePath:"cmd/server/main.go",directory:"cmd/server",fileName:"main.go",language:"Go",lines:121,codeLines:83,commentLines:17,blankLines:21,size:3034}];if(e&&Array.isArray(e)&&e.length>0)try{const n=e,a={totalFiles:n.length||0,totalLines:n.reduce((e,n)=>e+(Number(n.lines)||0),0),totalCodeLines:n.reduce((e,n)=>e+(Number(n.codeLines)||0),0),totalCommentLines:n.reduce((e,n)=>e+(Number(n.commentLines)||0),0),totalBlankLines:n.reduce((e,n)=>e+(Number(n.blankLines)||0),0),languageCount:0},t=new Map;n.forEach(e=>{const n=e.language||"Unknown";t.has(n)||t.set(n,{name:n,files:0,lines:0});const a=t.get(n);a.files++,a.lines+=Number(e.lines)||0});const o=Array.from(t.values()).sort((e,n)=>n.lines-e.lines);a.languageCount=o.length;const r={summary:a,languages:o,files:n};return debug.info("✅ Report data prepared:",{files:n.length,languages:o.length,totalLines:a.totalLines}),r}catch(e){return debug.error("❌ Failed to parse embedded data:",e),null}return null}function setupAdvancedFiltering(e){if(debug.info("🔧 Setting up advanced filtering..."),!window.filesTable)return debug.warning("⚠️ Tabulator table not ready for filtering setup, retrying in 200ms..."),void setTimeout(()=>setupAdvancedFiltering(e),1e3);populateLanguageFilter(e),setupLanguageFilter(),setupRangeFilters(),debug.info("✅ Advanced filtering setup completed")}function populateLanguageFilter(e){const n=document.getElementById("language-filter-tabulator");if(n){const a=[...new Set(e.map(e=>e.language))].sort();n.innerHTML='<option value="">All Languages</option>'+a.map(e=>`<option value="${e}">${e}</option>`).join("")}}function setupLanguageFilter(){const e=document.getElementById("language-filter-tabulator");e&&e.addEventListener("change",function(){this.value?(window.filesTable.setFilter("language","=",this.value),debug.info("🔍 Language filter applied:",this.value)):(window.filesTable.clearFilter("language"),debug.info("🔄 Language filter cleared - showing all languages"))})}function setupRangeFilters(){setupLinesRangeFilter(),setupSizeRangeFilter()}function setupLinesRangeFilter(){const e=document.getElementById("lines-min"),n=document.getElementById("lines-max");function a(){window.filesTable.clearFilter("lines"),e&&e.value&&window.filesTable.addFilter("lines",">=",parseInt(e.value)),n&&n.value&&window.filesTable.addFilter("lines","<=",parseInt(n.value)),debug.info("🔍 Lines filter applied:",{min:e?.value,max:n?.value})}e&&e.addEventListener("input",a),n&&n.addEventListener("input",a)}function setupSizeRangeFilter(){const e=document.getElementById("size-min"),n=document.getElementById("size-max");function a(){window.filesTable.clearFilter("sizeKB"),e&&e.value&&window.filesTable.addFilter("sizeKB",">=",parseFloat(e.value)),n&&n.value&&window.filesTable.addFilter("sizeKB","<=",parseFloat(n.value)),debug.info("🔍 Size filter applied:",{min:e?.value,max:n?.value})}e&&e.addEventListener("input",a),n&&n.addEventListener("input",a)}function safeToLocaleNumber(e){if(null==e||""===e)return 0;if("number"==typeof e)return e;if("string"==typeof e){const n=Number(e.replace(/,/g,""));return isNaN(n)?0:n}return 0}window.xmlExportModuleCode="/**\r\n * Standalone XML Export Module\r\n * Loaded dynamically only when XML export is requested\r\n */\r\n\r\n(function() {\r\n 'use strict';\r\n\r\n console.log('XML Export Module: Loading...');\r\n\r\n /**\r\n * XML escaping function\r\n */\r\n function escapeXML(str) {\r\n if (str === null || str === undefined) {\r\n return '';\r\n }\r\n var result = String(str);\r\n result = result.replace(/&/g, '&amp;');\r\n result = result.replace(/</g, '&lt;');\r\n result = result.replace(/>/g, '&gt;');\r\n result = result.replace(/\"/g, '&quot;');\r\n result = result.replace(/'/g, '&apos;');\r\n return result;\r\n }\r\n\r\n /**\r\n * Generate XML content from table data\r\n */\r\n function generateXMLFromTable() {\r\n console.log('XML Export Module: Starting XML generation...');\r\n \r\n try {\r\n if (!window.filesTable) {\r\n throw new Error('Table not available');\r\n }\r\n\r\n var data = window.filesTable.getData();\r\n var dataLength = data.length;\r\n console.log('XML Export Module: Retrieved ' + dataLength + ' rows for XML export');\r\n\r\n // Calculate totals manually\r\n var totalFiles = dataLength;\r\n var totalLines = 0;\r\n var totalCodeLines = 0;\r\n var totalCommentLines = 0;\r\n var totalBlankLines = 0;\r\n var totalSize = 0;\r\n\r\n var i;\r\n for (i = 0; i < dataLength; i++) {\r\n var row = data[i];\r\n totalLines = totalLines + (parseInt(row.lines, 10) || 0);\r\n totalCodeLines = totalCodeLines + (parseInt(row.codeLines, 10) || 0);\r\n totalCommentLines = totalCommentLines + (parseInt(row.commentLines, 10) || 0);\r\n totalBlankLines = totalBlankLines + (parseInt(row.blankLines, 10) || 0);\r\n totalSize = totalSize + (parseInt(row.size, 10) || 0);\r\n }\r\n\r\n // Build XML step by step\r\n var xml = '';\r\n xml = xml + '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\r\n xml = xml + '<CodeCounterReport>\\n';\r\n \r\n // Metadata\r\n xml = xml + ' <Metadata>\\n';\r\n xml = xml + ' <Generated>' + escapeXML(new Date().toISOString()) + '</Generated>\\n';\r\n xml = xml + ' <Generator>VS Code Code Counter Extension</Generator>\\n';\r\n xml = xml + ' <Version>1.0.2</Version>\\n';\r\n xml = xml + ' <TotalFiles>' + String(totalFiles) + '</TotalFiles>\\n';\r\n xml = xml + ' </Metadata>\\n';\r\n \r\n // Summary\r\n xml = xml + ' <Summary>\\n';\r\n xml = xml + ' <TotalLines>' + String(totalLines) + '</TotalLines>\\n';\r\n xml = xml + ' <TotalCodeLines>' + String(totalCodeLines) + '</TotalCodeLines>\\n';\r\n xml = xml + ' <TotalCommentLines>' + String(totalCommentLines) + '</TotalCommentLines>\\n';\r\n xml = xml + ' <TotalBlankLines>' + String(totalBlankLines) + '</TotalBlankLines>\\n';\r\n xml = xml + ' <TotalSize>' + String(totalSize) + '</TotalSize>\\n';\r\n xml = xml + ' </Summary>\\n';\r\n \r\n // Files\r\n xml = xml + ' <Files>\\n';\r\n for (i = 0; i < dataLength; i++) {\r\n var fileRow = data[i];\r\n xml = xml + ' <File>\\n';\r\n xml = xml + ' <RelativePath>' + escapeXML(fileRow.relativePath || '') + '</RelativePath>\\n';\r\n xml = xml + ' <Directory>' + escapeXML(fileRow.directory || '') + '</Directory>\\n';\r\n xml = xml + ' <FileName>' + escapeXML(fileRow.fileName || '') + '</FileName>\\n';\r\n xml = xml + ' <Language>' + escapeXML(fileRow.language || '') + '</Language>\\n';\r\n xml = xml + ' <Lines>' + String(parseInt(fileRow.lines, 10) || 0) + '</Lines>\\n';\r\n xml = xml + ' <CodeLines>' + String(parseInt(fileRow.codeLines, 10) || 0) + '</CodeLines>\\n';\r\n xml = xml + ' <CommentLines>' + String(parseInt(fileRow.commentLines, 10) || 0) + '</CommentLines>\\n';\r\n xml = xml + ' <BlankLines>' + String(parseInt(fileRow.blankLines, 10) || 0) + '</BlankLines>\\n';\r\n xml = xml + ' <Size>' + String(parseInt(fileRow.size, 10) || 0) + '</Size>\\n';\r\n xml = xml + ' </File>\\n';\r\n }\r\n xml = xml + ' </Files>\\n';\r\n xml = xml + '</CodeCounterReport>';\r\n\r\n console.log('XML Export Module: Generated XML with ' + String(dataLength) + ' files');\r\n return xml;\r\n } catch (error) {\r\n console.error('XML Export Module: XML generation failed:', error);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Download XML file\r\n */\r\n function downloadXML() {\r\n console.log('XML Export Module: Starting XML download...');\r\n \r\n try {\r\n var xmlData = generateXMLFromTable();\r\n var blob = new Blob([xmlData], { type: 'application/xml;charset=utf-8;' });\r\n var link = document.createElement('a');\r\n \r\n if (link.download !== undefined) {\r\n var url = URL.createObjectURL(blob);\r\n var currentDate = new Date();\r\n var dateStr = currentDate.toISOString().slice(0, 10);\r\n var fileName = 'code-counter-report-' + dateStr + '.xml';\r\n \r\n link.setAttribute('href', url);\r\n link.setAttribute('download', fileName);\r\n link.style.visibility = 'hidden';\r\n document.body.appendChild(link);\r\n link.click();\r\n document.body.removeChild(link);\r\n \r\n console.log('XML Export Module: XML download completed');\r\n }\r\n } catch (error) {\r\n console.error('XML Export Module: XML download failed:', error);\r\n alert('Failed to download XML: ' + error.message);\r\n }\r\n }\r\n\r\n // Make functions globally available\r\n window.XMLExport = {\r\n generateXML: generateXMLFromTable,\r\n download: downloadXML\r\n };\r\n\r\n console.log('XML Export Module: ✅ Loaded successfully');\r\n\r\n})();",window.escapeForJavaScript=escapeForJavaScript,window.escapeForHTMLAttribute=escapeForHTMLAttribute,window.formatSizeKB=formatSizeKB,window.calculateGroupStats=calculateGroupStats,window.updateGroupHeaderStructure=updateGroupHeaderStructure,"undefined"==typeof vscode&&(window.vscode={postMessage:function(e){if(debug.info("📨 VS Code API not available (standalone HTML), message:",e),"saveCSV"===e.command){const n=new Blob([e.data],{type:"text/csv"}),a=window.URL.createObjectURL(n),t=document.createElement("a");t.href=a,t.download=e.filename||"export.csv",document.body.appendChild(t),t.click(),document.body.removeChild(t),window.URL.revokeObjectURL(a),debug.info("✅ CSV file downloaded in standalone mode")}}});let reportData=null;function parseEmbeddedData(){try{if("undefined"!=typeof embeddedJsonData&&embeddedJsonData&&"{{JSON_DATA}}"!==embeddedJsonData)return debug.info("📥 Parsing webview embedded JSON data..."),reportData=JSON.parse(embeddedJsonData),debug.info("✅ Webview JSON parsed successfully"),debug.info("📊 Report data structure:",{hasSummary:!!reportData.summary,hasLanguages:!!reportData.languages,hasFiles:!!reportData.files,fileCount:reportData.files?reportData.files.length:0}),reportData;if("undefined"!=typeof embeddedJsonFiles&&embeddedJsonFiles&&'[[{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\README.md","relativePath":"README.md","directory":"","fileName":"README.md","language":"Markdown","lines":1,"codeLines":0,"commentLines":0,"blankLines":1,"size":0},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\setup.go","relativePath":"setup.go","directory":"","fileName":"setup.go","language":"Go","lines":254,"codeLines":214,"commentLines":14,"blankLines":26,"size":8715},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\Makefile","relativePath":"Makefile","directory":"","fileName":"Makefile","language":"Unknown","lines":1,"codeLines":0,"commentLines":0,"blankLines":1,"size":0},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\user.html","relativePath":"web/user.html","directory":"web","fileName":"user.html","language":"HTML","lines":638,"codeLines":557,"commentLines":6,"blankLines":75,"size":19659},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\register.html","relativePath":"web/register.html","directory":"web","fileName":"register.html","language":"HTML","lines":519,"codeLines":439,"commentLines":0,"blankLines":80,"size":16471},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\manager.html","relativePath":"web/manager.html","directory":"web","fileName":"manager.html","language":"HTML","lines":253,"codeLines":225,"commentLines":8,"blankLines":20,"size":11597},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\login.html","relativePath":"web/login.html","directory":"web","fileName":"login.html","language":"HTML","lines":396,"codeLines":334,"commentLines":0,"blankLines":62,"size":11744},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\index.html","relativePath":"web/index.html","directory":"web","fileName":"index.html","language":"HTML","lines":322,"codeLines":279,"commentLines":0,"blankLines":43,"size":9520},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\excel_export.go","relativePath":"internal/utils/excel_export.go","directory":"internal/utils","fileName":"excel_export.go","language":"Go","lines":99,"codeLines":80,"commentLines":8,"blankLines":11,"size":2302},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\hash.go","relativePath":"internal/utils/hash.go","directory":"internal/utils","fileName":"hash.go","language":"Go","lines":17,"codeLines":12,"commentLines":2,"blankLines":3,"size":480},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\notification_worker.go","relativePath":"internal/workers/notification_worker.go","directory":"internal/workers","fileName":"notification_worker.go","language":"Go","lines":116,"codeLines":83,"commentLines":12,"blankLines":21,"size":2961},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\error.go","relativePath":"internal/utils/error.go","directory":"internal/utils","fileName":"error.go","language":"Go","lines":66,"codeLines":50,"commentLines":4,"blankLines":12,"size":1642},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\matching_worker.go","relativePath":"internal/workers/matching_worker.go","directory":"internal/workers","fileName":"matching_worker.go","language":"Go","lines":89,"codeLines":66,"commentLines":9,"blankLines":14,"size":2180},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\expire_worker.go","relativePath":"internal/workers/expire_worker.go","directory":"internal/workers","fileName":"expire_worker.go","language":"Go","lines":103,"codeLines":73,"commentLines":12,"blankLines":18,"size":2485},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\audit_worker.go","relativePath":"internal/workers/audit_worker.go","directory":"internal/workers","fileName":"audit_worker.go","language":"Go","lines":72,"codeLines":52,"commentLines":6,"blankLines":14,"size":1655},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\user.js","relativePath":"web/js/user.js","directory":"web/js","fileName":"user.js","language":"JavaScript","lines":491,"codeLines":413,"commentLines":22,"blankLines":56,"size":15187},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\manager.js","relativePath":"web/js/manager.js","directory":"web/js","fileName":"manager.js","language":"JavaScript","lines":768,"codeLines":667,"commentLines":26,"blankLines":75,"size":25041},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\css\\style.css","relativePath":"web/css/style.css","directory":"web/css","fileName":"style.css","language":"CSS","lines":675,"codeLines":551,"commentLines":19,"blankLines":105,"size":11308},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\main.js","relativePath":"web/js/main.js","directory":"web/js","fileName":"main.js","language":"JavaScript","lines":350,"codeLines":270,"commentLines":28,"blankLines":52,"size":9386},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\admin.js","relativePath":"web/js/admin.js","directory":"web/js","fileName":"admin.js","language":"JavaScript","lines":435,"codeLines":356,"commentLines":22,"blankLines":57,"size":12457},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\image_handler.go","relativePath":"internal/utils/image_handler.go","directory":"internal/utils","fileName":"image_handler.go","language":"Go","lines":187,"codeLines":131,"commentLines":27,"blankLines":29,"size":4600},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\pdf_export.go","relativePath":"internal/utils/pdf_export.go","directory":"internal/utils","fileName":"pdf_export.go","language":"Go","lines":105,"codeLines":78,"commentLines":12,"blankLines":15,"size":2410},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\validator.go","relativePath":"internal/utils/validator.go","directory":"internal/utils","fileName":"validator.go","language":"Go","lines":84,"codeLines":57,"commentLines":12,"blankLines":15,"size":2095},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\similarity.go","relativePath":"internal/utils/similarity.go","directory":"internal/utils","fileName":"similarity.go","language":"Go","lines":159,"codeLines":115,"commentLines":18,"blankLines":26,"size":3592},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\response.go","relativePath":"internal/utils/response.go","directory":"internal/utils","fileName":"response.go","language":"Go","lines":67,"codeLines":53,"commentLines":6,"blankLines":8,"size":1841},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\matching.go","relativePath":"internal/utils/matching.go","directory":"internal/utils","fileName":"matching.go","language":"Go","lines":102,"codeLines":79,"commentLines":8,"blankLines":15,"size":2429},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\archive_repo.go","relativePath":"internal/repositories/archive_repo.go","directory":"internal/repositories","fileName":"archive_repo.go","language":"Go","lines":91,"codeLines":67,"commentLines":9,"blankLines":15,"size":2537},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\notification_service.go","relativePath":"internal/services/notification_service.go","directory":"internal/services","fileName":"notification_service.go","language":"Go","lines":115,"codeLines":79,"commentLines":14,"blankLines":22,"size":3873},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\match_service.go","relativePath":"internal/services/match_service.go","directory":"internal/services","fileName":"match_service.go","language":"Go","lines":239,"codeLines":185,"commentLines":23,"blankLines":31,"size":6999},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\audit_log_repo.go","relativePath":"internal/repositories/audit_log_repo.go","directory":"internal/repositories","fileName":"audit_log_repo.go","language":"Go","lines":104,"codeLines":74,"commentLines":11,"blankLines":19,"size":2856},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\lost_item_service.go","relativePath":"internal/services/lost_item_service.go","directory":"internal/services","fileName":"lost_item_service.go","language":"Go","lines":207,"codeLines":151,"commentLines":21,"blankLines":35,"size":6408},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\match_result_repo.go","relativePath":"internal/repositories/match_result_repo.go","directory":"internal/repositories","fileName":"match_result_repo.go","language":"Go","lines":124,"codeLines":92,"commentLines":13,"blankLines":19,"size":3768},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\lost_item_repo.go","relativePath":"internal/repositories/lost_item_repo.go","directory":"internal/repositories","fileName":"lost_item_repo.go","language":"Go","lines":127,"codeLines":89,"commentLines":15,"blankLines":23,"size":3714},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\notification_repo.go","relativePath":"internal/repositories/notification_repo.go","directory":"internal/repositories","fileName":"notification_repo.go","language":"Go","lines":103,"codeLines":73,"commentLines":12,"blankLines":18,"size":3064},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\item_repo.go","relativePath":"internal/repositories/item_repo.go","directory":"internal/repositories","fileName":"item_repo.go","language":"Go","lines":158,"codeLines":111,"commentLines":18,"blankLines":29,"size":4412},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_verification_repo.go","relativePath":"internal/repositories/claim_verification_repo.go","directory":"internal/repositories","fileName":"claim_verification_repo.go","language":"Go","lines":66,"codeLines":50,"commentLines":6,"blankLines":10,"size":2144},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_repo.go","relativePath":"internal/repositories/claim_repo.go","directory":"internal/repositories","fileName":"claim_repo.go","language":"Go","lines":145,"codeLines":107,"commentLines":15,"blankLines":23,"size":3957},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\category_repo.go","relativePath":"internal/repositories/category_repo.go","directory":"internal/repositories","fileName":"category_repo.go","language":"Go","lines":101,"codeLines":76,"commentLines":8,"blankLines":17,"size":2731},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\item_service.go","relativePath":"internal/services/item_service.go","directory":"internal/services","fileName":"item_service.go","language":"Go","lines":211,"codeLines":156,"commentLines":20,"blankLines":35,"size":7010},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\export_service.go","relativePath":"internal/services/export_service.go","directory":"internal/services","fileName":"export_service.go","language":"Go","lines":254,"codeLines":198,"commentLines":21,"blankLines":35,"size":7335},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\claim_service.go","relativePath":"internal/services/claim_service.go","directory":"internal/services","fileName":"claim_service.go","language":"Go","lines":268,"codeLines":188,"commentLines":32,"blankLines":48,"size":8230},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\category_service.go","relativePath":"internal/services/category_service.go","directory":"internal/services","fileName":"category_service.go","language":"Go","lines":147,"codeLines":104,"commentLines":17,"blankLines":26,"size":4313},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\auth_service.go","relativePath":"internal/services/auth_service.go","directory":"internal/services","fileName":"auth_service.go","language":"Go","lines":172,"codeLines":121,"commentLines":23,"blankLines":28,"size":4586},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\routes\\routes.go","relativePath":"internal/routes/routes.go","directory":"internal/routes","fileName":"routes.go","language":"Go","lines":128,"codeLines":89,"commentLines":21,"blankLines":18,"size":5324},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\audit_service.go","relativePath":"internal/services/audit_service.go","directory":"internal/services","fileName":"audit_service.go","language":"Go","lines":68,"codeLines":50,"commentLines":4,"blankLines":14,"size":2038},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\archive_service.go","relativePath":"internal/services/archive_service.go","directory":"internal/services","fileName":"archive_service.go","language":"Go","lines":67,"codeLines":48,"commentLines":5,"blankLines":14,"size":1859},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\revision_log_repo.go","relativePath":"internal/repositories/revision_log_repo.go","directory":"internal/repositories","fileName":"revision_log_repo.go","language":"Go","lines":92,"codeLines":64,"commentLines":10,"blankLines":18,"size":2479},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\item.go","relativePath":"internal/models/item.go","directory":"internal/models","fileName":"item.go","language":"Go","lines":152,"codeLines":119,"commentLines":15,"blankLines":18,"size":5266},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\lost_item.go","relativePath":"internal/models/lost_item.go","directory":"internal/models","fileName":"lost_item.go","language":"Go","lines":93,"codeLines":73,"commentLines":8,"blankLines":12,"size":2867},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\match_result.go","relativePath":"internal/models/match_result.go","directory":"internal/models","fileName":"match_result.go","language":"Go","lines":128,"codeLines":104,"commentLines":10,"blankLines":14,"size":4330},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim_verification.go","relativePath":"internal/models/claim_verification.go","directory":"internal/models","fileName":"claim_verification.go","language":"Go","lines":77,"codeLines":59,"commentLines":8,"blankLines":10,"size":2898},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim.go","relativePath":"internal/models/claim.go","directory":"internal/models","fileName":"claim.go","language":"Go","lines":164,"codeLines":128,"commentLines":14,"blankLines":22,"size":5082},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\category.go","relativePath":"internal/models/category.go","directory":"internal/models","fileName":"category.go","language":"Go","lines":48,"codeLines":36,"commentLines":5,"blankLines":7,"size":1500},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\verification_service.go","relativePath":"internal/services/verification_service.go","directory":"internal/services","fileName":"verification_service.go","language":"Go","lines":153,"codeLines":122,"commentLines":10,"blankLines":21,"size":4950},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\audit_log.go","relativePath":"internal/models/audit_log.go","directory":"internal/models","fileName":"audit_log.go","language":"Go","lines":98,"codeLines":80,"commentLines":7,"blankLines":11,"size":2895},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\archive.go","relativePath":"internal/models/archive.go","directory":"internal/models","fileName":"archive.go","language":"Go","lines":110,"codeLines":92,"commentLines":7,"blankLines":11,"size":3881},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\user_service.go","relativePath":"internal/services/user_service.go","directory":"internal/services","fileName":"user_service.go","language":"Go","lines":190,"codeLines":128,"commentLines":26,"blankLines":36,"size":5388},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\user_repo.go","relativePath":"internal/repositories/user_repo.go","directory":"internal/repositories","fileName":"user_repo.go","language":"Go","lines":152,"codeLines":108,"commentLines":19,"blankLines":25,"size":4242},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\role_repo.go","relativePath":"internal/repositories/role_repo.go","directory":"internal/repositories","fileName":"role_repo.go","language":"Go","lines":64,"codeLines":48,"commentLines":6,"blankLines":10,"size":1470},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\user.go","relativePath":"internal/models/user.go","directory":"internal/models","fileName":"user.go","language":"Go","lines":104,"codeLines":75,"commentLines":13,"blankLines":16,"size":2986},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\role.go","relativePath":"internal/models/role.go","directory":"internal/models","fileName":"role.go","language":"Go","lines":52,"codeLines":38,"commentLines":6,"blankLines":8,"size":1296},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\revision_log.go","relativePath":"internal/models/revision_log.go","directory":"internal/models","fileName":"revision_log.go","language":"Go","lines":72,"codeLines":58,"commentLines":5,"blankLines":9,"size":2294},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\notification.go","relativePath":"internal/models/notification.go","directory":"internal/models","fileName":"notification.go","language":"Go","lines":127,"codeLines":104,"commentLines":10,"blankLines":13,"size":4112},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\admin.html","relativePath":"web/admin.html","directory":"web","fileName":"admin.html","language":"HTML","lines":316,"codeLines":290,"commentLines":8,"blankLines":18,"size":14095},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\config.go","relativePath":"internal/config/config.go","directory":"internal/config","fileName":"config.go","language":"Go","lines":66,"codeLines":50,"commentLines":6,"blankLines":10,"size":1469},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\archive_controller.go","relativePath":"internal/controllers/archive_controller.go","directory":"internal/controllers","fileName":"archive_controller.go","language":"Go","lines":68,"codeLines":50,"commentLines":6,"blankLines":12,"size":2021},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\database.go","relativePath":"internal/config/database.go","directory":"internal/config","fileName":"database.go","language":"Go","lines":145,"codeLines":110,"commentLines":14,"blankLines":21,"size":3424},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\admin_controller.go","relativePath":"internal/controllers/admin_controller.go","directory":"internal/controllers","fileName":"admin_controller.go","language":"Go","lines":98,"codeLines":75,"commentLines":7,"blankLines":16,"size":3139},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\role_middleware.go","relativePath":"internal/middleware/role_middleware.go","directory":"internal/middleware","fileName":"role_middleware.go","language":"Go","lines":56,"codeLines":41,"commentLines":5,"blankLines":10,"size":1302},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\rate_limiter.go","relativePath":"internal/middleware/rate_limiter.go","directory":"internal/middleware","fileName":"rate_limiter.go","language":"Go","lines":112,"codeLines":81,"commentLines":11,"blankLines":20,"size":2358},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\logger.go","relativePath":"internal/middleware/logger.go","directory":"internal/middleware","fileName":"logger.go","language":"Go","lines":45,"codeLines":30,"commentLines":7,"blankLines":8,"size":865},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\jwt_middleware.go","relativePath":"internal/middleware/jwt_middleware.go","directory":"internal/middleware","fileName":"jwt_middleware.go","language":"Go","lines":105,"codeLines":81,"commentLines":8,"blankLines":16,"size":2507},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\jwt.go","relativePath":"internal/config/jwt.go","directory":"internal/config","fileName":"jwt.go","language":"Go","lines":131,"codeLines":92,"commentLines":17,"blankLines":22,"size":3167},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\cors.go","relativePath":"internal/middleware/cors.go","directory":"internal/middleware","fileName":"cors.go","language":"Go","lines":22,"codeLines":17,"commentLines":1,"blankLines":4,"size":702},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\auth_controller.go","relativePath":"internal/controllers/auth_controller.go","directory":"internal/controllers","fileName":"auth_controller.go","language":"Go","lines":102,"codeLines":71,"commentLines":13,"blankLines":18,"size":2712},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\report_controller.go","relativePath":"internal/controllers/report_controller.go","directory":"internal/controllers","fileName":"report_controller.go","language":"Go","lines":109,"codeLines":89,"commentLines":5,"blankLines":15,"size":2911},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\match_controller.go","relativePath":"internal/controllers/match_controller.go","directory":"internal/controllers","fileName":"match_controller.go","language":"Go","lines":86,"codeLines":63,"commentLines":8,"blankLines":15,"size":2532},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\lost_item_controller.go","relativePath":"internal/controllers/lost_item_controller.go","directory":"internal/controllers","fileName":"lost_item_controller.go","language":"Go","lines":193,"codeLines":141,"commentLines":15,"blankLines":37,"size":6229},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\item_controller.go","relativePath":"internal/controllers/item_controller.go","directory":"internal/controllers","fileName":"item_controller.go","language":"Go","lines":222,"codeLines":161,"commentLines":18,"blankLines":43,"size":6891},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\claim_controller.go","relativePath":"internal/controllers/claim_controller.go","directory":"internal/controllers","fileName":"claim_controller.go","language":"Go","lines":247,"codeLines":184,"commentLines":20,"blankLines":43,"size":7320},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\user_controller.go","relativePath":"internal/controllers/user_controller.go","directory":"internal/controllers","fileName":"user_controller.go","language":"Go","lines":237,"codeLines":169,"commentLines":20,"blankLines":48,"size":7199},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\category_controller.go","relativePath":"internal/controllers/category_controller.go","directory":"internal/controllers","fileName":"category_controller.go","language":"Go","lines":129,"codeLines":94,"commentLines":10,"blankLines":25,"size":3999},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.sum","relativePath":"go.sum","directory":"","fileName":"go.sum","language":"Unknown","lines":132,"codeLines":131,"commentLines":0,"blankLines":1,"size":11488},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.mod","relativePath":"go.mod","directory":"","fileName":"go.mod","language":"Unknown","lines":58,"codeLines":54,"commentLines":0,"blankLines":4,"size":2272},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\seed.sql","relativePath":"database/seed.sql","directory":"database","fileName":"seed.sql","language":"SQL","lines":202,"codeLines":95,"commentLines":75,"blankLines":32,"size":13363},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\schema.sql","relativePath":"database/schema.sql","directory":"database","fileName":"schema.sql","language":"SQL","lines":300,"codeLines":242,"commentLines":43,"blankLines":15,"size":13447},{"path":"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\cmd\\server\\main.go","relativePath":"cmd/server/main.go","directory":"cmd/server","fileName":"main.go","language":"Go","lines":121,"codeLines":83,"commentLines":17,"blankLines":21,"size":3034}]]'!==embeddedJsonFiles){debug.info("📥 Parsing standalone HTML embedded JSON files...");const e=JSON.parse(embeddedJsonFiles);debug.info("✅ Standalone JSON parsed successfully");const n={totalFiles:e.length||0,totalLines:e.reduce((e,n)=>e+safeToLocaleNumber(n.lines),0),totalChars:e.reduce((e,n)=>e+safeToLocaleNumber(n.characters),0),totalBytes:e.reduce((e,n)=>e+safeToLocaleNumber(n.bytes),0)},a={};return e.forEach(e=>{const n=e.language||"Unknown";a[n]||(a[n]={name:n,files:0,lines:0,characters:0,bytes:0}),a[n].files++,a[n].lines+=safeToLocaleNumber(e.lines),a[n].characters+=safeToLocaleNumber(e.characters),a[n].bytes+=safeToLocaleNumber(e.bytes)}),reportData={summary:n,languages:Object.values(a),files:e},debug.info("📊 Report data structure:",{hasSummary:!!reportData.summary,hasLanguages:!!reportData.languages,hasFiles:!!reportData.files,fileCount:reportData.files?reportData.files.length:0}),reportData}return debug.warning("⚠️ No embedded JSON data found or template not replaced"),debug.warning("📝 Checked embeddedJsonData:","undefined"!=typeof embeddedJsonData?embeddedJsonData?.substring(0,50):"undefined"),debug.warning("📝 Checked embeddedJsonFiles:","undefined"!=typeof embeddedJsonFiles?embeddedJsonFiles?.substring(0,50):"undefined"),null}catch(e){return debug.error("❌ Error parsing JSON data:",e),debug.error("📝 embeddedJsonData length:","undefined"!=typeof embeddedJsonData?embeddedJsonData?embeddedJsonData.length:0:"undefined"),debug.error("📝 embeddedJsonFiles length:","undefined"!=typeof embeddedJsonFiles?embeddedJsonFiles?embeddedJsonFiles.length:0:"undefined"),null}}function initializeReport(e){debug.info("🎯 Initializing report with data");try{populateReportFromData(e),debug.info("✅ Report initialization completed")}catch(e){debug.error("❌ Error initializing report:",e),showError("Failed to initialize report: "+e.message)}}function populateReportFromData(e){debug.info("📊 Populating report sections...");const n=document.getElementById("summary-stats");n&&(n.innerHTML=createSummaryHTML(e.summary),debug.info("✅ Summary populated"));const a=document.getElementById("language-stats");a&&(a.innerHTML=createLanguageStatsHTML(e.languages),debug.info("✅ Languages populated")),initializeAdvancedTable(e.files),debug.info("✅ Advanced table initialized"),setupAdvancedFiltering(e.files),debug.info("✅ Advanced filtering setup"),debug.info("🎉 Report population completed")}function createSummaryHTML(e){const n={totalFiles:e.totalFiles||0,totalLines:e.totalLines||0,totalCodeLines:e.totalCodeLines||0,totalCommentLines:e.totalCommentLines||0,totalBlankLines:e.totalBlankLines||0,languageCount:e.languageCount||0};function a(e){try{return Number(e).toLocaleString()}catch(n){return String(e)}}return`\n <div class="stat-card">\n <div class="stat-value">${a(n.totalFiles)}</div>\n <div class="stat-label">📄 Total Files</div>\n </div>\n <div class="stat-card">\n <div class="stat-value">${a(n.totalLines)}</div>\n <div class="stat-label">📊 Total Lines</div>\n </div>\n <div class="stat-card">\n <div class="stat-value">${a(n.totalCodeLines)}</div>\n <div class="stat-label">💼 Code Lines</div>\n </div>\n <div class="stat-card">\n <div class="stat-value">${a(n.totalCommentLines)}</div>\n <div class="stat-label">💬 Comment Lines</div>\n </div>\n <div class="stat-card">\n <div class="stat-value">${a(n.totalBlankLines)}</div>\n <div class="stat-label">📝 Blank Lines</div>\n </div>\n <div class="stat-card">\n <div class="stat-value">${a(n.languageCount)}</div>\n <div class="stat-label">💻 Languages</div>\n </div>\n `}function populateSummaryStats(e){debug.info("📊 Populating summary statistics..."),debug.info("📊 Summary data received:",e);try{const n=document.getElementById("summary-stats");if(n){const a=createSummaryHTML(e);debug.info("📊 Generated HTML content length:",a.length),n.innerHTML=a,debug.info("✅ Summary statistics populated successfully")}else debug.warning("⚠️ Summary stats container not found")}catch(e){throw debug.error("❌ Error in populateSummaryStats:",e),new Error(`Failed to populate summary stats: ${e.message}`)}}function createLanguageStatsHTML(e){return e.sort((e,n)=>(Number(n.lines)||0)-(Number(e.lines)||0)).map(e=>`\n <div class="language-item">\n <span class="language-name">${e.name||"Unknown"}</span>\n <div>\n <span class="language-files">${Number(e.files)||0} files</span>\n <span style="margin-left: 10px; font-weight: 500;">${function(e){try{return Number(e).toLocaleString()}catch(n){return String(e)}}(e.lines)} lines</span>\n </div>\n </div>\n `).join("")}function populateLanguagesBreakdown(e){debug.info("🖥️ Populating language breakdown..."),debug.info("🖥️ Languages data received:",e);try{const n=document.getElementById("language-stats");if(n){const a=createLanguageStatsHTML(e);debug.info("🖥️ Generated language HTML content length:",a.length),n.innerHTML=a,debug.info("✅ Language breakdown populated successfully")}else debug.warning("⚠️ Language stats container not found")}catch(e){throw debug.error("❌ Error in populateLanguagesBreakdown:",e),new Error(`Failed to populate language breakdown: ${e.message}`)}}function updateReportData(e){debug.info("🔄 Updating report data..."),e?(reportData=e,initializeReport(reportData),debug.info("✅ Report data updated successfully")):debug.error("❌ No data in update request")}function getReportData(){return reportData}function showError(e){const n=document.getElementById("error-message"),a=document.getElementById("error-text");n&&a&&(a.textContent=e,n.classList.remove("hidden"))}function populateReportFromData(e){if(debug.info("📊 Populating report sections..."),!e||!e.files)throw new Error("Invalid data structure - no files found");e.summary&&populateSummaryStats(e.summary),e.languages&&populateLanguagesBreakdown(e.languages),"function"==typeof initializeAdvancedTable?(debug.info("🚀 Initializing Tabulator table using webview modules"),initializeAdvancedTable(e.files)):populateFilesTable(e.files),"function"==typeof setupUIHandlers&&setupUIHandlers(),debug.info("✅ Report sections populated successfully")}function createTableColumns_Standalone(){return[{title:"📁 Directory",field:"directory",minWidth:150,width:150,sorter:"string",frozen:!0,formatter:function(e,n){const a=e.getValue(),t=""===a||"."===a?"(root)":a;return`<span title="${a||"(root)"}" class="directory-link">${"(root)"===t?".":t}</span>`}},{title:"📄 File",field:"fileName",minWidth:150,width:150,sorter:"string",headerFilter:!0,frozen:!0,formatter:function(e,n){const a=e.getValue(),t=e.getRow().getData().relativePath;return`<span title="File: ${e.getRow().getData().path||t}" class="file-name-standalone">${a}</span>`}},{title:"🖥️ Language",field:"language",minWidth:75,width:150,sorter:"string"},{title:"📈 Lines",field:"lines",minWidth:75,width:100,sorter:"number",hozAlign:"right",formatter:"money",formatterParams:{precision:0,symbol:"",symbolAfter:!1},headerFilter:function(e,n,a,t){if(null==e||""===e)return!0;const o=parseInt(e),r=parseInt(n);return!isNaN(o)&&!isNaN(r)&&r>=o},headerFilterPlaceholder:"Min lines..."},{title:"📸 Code",field:"codeLines",minWidth:75,width:100,sorter:"number",hozAlign:"right",formatter:"money",formatterParams:{precision:0,symbol:"",symbolAfter:!1}},{title:"💬 Comments",field:"commentLines",minWidth:75,width:100,sorter:"number",hozAlign:"right",formatter:"money",formatterParams:{precision:0,symbol:"",symbolAfter:!1}},{title:"😶 Blanks",field:"blankLines",minWidth:75,width:100,sorter:"number",hozAlign:"right",formatter:"money",formatterParams:{precision:0,symbol:"",symbolAfter:!1}},{title:"💬%",field:"commentRatio",minWidth:75,width:80,sorter:"number",hozAlign:"right",formatter:function(e){const n=parseFloat(e.getValue());return`<span class="comment-ratio-colored" style="color: ${n>20?"#28a745":n>10?"#ffc107":"#6c757d"};">${n}%</span>`}},{title:"📦 Size",field:"sizeKB",minWidth:75,width:100,sorter:"number",hozAlign:"right",formatter:function(e){return formatSizeKB(e.getValue())}}]}const createTableColumns=createTableColumns_Standalone;function updateGroupHeaderWidths_Standalone(){if(!window.filesTable)return void debug.error("STANDALONE: ❌ No filesTable found");const e=window.filesTable.getColumns();document.querySelectorAll(".native-group-header").forEach(n=>{e.forEach((e,a)=>{const t=e.getField(),o=e.getWidth(),r=n.querySelector(`[data-field="${t}"]`);r&&(r.style.width=`${o}px`,r.style.minWidth=`${o}px`,r.style.flex=`0 0 ${o}px`)})})}const updateGroupHeaderWidths=updateGroupHeaderWidths_Standalone;function updateFixedGroupHeaderPositions_Standalone(e,n){debug.info(`🚨 updateFixedGroupHeaderPositions_Standalone CALLED: scrollLeft=${e}, scrollTop=${n}`),debug.info("🚫 STANDALONE: Overlay creation disabled to prevent table blocking");const a=document.querySelector(".frozen-group-overlay");a&&(debug.info("🗑️ STANDALONE: Removing interfering webview overlay"),a.remove()),debug.info("✅ STANDALONE: Overlay creation skipped, table remains unblocked")}function initializeAdvancedTable_Standalone(e){debug.info("🚀 Initializing Tabulator table for STANDALONE..."),debug.info("📊 Files data received:",{fileCount:e?e.length:0,firstFile:e&&e.length>0?e[0]:null,dataType:typeof e,isArray:Array.isArray(e)});const n=e.map(e=>({...e,relativePath:e.relativePath.replace(/\\/g,"/"),fileName:(()=>{const n=e.relativePath.replace(/\\/g,"/"),a=n.lastIndexOf("/");return a>=0?n.substring(a+1):n})(),directory:(()=>{const n=e.relativePath.replace(/\\/g,"/"),a=n.lastIndexOf("/");return a>=0?n.substring(0,a):""})(),commentRatio:e.lines>0?(e.commentLines/e.lines*100).toFixed(1):0,codeRatio:e.lines>0?(e.codeLines/e.lines*100).toFixed(1):0,sizeKB:e.size/1024})).sort((e,n)=>{const a=e.directory.localeCompare(n.directory);return 0!==a?a:e.fileName.localeCompare(n.fileName)});if(window.filesTable=new Tabulator("#files-table-tabulator",{data:n,layout:"fitColumns",height:"600px",pagination:!1,paginationCounter:"rows",movableColumns:!0,resizableRows:!1,groupBy:"directory",groupStartOpen:!0,stickyHeaders:!0,groupHeader:function(e,n,a,t){debug.verbose(`📊 Creating native group header for STANDALONE: ${e} (${n} files)`);const o=calculateGroupStats(t,n),r=window.filesTable?window.filesTable.getColumns():[];console.log("🔍 [STANDALONE groupHeader] Current column order:",r.map(e=>`${e.getField()}(${e.getWidth()}px)`));let i="";if(0===r.length)return`\n <div class="native-group-header" data-directory="${e||""}" data-count="${n}" data-stats='${JSON.stringify(o)}'>\n <div class="group-directory-combined tabulator-cell group-cell-frozen" data-field="directory-fileName" data-colspan="2">\n <div class="combined-cell-content">\n <div class="directory-section">📁 ${e||"(root)"}</div>\n <div class="files-section">\n <div>📄 ${n} files</div>\n <div class="stat-label-secondary">${o.languageCount} languages</div>\n </div>\n </div>\n </div>\n <div class="group-stats tabulator-cell group-cell-normal" data-field="language">📊 Stats</div>\n <div class="group-stats tabulator-cell" data-field="lines">Lines</div>\n <div class="group-stats tabulator-cell" data-field="codeLines">Code</div>\n <div class="group-stats tabulator-cell" data-field="commentLines">Comments</div>\n <div class="group-stats tabulator-cell" data-field="blankLines">Blanks</div>\n <div class="group-stats tabulator-cell" data-field="commentRatio">%</div>\n <div class="group-stats tabulator-cell" data-field="sizeKB">Size</div>\n </div>\n `;let s=!1;return r.forEach((a,t)=>{const l=a.getField(),d=a.getWidth();let c="",m=["tabulator-cell"];if(0===t){const n=r[0],a=r[1];if(n&&a){const t=n.getWidth()+a.getWidth();m.push("group-cell-frozen","group-directory-combined"),c=`<div class="combined-cell-content">\n <div class="directory-section">📁 ${e||"(root)"}</div>\n </div>`,i+=`<div class="${m.join(" ")}" \n data-field="directory-fileName" \n data-colspan="2"\n style="width: ${t}px; min-width: ${t}px; flex: 0 0 ${t}px;">\n ${c}\n </div>`}return void(s=!0)}if(1!==t){switch(m.push("group-cell-normal"),l){case"language":c=`<div class="stat-value-primary">📄 ${n} files</div>\n <div class="stat-label-secondary">🖥️ ${o.languageCount} languages</div>`,m.push("group-stats");break;case"lines":c=`<div class="stat-label-secondary">📈 total</div>\n <div class="stat-value-primary">${(o.totalLines||0).toLocaleString()}</div>\n <div class="stat-label-secondary">Avg: ${n>0?((o.totalLines||0)/n).toFixed(1):"0"}</div>`,m.push("group-stats");break;case"codeLines":c=`<div class="stat-label-secondary">📸 code</div>\n <div class="stat-value-primary">${(o.codeLines||0).toLocaleString()}</div>\n <div class="stat-label-secondary">Avg: ${n>0?((o.codeLines||0)/n).toFixed(1):"0"}</div>`,m.push("group-stats");break;case"commentLines":c=`<div class="stat-label-secondary">💬 comments</div>\n <div class="stat-value-primary">${(o.commentLines||0).toLocaleString()}</div>\n <div class="stat-label-secondary">Avg: ${n>0?((o.commentLines||0)/n).toFixed(1):"0"}</div>`,m.push("group-stats");break;case"blankLines":c=`<div class="stat-label-secondary">😶 blanks</div>\n <div class="stat-value-primary">${(o.blankLines||0).toLocaleString()}</div>\n <div class="stat-label-secondary">Avg: ${n>0?((o.blankLines||0)/n).toFixed(1):"0"}</div>`,m.push("group-stats");break;case"commentRatio":c=`<div class="stat-label-secondary">💬%</div>\n <div class="stat-value-primary">${o.avgCommentRatio||0}%</div>`,m.push("group-stats");break;case"sizeKB":c=`<div class="stat-label-secondary">📦 size</div>\n <div class="stat-value-primary">${formatSizeKB((o.size||0)/1024)}</div>\n <div class="stat-label-secondary">Avg: ${n>0?formatSizeKB((o.size||0)/1024/n):"0 KB"}</div>`,m.push("group-stats");break;case"directory":c=`<div class="stat-label-secondary">📁 directory</div>\n <div class="stat-value-primary">${e||"(root)"}</div>`,m.push("group-stats");break;case"fileName":c=`<div class="stat-label-secondary">📄 files</div>\n <div class="stat-value-primary">${n}</div>`,m.push("group-stats");break;default:c=`<div class="stat-label-secondary">${l}</div>\n <div class="stat-value-primary">-</div>`,m.push("group-stats")}i+=`<div class="${m.join(" ")}" \n data-field="${l}" \n style="width: ${d}px; min-width: ${d}px; flex: 0 0 ${d}px;">\n ${c}\n </div>`}}),`\n <div class="native-group-header" \n data-directory="${e||""}" \n data-count="${n}" \n data-stats='${JSON.stringify(o)}'>\n ${i}\n </div>\n `},columns:createTableColumns(),initialSort:[{column:"lines",dir:"desc"}]}),debug.info("✅ Using native Tabulator group headers with built-in frozen column support for STANDALONE"),window.filesTable.on("tableBuilt",function(){setTimeout(()=>{updateGroupHeaderWidths(),debug.info("🚫 STANDALONE: Skipping overlay setup to keep table unblocked");const e=document.querySelector(".frozen-group-overlay");e&&(debug.info("🗑️ STANDALONE: Removing interfering webview overlay on tableBuilt"),e.remove())},50)}),window.filesTable.on("columnResized",function(e){debug.verbose(`📏 STANDALONE Column resized: ${e.getField()} to ${e.getWidth()}px`),updateGroupHeaderWidths(),debug.info("🚫 STANDALONE: Skipping overlay update on column resize")}),window.filesTable.on("columnMoved",function(e,n){debug.info(`🔄 [STANDALONE] Column moved: ${e.getField()}`),debug.info("🔄 [STANDALONE] New column order:",n.map(e=>e.getField())),updateGroupHeaderStructure(),updateGroupHeaderWidths(),debug.info("🚫 STANDALONE: Skipping overlay update on column move")}),window.filesTable.on("groupToggled",function(e){debug.verbose(`🔽 STANDALONE Group toggled: ${e.getKey()}`),debug.info("🚫 STANDALONE: Skipping overlay update on group toggle")}),window.filesTable.on("dataSorted",function(e,n){debug.verbose(`🔄 STANDALONE Data sorted by: ${e.map(e=>e.field+" "+e.dir).join(", ")}`),debug.info("🚫 STANDALONE: Skipping overlay update on data sort")}),window.ResizeObserver){const e=new ResizeObserver(()=>{updateGroupHeaderWidths()}),n=document.querySelector("#files-table-tabulator");n&&e.observe(n)}return debug.info("✅ STANDALONE Tabulator table initialized successfully"),debug.info("📊 STANDALONE Final table data count:",window.filesTable.getData().length),debug.info("📊 STANDALONE Processed files count:",n.length),window.filesTable}window.initializeAdvancedTable_Standalone=initializeAdvancedTable_Standalone,function(){"use strict";let uiHandlersInitialized=!1,dropdownsInitialized=!1;function generateCSVFromTable_Standalone(){if(console.log("STANDALONE: Generating CSV from table..."),!window.filesTable)throw new Error("No table data available");const e=window.filesTable.getData();if(0===e.length)throw new Error("No data available for export");const n=(new Date).toISOString();let a="Generated At,Directory,File,Language,Lines,Code Lines,Comment Lines,Blank Lines,Size\n";return e.forEach(e=>{const t=[n,e.directory||"",e.fileName||"",e.language||"",e.lines||0,e.codeLines||0,e.commentLines||0,e.blankLines||0,e.size||0].map(e=>`"${String(e).replace(/"/g,'""')}"`).join(",");a+=t+"\n"}),a}function downloadCSV_Standalone(){try{const e=generateCSVFromTable_Standalone(),n=new Blob([e],{type:"text/csv;charset=utf-8;"}),a=document.createElement("a");if(void 0!==a.download){const e=URL.createObjectURL(n);a.setAttribute("href",e),a.setAttribute("download",`code-counter-report-${(new Date).toISOString().slice(0,10)}.csv`),a.style.visibility="hidden",document.body.appendChild(a),a.click(),document.body.removeChild(a),console.log("STANDALONE: ✅ CSV download completed")}}catch(e){console.error("STANDALONE: ❌ CSV download failed:",e),alert("Failed to download CSV: "+e.message)}}function generateJSONFromTable_Standalone(){if(console.log("STANDALONE: Generating JSON from table..."),!window.filesTable)throw new Error("No table data available");const e=window.filesTable.getData();if(0===e.length)throw new Error("No data available for export");const n={metadata:{generated:(new Date).toISOString(),generator:"VS Code Code Counter Extension",version:"1.0.0",totalFiles:e.length},summary:{totalLines:e.reduce((e,n)=>e+(parseInt(n.lines)||0),0),totalCodeLines:e.reduce((e,n)=>e+(parseInt(n.codeLines)||0),0),totalCommentLines:e.reduce((e,n)=>e+(parseInt(n.commentLines)||0),0),totalBlankLines:e.reduce((e,n)=>e+(parseInt(n.blankLines)||0),0),totalSize:e.reduce((e,n)=>e+(parseInt(n.size)||0),0)},files:e.map(e=>({directory:e.directory||"",fileName:e.fileName||"",language:e.language||"",lines:parseInt(e.lines)||0,codeLines:parseInt(e.codeLines)||0,commentLines:parseInt(e.commentLines)||0,blankLines:parseInt(e.blankLines)||0,size:parseInt(e.size)||0}))};return JSON.stringify(n,null,2)}function downloadJSON_Standalone(){try{const e=generateJSONFromTable_Standalone(),n=new Blob([e],{type:"application/json;charset=utf-8;"}),a=document.createElement("a");if(void 0!==a.download){const e=URL.createObjectURL(n);a.setAttribute("href",e),a.setAttribute("download",`code-counter-report-${(new Date).toISOString().slice(0,10)}.json`),a.style.visibility="hidden",document.body.appendChild(a),a.click(),document.body.removeChild(a),console.log("STANDALONE: ✅ JSON download completed")}}catch(e){console.error("STANDALONE: ❌ JSON download failed:",e),alert("Failed to download JSON: "+e.message)}}function loadXMLExportModule(){return new Promise(function(resolve,reject){if(window.XMLExport)return console.log("STANDALONE: XML Export module already loaded"),void resolve(window.XMLExport);if(console.log("STANDALONE: Loading XML Export module..."),window.xmlExportModuleCode)try{var moduleScript=window.xmlExportModuleCode;console.log("STANDALONE: Executing XML module code..."),eval(moduleScript),window.XMLExport?(console.log("STANDALONE: XML Export module loaded and initialized successfully"),resolve(window.XMLExport)):reject(new Error("XML Export module failed to initialize properly"))}catch(e){console.error("STANDALONE: Error executing XML module:",e),reject(new Error("Failed to execute XML Export module: "+e.message))}else reject(new Error("XML Export module code not found"))})}function handleXMLExport(){console.log("STANDALONE: XML export requested"),loadXMLExportModule().then(function(e){console.log("STANDALONE: XML module loaded, starting download..."),e.download()}).catch(function(e){console.error("STANDALONE: XML export failed:",e),alert("Failed to load XML export functionality: "+e.message)})}function handleExport_Standalone(e){console.log("STANDALONE: Handling export for format: "+e);try{switch(e){case"csv":downloadCSV_Standalone();break;case"json":downloadJSON_Standalone();break;case"xml":handleXMLExport();break;default:throw new Error("Unknown export format: "+e)}}catch(e){console.error("STANDALONE: Export failed:",e),alert("Export failed: "+e.message)}}function setupExportDropdowns_Standalone(){if(console.log("STANDALONE: setupExportDropdowns_Standalone called!"),dropdownsInitialized)console.log("STANDALONE: Export dropdowns already initialized, skipping...");else try{const e=document.querySelectorAll(".export-dropdown-btn");console.log("STANDALONE: Found dropdown buttons:",e.length),e.forEach((e,n)=>{console.log(`STANDALONE: Setting up dropdown button ${n}: ${e.id}`),e.addEventListener("click",function(n){n.preventDefault(),console.log(`STANDALONE: Dropdown button clicked: ${e.id}`);const a=e.parentElement.querySelector(".export-dropdown-content");if(a){const e="block"===a.style.display;a.style.display=e?"none":"block",console.log("STANDALONE: Dropdown "+(e?"hidden":"shown")),document.querySelectorAll(".export-dropdown-content").forEach(e=>{e!==a&&(e.style.display="none")})}})});const n=document.querySelectorAll("[data-export]");console.log("STANDALONE: Found export links:",n.length),n.forEach((e,n)=>{const a=e.getAttribute("data-export");console.log(`STANDALONE: Setting up export link ${n}: ${a}`),e.addEventListener("click",function(n){n.preventDefault(),console.log(`STANDALONE: Export clicked for format: ${a}`);const t=e.closest(".export-dropdown-content");t&&(t.style.display="none"),handleExport_Standalone(a)})}),document.addEventListener("click",function(e){e.target.closest(".export-dropdown")||document.querySelectorAll(".export-dropdown-content").forEach(e=>{e.style.display="none"})}),dropdownsInitialized=!0,console.log("STANDALONE: ✅ Export dropdowns initialized successfully")}catch(e){throw dropdownsInitialized=!1,console.error("STANDALONE: ❌ Failed to initialize export dropdowns:",e),e}}function setupGroupButtons_Standalone(){console.log("STANDALONE: Setting up group buttons...");try{const e=document.getElementById("group-language-btn"),n=document.getElementById("group-directory-btn"),a=document.getElementById("clear-group-btn"),t=[e,n,a].filter(e=>e);console.log(`STANDALONE: Found ${t.length} group buttons`),e&&(console.log("STANDALONE: Setting up group by language button"),e.addEventListener("click",function(n){n.preventDefault(),console.log("STANDALONE: Group by language clicked"),t.forEach(e=>e.classList.remove("active","selected")),e.classList.add("active"),window.filesTable&&"function"==typeof window.filesTable.setGroupBy?(console.log("STANDALONE: Applying group by language"),window.filesTable.setGroupBy("language")):(console.log("STANDALONE: Table grouping not available"),manualGrouping_Standalone("language"))})),n&&(console.log("STANDALONE: Setting up group by directory button"),n.addEventListener("click",function(e){e.preventDefault(),console.log("STANDALONE: Group by directory clicked"),t.forEach(e=>e.classList.remove("active","selected")),n.classList.add("active"),window.filesTable&&"function"==typeof window.filesTable.setGroupBy?(console.log("STANDALONE: Applying group by directory"),window.filesTable.setGroupBy("directory")):(console.log("STANDALONE: Table grouping not available"),manualGrouping_Standalone("directory"))})),a&&(console.log("STANDALONE: Setting up clear grouping button"),a.addEventListener("click",function(e){e.preventDefault(),console.log("STANDALONE: Clear grouping clicked"),t.forEach(e=>e.classList.remove("active","selected")),window.filesTable&&"function"==typeof window.filesTable.setGroupBy?(console.log("STANDALONE: Clearing table grouping"),window.filesTable.setGroupBy(!1)):console.log("STANDALONE: Table grouping clear not available")})),console.log("STANDALONE: ✅ Group buttons setup completed")}catch(e){console.error("STANDALONE: ❌ Failed to setup group buttons:",e)}}function manualGrouping_Standalone(e){if(console.log(`STANDALONE: Attempting manual grouping by: ${e}`),window.filesTable&&"function"==typeof window.filesTable.getData){const n=window.filesTable.getData();console.log(`STANDALONE: Manual grouping data available: ${n.length} rows`),"language"===e||"extension"===e?n.sort((e,n)=>(e.language||"").localeCompare(n.language||"")):"directory"!==e&&"folder"!==e||n.sort((e,n)=>(e.directory||"").localeCompare(n.directory||"")),"function"==typeof window.filesTable.setData&&window.filesTable.setData(n)}}function setupFilterUI_Standalone(){console.log("STANDALONE: Setting up filter UI...");try{const e=document.getElementById("language-filter-tabulator");e&&(console.log("STANDALONE: Setting up language filter dropdown"),e.addEventListener("change",function(e){const n=e.target.value;console.log(`STANDALONE: Language filter changed: "${n}"`),window.filesTable&&"function"==typeof window.filesTable.setFilter&&(n&&"all"!==n&&""!==n?window.filesTable.setFilter("language","=",n):window.filesTable.clearFilter("language"))}));[{min:"lines-min",max:"lines-max",field:"lines"},{min:"size-min",max:"size-max",field:"fileSize"}].forEach(e=>{const n=document.getElementById(e.min),a=document.getElementById(e.max);if(n&&a){console.log(`STANDALONE: Setting up range filter for ${e.field}`);const t=()=>{const t=parseFloat(n.value)||null,o=parseFloat(a.value)||null;console.log(`STANDALONE: Range filter ${e.field}: ${t} - ${o}`),window.filesTable&&"function"==typeof window.filesTable.setFilter&&(window.filesTable.clearFilter(e.field),null!==t&&window.filesTable.addFilter(e.field,">=",t),null!==o&&window.filesTable.addFilter(e.field,"<=",o))};n.addEventListener("input",t),a.addEventListener("input",t)}});const n=document.querySelectorAll('input[type="search"], .search-input[type="text"]');console.log(`STANDALONE: Found ${n.length} additional search inputs`),n.forEach((e,n)=>{e.id&&["lines-min","lines-max","size-min","size-max"].includes(e.id)||(console.log(`STANDALONE: Setting up additional search input ${n}`),e.addEventListener("input",function(e){const n=e.target.value.toLowerCase().trim();console.log(`STANDALONE: Additional search input changed: "${n}"`),window.filesTable&&"function"==typeof window.filesTable.setFilter&&(n?window.filesTable.setFilter([{field:"fileName",type:"like",value:n},{field:"directory",type:"like",value:n},{field:"language",type:"like",value:n}],"or"):window.filesTable.clearFilter())}),e.placeholder||(e.placeholder="Filter files..."))}),console.log("STANDALONE: ✅ Filter UI setup completed")}catch(e){console.error("STANDALONE: ❌ Failed to setup filter UI:",e)}}function setupClearFilters_Standalone(){console.log("STANDALONE: Setting up clear filters...");try{const e=document.getElementById("clear-all-filters-btn");e?(console.log("STANDALONE: Setting up clear all filters button"),e.addEventListener("click",function(e){e.preventDefault(),console.log("STANDALONE: Clear all filters clicked"),window.filesTable&&"function"==typeof window.filesTable.clearFilter&&(window.filesTable.clearFilter(),console.log("STANDALONE: Table filters cleared"));["language-filter-tabulator","lines-min","lines-max","size-min","size-max"].forEach(e=>{const n=document.getElementById(e);n&&(n.value="",console.log(`STANDALONE: Cleared input: ${e}`))}),document.querySelectorAll('input[type="search"], .filter-input, .search-input[type="text"]').forEach(e=>{e.value&&(e.value="",console.log("STANDALONE: Cleared additional search input"))});[document.getElementById("group-language-btn"),document.getElementById("group-directory-btn"),document.getElementById("clear-group-btn")].filter(e=>e).forEach(e=>{e.classList.remove("active","selected")}),window.filesTable&&"function"==typeof window.filesTable.setGroupBy&&(window.filesTable.setGroupBy(!1),console.log("STANDALONE: Table grouping cleared")),console.log("STANDALONE: ✅ All filters and grouping cleared")})):console.log("STANDALONE: Clear all filters button not found"),console.log("STANDALONE: ✅ Clear filters setup completed")}catch(e){console.error("STANDALONE: ❌ Failed to setup clear filters:",e)}}function setupAdditionalControls_Standalone(){console.log("STANDALONE: Setting up additional controls...");try{const e=document.querySelectorAll("[data-column], .column-toggle");console.log(`STANDALONE: Found ${e.length} column toggle controls`),e.forEach((e,n)=>{const a=e.getAttribute("data-column")||e.textContent.toLowerCase().trim();console.log(`STANDALONE: Setting up column toggle ${n}: ${a}`),e.addEventListener("click",function(n){n.preventDefault(),console.log(`STANDALONE: Column toggle clicked: ${a}`),e.classList.toggle("active");const t=e.classList.contains("active");window.filesTable&&"function"==typeof window.filesTable.toggleColumn?window.filesTable.toggleColumn(a):window.filesTable&&"function"==typeof window.filesTable.hideColumn?t?window.filesTable.showColumn(a):window.filesTable.hideColumn(a):console.log("STANDALONE: Column toggle not supported by table")})});const n=document.querySelectorAll("[data-sort], .sort-btn");console.log(`STANDALONE: Found ${n.length} sort buttons`),n.forEach((e,n)=>{const a=e.getAttribute("data-sort")||e.textContent.toLowerCase().trim();console.log(`STANDALONE: Setting up sort button ${n}: ${a}`),e.addEventListener("click",function(n){n.preventDefault(),console.log(`STANDALONE: Sort button clicked: ${a}`);const t="asc"===(e.getAttribute("data-direction")||"asc")?"desc":"asc";e.setAttribute("data-direction",t),document.querySelectorAll("[data-sort]").forEach(e=>e.classList.remove("active")),e.classList.add("active"),window.filesTable&&"function"==typeof window.filesTable.setSort?window.filesTable.setSort(a,t):console.log("STANDALONE: Table sorting not supported")})}),console.log("STANDALONE: ✅ Additional controls setup completed")}catch(e){console.error("STANDALONE: ❌ Failed to setup additional controls:",e)}}function setupUIHandlers_Standalone(){if(console.log("STANDALONE: setupUIHandlers_Standalone called!"),console.log("STANDALONE: Document ready state:",document.readyState),uiHandlersInitialized)console.log("STANDALONE: UI handlers already initialized, skipping...");else try{uiHandlersInitialized=!0;const e=document.getElementById("theme-toggle");e?(console.log("STANDALONE: Theme toggle found and configured"),e.addEventListener("click",function(){console.log("STANDALONE: Theme toggle clicked"),"function"==typeof toggleTheme&&toggleTheme()})):console.log("STANDALONE: Theme toggle button not found"),setupGroupButtons_Standalone(),setupFilterUI_Standalone(),setupClearFilters_Standalone(),setupAdditionalControls_Standalone(),"loading"===document.readyState?(console.log("STANDALONE: DOM still loading, waiting..."),document.addEventListener("DOMContentLoaded",function(){console.log("STANDALONE: DOM loaded, setting up exports now"),setupExportDropdowns_Standalone()})):(console.log("STANDALONE: DOM ready, setting up exports immediately"),setupExportDropdowns_Standalone()),console.log("STANDALONE: ✅ UI handlers initialized successfully")}catch(e){throw uiHandlersInitialized=!1,console.error("STANDALONE: ❌ Failed to initialize UI handlers:",e),e}}window.setupUIHandlers_Standalone=setupUIHandlers_Standalone,window.setupUIHandlers=setupUIHandlers_Standalone,window.generateCSVFromTable_Standalone=generateCSVFromTable_Standalone,window.generateJSONFromTable_Standalone=generateJSONFromTable_Standalone,window.handleExport_Standalone=handleExport_Standalone}()</script><script>const debug={verbose:(...e)=>{console.debug("[HTML REPORT VIEW] - "+e.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" "))},info:(...e)=>{console.info("[HTML REPORT VIEW] - "+e.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" "))},warning:(...e)=>{console.warn("[HTML REPORT VIEW] - "+e.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" "))},error:(...e)=>{console.error("[HTML REPORT VIEW] - "+e.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" "))}};let currentTheme=localStorage.getItem("theme")||"auto";function updateThemeToggle(){const e=document.getElementById("theme-icon"),n=document.getElementById("theme-text");if(debug.verbose("updateThemeToggle called:",{currentTheme:currentTheme,themeIconExists:!!e,themeTextExists:!!n,domReadyState:document.readyState}),!e||!n)return void debug.verbose("Theme toggle elements not found, skipping update");const a=!!window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches,t="dark"===currentTheme||"auto"===currentTheme&&a;debug.verbose("Theme toggle update details:",{prefersDark:a,actuallyDark:t,currentTheme:currentTheme}),"auto"===currentTheme?(e.textContent=t?"🌙":"☀️",n.textContent="Auto"):"dark"===currentTheme?(e.textContent="🌙",n.textContent="Dark"):(e.textContent="☀️",n.textContent="Light"),debug.verbose("Updated button to:",{icon:e.textContent,text:n.textContent})}function applyThemeStyles(){const e=!!window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches;"dark"===currentTheme?document.documentElement.setAttribute("data-theme","dark"):"light"===currentTheme?document.documentElement.setAttribute("data-theme","light"):"auto"===currentTheme&&e?document.documentElement.setAttribute("data-theme","dark"):document.documentElement.removeAttribute("data-theme"),debug.verbose("Applied theme:",{currentTheme:currentTheme,prefersDark:e,dataTheme:document.documentElement.getAttribute("data-theme")})}function applyTheme(){applyThemeStyles(),updateThemeToggle()}function toggleTheme(){const e=["auto","light","dark"],n=e.indexOf(currentTheme),a=e[(n+1)%e.length];debug.verbose("Theme toggle:",{from:currentTheme,to:a,systemPrefersDark:window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches:"unknown"}),currentTheme=a,localStorage.setItem("theme",currentTheme),applyTheme()}if(debug.verbose("Initial theme state:",{storedTheme:localStorage.getItem("theme"),currentTheme:currentTheme,systemPrefersDark:window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches:"unknown"}),window.matchMedia){const e=window.matchMedia("(prefers-color-scheme: dark)");e.addEventListener?e.addEventListener("change",applyTheme):e.addListener&&e.addListener(applyTheme)}applyThemeStyles(),document.addEventListener("DOMContentLoaded",()=>{const e=document.getElementById("theme-toggle");e&&(e.addEventListener("click",toggleTheme),updateThemeToggle())});let showFullPaths=!1;const embeddedXmlData="{{XML_DATA_FALLBACK}}",embeddedJsonFiles=[{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\README.md",relativePath:"README.md",directory:"",fileName:"README.md",language:"Markdown",lines:1,codeLines:0,commentLines:0,blankLines:1,size:0},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\setup.go",relativePath:"setup.go",directory:"",fileName:"setup.go",language:"Go",lines:254,codeLines:214,commentLines:14,blankLines:26,size:8715},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\Makefile",relativePath:"Makefile",directory:"",fileName:"Makefile",language:"Unknown",lines:1,codeLines:0,commentLines:0,blankLines:1,size:0},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\user.html",relativePath:"web/user.html",directory:"web",fileName:"user.html",language:"HTML",lines:638,codeLines:557,commentLines:6,blankLines:75,size:19659},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\register.html",relativePath:"web/register.html",directory:"web",fileName:"register.html",language:"HTML",lines:519,codeLines:439,commentLines:0,blankLines:80,size:16471},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\manager.html",relativePath:"web/manager.html",directory:"web",fileName:"manager.html",language:"HTML",lines:253,codeLines:225,commentLines:8,blankLines:20,size:11597},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\login.html",relativePath:"web/login.html",directory:"web",fileName:"login.html",language:"HTML",lines:396,codeLines:334,commentLines:0,blankLines:62,size:11744},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\index.html",relativePath:"web/index.html",directory:"web",fileName:"index.html",language:"HTML",lines:322,codeLines:279,commentLines:0,blankLines:43,size:9520},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\excel_export.go",relativePath:"internal/utils/excel_export.go",directory:"internal/utils",fileName:"excel_export.go",language:"Go",lines:99,codeLines:80,commentLines:8,blankLines:11,size:2302},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\hash.go",relativePath:"internal/utils/hash.go",directory:"internal/utils",fileName:"hash.go",language:"Go",lines:17,codeLines:12,commentLines:2,blankLines:3,size:480},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\notification_worker.go",relativePath:"internal/workers/notification_worker.go",directory:"internal/workers",fileName:"notification_worker.go",language:"Go",lines:116,codeLines:83,commentLines:12,blankLines:21,size:2961},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\error.go",relativePath:"internal/utils/error.go",directory:"internal/utils",fileName:"error.go",language:"Go",lines:66,codeLines:50,commentLines:4,blankLines:12,size:1642},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\matching_worker.go",relativePath:"internal/workers/matching_worker.go",directory:"internal/workers",fileName:"matching_worker.go",language:"Go",lines:89,codeLines:66,commentLines:9,blankLines:14,size:2180},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\expire_worker.go",relativePath:"internal/workers/expire_worker.go",directory:"internal/workers",fileName:"expire_worker.go",language:"Go",lines:103,codeLines:73,commentLines:12,blankLines:18,size:2485},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\workers\\audit_worker.go",relativePath:"internal/workers/audit_worker.go",directory:"internal/workers",fileName:"audit_worker.go",language:"Go",lines:72,codeLines:52,commentLines:6,blankLines:14,size:1655},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\user.js",relativePath:"web/js/user.js",directory:"web/js",fileName:"user.js",language:"JavaScript",lines:491,codeLines:413,commentLines:22,blankLines:56,size:15187},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\manager.js",relativePath:"web/js/manager.js",directory:"web/js",fileName:"manager.js",language:"JavaScript",lines:768,codeLines:667,commentLines:26,blankLines:75,size:25041},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\css\\style.css",relativePath:"web/css/style.css",directory:"web/css",fileName:"style.css",language:"CSS",lines:675,codeLines:551,commentLines:19,blankLines:105,size:11308},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\main.js",relativePath:"web/js/main.js",directory:"web/js",fileName:"main.js",language:"JavaScript",lines:350,codeLines:270,commentLines:28,blankLines:52,size:9386},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\js\\admin.js",relativePath:"web/js/admin.js",directory:"web/js",fileName:"admin.js",language:"JavaScript",lines:435,codeLines:356,commentLines:22,blankLines:57,size:12457},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\image_handler.go",relativePath:"internal/utils/image_handler.go",directory:"internal/utils",fileName:"image_handler.go",language:"Go",lines:187,codeLines:131,commentLines:27,blankLines:29,size:4600},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\pdf_export.go",relativePath:"internal/utils/pdf_export.go",directory:"internal/utils",fileName:"pdf_export.go",language:"Go",lines:105,codeLines:78,commentLines:12,blankLines:15,size:2410},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\validator.go",relativePath:"internal/utils/validator.go",directory:"internal/utils",fileName:"validator.go",language:"Go",lines:84,codeLines:57,commentLines:12,blankLines:15,size:2095},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\similarity.go",relativePath:"internal/utils/similarity.go",directory:"internal/utils",fileName:"similarity.go",language:"Go",lines:159,codeLines:115,commentLines:18,blankLines:26,size:3592},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\response.go",relativePath:"internal/utils/response.go",directory:"internal/utils",fileName:"response.go",language:"Go",lines:67,codeLines:53,commentLines:6,blankLines:8,size:1841},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\utils\\matching.go",relativePath:"internal/utils/matching.go",directory:"internal/utils",fileName:"matching.go",language:"Go",lines:102,codeLines:79,commentLines:8,blankLines:15,size:2429},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\archive_repo.go",relativePath:"internal/repositories/archive_repo.go",directory:"internal/repositories",fileName:"archive_repo.go",language:"Go",lines:91,codeLines:67,commentLines:9,blankLines:15,size:2537},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\notification_service.go",relativePath:"internal/services/notification_service.go",directory:"internal/services",fileName:"notification_service.go",language:"Go",lines:115,codeLines:79,commentLines:14,blankLines:22,size:3873},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\match_service.go",relativePath:"internal/services/match_service.go",directory:"internal/services",fileName:"match_service.go",language:"Go",lines:239,codeLines:185,commentLines:23,blankLines:31,size:6999},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\audit_log_repo.go",relativePath:"internal/repositories/audit_log_repo.go",directory:"internal/repositories",fileName:"audit_log_repo.go",language:"Go",lines:104,codeLines:74,commentLines:11,blankLines:19,size:2856},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\lost_item_service.go",relativePath:"internal/services/lost_item_service.go",directory:"internal/services",fileName:"lost_item_service.go",language:"Go",lines:207,codeLines:151,commentLines:21,blankLines:35,size:6408},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\match_result_repo.go",relativePath:"internal/repositories/match_result_repo.go",directory:"internal/repositories",fileName:"match_result_repo.go",language:"Go",lines:124,codeLines:92,commentLines:13,blankLines:19,size:3768},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\lost_item_repo.go",relativePath:"internal/repositories/lost_item_repo.go",directory:"internal/repositories",fileName:"lost_item_repo.go",language:"Go",lines:127,codeLines:89,commentLines:15,blankLines:23,size:3714},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\notification_repo.go",relativePath:"internal/repositories/notification_repo.go",directory:"internal/repositories",fileName:"notification_repo.go",language:"Go",lines:103,codeLines:73,commentLines:12,blankLines:18,size:3064},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\item_repo.go",relativePath:"internal/repositories/item_repo.go",directory:"internal/repositories",fileName:"item_repo.go",language:"Go",lines:158,codeLines:111,commentLines:18,blankLines:29,size:4412},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_verification_repo.go",relativePath:"internal/repositories/claim_verification_repo.go",directory:"internal/repositories",fileName:"claim_verification_repo.go",language:"Go",lines:66,codeLines:50,commentLines:6,blankLines:10,size:2144},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\claim_repo.go",relativePath:"internal/repositories/claim_repo.go",directory:"internal/repositories",fileName:"claim_repo.go",language:"Go",lines:145,codeLines:107,commentLines:15,blankLines:23,size:3957},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\category_repo.go",relativePath:"internal/repositories/category_repo.go",directory:"internal/repositories",fileName:"category_repo.go",language:"Go",lines:101,codeLines:76,commentLines:8,blankLines:17,size:2731},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\item_service.go",relativePath:"internal/services/item_service.go",directory:"internal/services",fileName:"item_service.go",language:"Go",lines:211,codeLines:156,commentLines:20,blankLines:35,size:7010},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\export_service.go",relativePath:"internal/services/export_service.go",directory:"internal/services",fileName:"export_service.go",language:"Go",lines:254,codeLines:198,commentLines:21,blankLines:35,size:7335},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\claim_service.go",relativePath:"internal/services/claim_service.go",directory:"internal/services",fileName:"claim_service.go",language:"Go",lines:268,codeLines:188,commentLines:32,blankLines:48,size:8230},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\category_service.go",relativePath:"internal/services/category_service.go",directory:"internal/services",fileName:"category_service.go",language:"Go",lines:147,codeLines:104,commentLines:17,blankLines:26,size:4313},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\auth_service.go",relativePath:"internal/services/auth_service.go",directory:"internal/services",fileName:"auth_service.go",language:"Go",lines:172,codeLines:121,commentLines:23,blankLines:28,size:4586},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\routes\\routes.go",relativePath:"internal/routes/routes.go",directory:"internal/routes",fileName:"routes.go",language:"Go",lines:128,codeLines:89,commentLines:21,blankLines:18,size:5324},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\audit_service.go",relativePath:"internal/services/audit_service.go",directory:"internal/services",fileName:"audit_service.go",language:"Go",lines:68,codeLines:50,commentLines:4,blankLines:14,size:2038},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\archive_service.go",relativePath:"internal/services/archive_service.go",directory:"internal/services",fileName:"archive_service.go",language:"Go",lines:67,codeLines:48,commentLines:5,blankLines:14,size:1859},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\revision_log_repo.go",relativePath:"internal/repositories/revision_log_repo.go",directory:"internal/repositories",fileName:"revision_log_repo.go",language:"Go",lines:92,codeLines:64,commentLines:10,blankLines:18,size:2479},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\item.go",relativePath:"internal/models/item.go",directory:"internal/models",fileName:"item.go",language:"Go",lines:152,codeLines:119,commentLines:15,blankLines:18,size:5266},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\lost_item.go",relativePath:"internal/models/lost_item.go",directory:"internal/models",fileName:"lost_item.go",language:"Go",lines:93,codeLines:73,commentLines:8,blankLines:12,size:2867},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\match_result.go",relativePath:"internal/models/match_result.go",directory:"internal/models",fileName:"match_result.go",language:"Go",lines:128,codeLines:104,commentLines:10,blankLines:14,size:4330},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim_verification.go",relativePath:"internal/models/claim_verification.go",directory:"internal/models",fileName:"claim_verification.go",language:"Go",lines:77,codeLines:59,commentLines:8,blankLines:10,size:2898},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\claim.go",relativePath:"internal/models/claim.go",directory:"internal/models",fileName:"claim.go",language:"Go",lines:164,codeLines:128,commentLines:14,blankLines:22,size:5082},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\category.go",relativePath:"internal/models/category.go",directory:"internal/models",fileName:"category.go",language:"Go",lines:48,codeLines:36,commentLines:5,blankLines:7,size:1500},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\verification_service.go",relativePath:"internal/services/verification_service.go",directory:"internal/services",fileName:"verification_service.go",language:"Go",lines:153,codeLines:122,commentLines:10,blankLines:21,size:4950},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\audit_log.go",relativePath:"internal/models/audit_log.go",directory:"internal/models",fileName:"audit_log.go",language:"Go",lines:98,codeLines:80,commentLines:7,blankLines:11,size:2895},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\archive.go",relativePath:"internal/models/archive.go",directory:"internal/models",fileName:"archive.go",language:"Go",lines:110,codeLines:92,commentLines:7,blankLines:11,size:3881},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\services\\user_service.go",relativePath:"internal/services/user_service.go",directory:"internal/services",fileName:"user_service.go",language:"Go",lines:190,codeLines:128,commentLines:26,blankLines:36,size:5388},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\user_repo.go",relativePath:"internal/repositories/user_repo.go",directory:"internal/repositories",fileName:"user_repo.go",language:"Go",lines:152,codeLines:108,commentLines:19,blankLines:25,size:4242},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\repositories\\role_repo.go",relativePath:"internal/repositories/role_repo.go",directory:"internal/repositories",fileName:"role_repo.go",language:"Go",lines:64,codeLines:48,commentLines:6,blankLines:10,size:1470},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\user.go",relativePath:"internal/models/user.go",directory:"internal/models",fileName:"user.go",language:"Go",lines:104,codeLines:75,commentLines:13,blankLines:16,size:2986},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\role.go",relativePath:"internal/models/role.go",directory:"internal/models",fileName:"role.go",language:"Go",lines:52,codeLines:38,commentLines:6,blankLines:8,size:1296},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\revision_log.go",relativePath:"internal/models/revision_log.go",directory:"internal/models",fileName:"revision_log.go",language:"Go",lines:72,codeLines:58,commentLines:5,blankLines:9,size:2294},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\models\\notification.go",relativePath:"internal/models/notification.go",directory:"internal/models",fileName:"notification.go",language:"Go",lines:127,codeLines:104,commentLines:10,blankLines:13,size:4112},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\web\\admin.html",relativePath:"web/admin.html",directory:"web",fileName:"admin.html",language:"HTML",lines:316,codeLines:290,commentLines:8,blankLines:18,size:14095},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\config.go",relativePath:"internal/config/config.go",directory:"internal/config",fileName:"config.go",language:"Go",lines:66,codeLines:50,commentLines:6,blankLines:10,size:1469},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\archive_controller.go",relativePath:"internal/controllers/archive_controller.go",directory:"internal/controllers",fileName:"archive_controller.go",language:"Go",lines:68,codeLines:50,commentLines:6,blankLines:12,size:2021},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\database.go",relativePath:"internal/config/database.go",directory:"internal/config",fileName:"database.go",language:"Go",lines:145,codeLines:110,commentLines:14,blankLines:21,size:3424},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\admin_controller.go",relativePath:"internal/controllers/admin_controller.go",directory:"internal/controllers",fileName:"admin_controller.go",language:"Go",lines:98,codeLines:75,commentLines:7,blankLines:16,size:3139},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\role_middleware.go",relativePath:"internal/middleware/role_middleware.go",directory:"internal/middleware",fileName:"role_middleware.go",language:"Go",lines:56,codeLines:41,commentLines:5,blankLines:10,size:1302},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\rate_limiter.go",relativePath:"internal/middleware/rate_limiter.go",directory:"internal/middleware",fileName:"rate_limiter.go",language:"Go",lines:112,codeLines:81,commentLines:11,blankLines:20,size:2358},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\logger.go",relativePath:"internal/middleware/logger.go",directory:"internal/middleware",fileName:"logger.go",language:"Go",lines:45,codeLines:30,commentLines:7,blankLines:8,size:865},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\jwt_middleware.go",relativePath:"internal/middleware/jwt_middleware.go",directory:"internal/middleware",fileName:"jwt_middleware.go",language:"Go",lines:105,codeLines:81,commentLines:8,blankLines:16,size:2507},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\config\\jwt.go",relativePath:"internal/config/jwt.go",directory:"internal/config",fileName:"jwt.go",language:"Go",lines:131,codeLines:92,commentLines:17,blankLines:22,size:3167},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\middleware\\cors.go",relativePath:"internal/middleware/cors.go",directory:"internal/middleware",fileName:"cors.go",language:"Go",lines:22,codeLines:17,commentLines:1,blankLines:4,size:702},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\auth_controller.go",relativePath:"internal/controllers/auth_controller.go",directory:"internal/controllers",fileName:"auth_controller.go",language:"Go",lines:102,codeLines:71,commentLines:13,blankLines:18,size:2712},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\report_controller.go",relativePath:"internal/controllers/report_controller.go",directory:"internal/controllers",fileName:"report_controller.go",language:"Go",lines:109,codeLines:89,commentLines:5,blankLines:15,size:2911},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\match_controller.go",relativePath:"internal/controllers/match_controller.go",directory:"internal/controllers",fileName:"match_controller.go",language:"Go",lines:86,codeLines:63,commentLines:8,blankLines:15,size:2532},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\lost_item_controller.go",relativePath:"internal/controllers/lost_item_controller.go",directory:"internal/controllers",fileName:"lost_item_controller.go",language:"Go",lines:193,codeLines:141,commentLines:15,blankLines:37,size:6229},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\item_controller.go",relativePath:"internal/controllers/item_controller.go",directory:"internal/controllers",fileName:"item_controller.go",language:"Go",lines:222,codeLines:161,commentLines:18,blankLines:43,size:6891},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\claim_controller.go",relativePath:"internal/controllers/claim_controller.go",directory:"internal/controllers",fileName:"claim_controller.go",language:"Go",lines:247,codeLines:184,commentLines:20,blankLines:43,size:7320},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\user_controller.go",relativePath:"internal/controllers/user_controller.go",directory:"internal/controllers",fileName:"user_controller.go",language:"Go",lines:237,codeLines:169,commentLines:20,blankLines:48,size:7199},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\internal\\controllers\\category_controller.go",relativePath:"internal/controllers/category_controller.go",directory:"internal/controllers",fileName:"category_controller.go",language:"Go",lines:129,codeLines:94,commentLines:10,blankLines:25,size:3999},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.sum",relativePath:"go.sum",directory:"",fileName:"go.sum",language:"Unknown",lines:132,codeLines:131,commentLines:0,blankLines:1,size:11488},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\go.mod",relativePath:"go.mod",directory:"",fileName:"go.mod",language:"Unknown",lines:58,codeLines:54,commentLines:0,blankLines:4,size:2272},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\seed.sql",relativePath:"database/seed.sql",directory:"database",fileName:"seed.sql",language:"SQL",lines:202,codeLines:95,commentLines:75,blankLines:32,size:13363},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\database\\schema.sql",relativePath:"database/schema.sql",directory:"database",fileName:"schema.sql",language:"SQL",lines:300,codeLines:242,commentLines:43,blankLines:15,size:13447},{path:"c:\\Users\\Bambang Herlambang\\Documents\\Semester 3\\4_Back End Web Programming\\uas 6\\lost-and-found\\cmd\\server\\main.go",relativePath:"cmd/server/main.go",directory:"cmd/server",fileName:"main.go",language:"Go",lines:121,codeLines:83,commentLines:17,blankLines:21,size:3034}];function parseJSON(){try{if(debug.info("🔍 parseJSON called with embeddedJsonFiles:",{defined:!!embeddedJsonFiles,type:typeof embeddedJsonFiles,isArray:Array.isArray(embeddedJsonFiles),length:embeddedJsonFiles?embeddedJsonFiles.length:0,preview:embeddedJsonFiles?JSON.stringify(embeddedJsonFiles).substring(0,100)+"...":"undefined"}),!embeddedJsonFiles||!Array.isArray(embeddedJsonFiles)||0===embeddedJsonFiles.length)return debug.warning("❌ No valid JSON data found - not an array or empty"),null;debug.info("✅ JSON validation passed, processing array directly...");const e=embeddedJsonFiles;debug.info("✅ Using embedded files array directly, file count:",e.length);const n=new Map;e.forEach(e=>{const a=e.language||"Unknown";n.has(a)||n.set(a,{name:a,files:0,lines:0});const t=n.get(a);t.files++,t.lines+=Number(e.lines)||0});const a=Array.from(n.values()).sort((e,n)=>n.lines-e.lines);return{summary:{totalFiles:e.length||0,totalLines:e.reduce((e,n)=>e+(Number(n.lines)||0),0),totalCodeLines:e.reduce((e,n)=>e+(Number(n.codeLines)||0),0),totalCommentLines:e.reduce((e,n)=>e+(Number(n.commentLines)||0),0),totalBlankLines:e.reduce((e,n)=>e+(Number(n.blankLines)||0),0),languageCount:a.length},languages:a,files:e}}catch(e){return debug.error("❌ Error in parseJSON function:",{message:e.message,name:e.name,stack:e.stack,dataLength:embeddedJsonFiles?embeddedJsonFiles.length:"undefined",dataType:typeof embeddedJsonFiles,dataStart:embeddedJsonFiles?embeddedJsonFiles.substring(0,50):"undefined"}),null}}function parseXML(e){const n=(new DOMParser).parseFromString(e,"text/xml").querySelector("codeCounter"),a=Array.from(n.querySelectorAll("files file")).map(e=>({path:e.getAttribute("path"),relativePath:e.getAttribute("relativePath"),fullPath:e.getAttribute("fullPath")||e.getAttribute("relativePath"),language:e.getAttribute("language"),lines:parseInt(e.getAttribute("lines"))||0,codeLines:parseInt(e.getAttribute("codeLines"))||0,commentLines:parseInt(e.getAttribute("commentLines"))||0,blankLines:parseInt(e.getAttribute("blankLines"))||0,size:parseInt(e.getAttribute("size"))||0})),t=Array.from(n.querySelectorAll("languageStats language")).map(e=>({name:e.getAttribute("name"),files:parseInt(e.getAttribute("files"))||0,lines:parseInt(e.getAttribute("lines"))||0}));return{summary:{totalFiles:a.length||0,totalLines:a.reduce((e,n)=>e+(n.lines||0),0),totalCodeLines:a.reduce((e,n)=>e+(n.codeLines||0),0),totalCommentLines:a.reduce((e,n)=>e+(n.commentLines||0),0),totalBlankLines:a.reduce((e,n)=>e+(n.blankLines||0),0),languageCount:t.length},languages:t,files:a}}function formatNumber(e){return null==e||isNaN(e)?"0":Number(e).toLocaleString()}function populateReport(){try{let e=null;if("function"==typeof parseEmbeddedData&&(debug.info("📥 Using embedded data parser from webview modules"),e=parseEmbeddedData()),e||(debug.info("📥 Falling back to local JSON parsing"),e=parseJSON()),!e)throw new Error("No embedded report data found");if(debug.info("Using parsed data (preferred format)"),debug.info("Report data structure check:",{hasData:!!e,hasSummary:!(!e||!e.summary),summaryKeys:e&&e.summary?Object.keys(e.summary):"no summary",hasFiles:!(!e||!e.files),filesCount:e&&e.files?e.files.length:"no files",hasLanguages:!(!e||!e.languages),languagesCount:e&&e.languages?e.languages.length:"no languages"}),"function"==typeof populateReportFromData){debug.info("Using embedded populateReportFromData function");try{populateReportFromData(e)}catch(n){debug.error("Error in populateReportFromData:",n),debug.error("Falling back to basic population"),populateFilesTable(e.files)}}else debug.warning("populateReportFromData not available, using fallback"),populateFilesTable(e.files);const n=document.getElementById("loading-indicator"),a=document.getElementById("report-content");n&&n.classList.add("hidden"),a&&a.classList.remove("hidden")}catch(e){debug.error("Error parsing report data:",e);const n=document.getElementById("loading-indicator"),a=document.getElementById("error-message"),t=document.getElementById("error-text");n&&n.classList.add("hidden"),t&&(t.textContent="Error loading report data: "+e.message),a&&a.classList.remove("hidden")}}let filesTable;function initializeTabulatorTable(e){if(debug.info("🚀 Initializing Tabulator table using standalone functions"),"undefined"==typeof initializeAdvancedTable_Standalone)throw debug.error("❌ initializeAdvancedTable_Standalone function is not defined!"),debug.error("Available functions:",Object.getOwnPropertyNames(window).filter(e=>e.includes("initialize")||e.includes("Table"))),new Error("initializeAdvancedTable_Standalone function is not available");debug.info("✅ initializeAdvancedTable_Standalone function found"),filesTable=initializeAdvancedTable_Standalone(e),window.filesTable=filesTable,debug.info("✅ Tabulator table initialized using standalone functions")}function populateFilesTable(e){"undefined"!=typeof Tabulator?(initializeTabulatorTable(e),setupUIHandlers_Standalone(),"function"==typeof populateLanguageFilter?(populateLanguageFilter(e),debug.info("✅ Language filter populated in fallback")):debug.warning("⚠️ populateLanguageFilter function not available"),"function"==typeof setupAdvancedFiltering?setTimeout(()=>{window.filesTable?(setupAdvancedFiltering(e),debug.info("✅ Advanced filtering set up in fallback")):debug.error("❌ window.filesTable not available for filter setup")},1e3):debug.warning("⚠️ setupAdvancedFiltering function not available"),debug.info("✅ Report initialized with standalone modules")):populateBasicFilesTable(e)}function populateBasicFilesTable(e){const n=document.getElementById("files-tbody");if(!n)return;const a=[...e].sort((e,n)=>e.relativePath.localeCompare(n.relativePath));n.innerHTML=a.map(e=>{const n=(e.size/1024).toFixed(1);e.lines>0&&(e.commentLines/e.lines*100).toFixed(1);return`\n <tr>\n <td class="file-path">${escapeHtml(e.relativePath)}</td>\n <td>${escapeHtml(e.language)}</td>\n <td>${e.lines.toLocaleString()}</td>\n <td>${e.codeLines.toLocaleString()}</td>\n <td>${e.commentLines.toLocaleString()}</td>\n <td>${e.blankLines.toLocaleString()}</td>\n <td>${n} KB</td>\n </tr>\n `}).join("")}function setupGroupControls(){const e=document.getElementById("group-language-btn"),n=document.getElementById("group-directory-btn"),a=document.getElementById("clear-group-btn");e&&e.addEventListener("click",()=>{filesTable&&(filesTable.setGroupBy("language"),updateGroupButtonStates("language"))}),n&&n.addEventListener("click",()=>{filesTable&&(filesTable.setGroupBy("directory"),updateGroupButtonStates("directory"))}),a&&a.addEventListener("click",()=>{filesTable&&(filesTable.setGroupBy(!1),updateGroupButtonStates(null))})}function updateGroupButtonStates(e){document.querySelectorAll("#group-language-btn, #group-directory-btn, #clear-group-btn").forEach(e=>{e.classList.remove("active")}),"language"===e?document.getElementById("group-language-btn")?.classList.add("active"):"directory"===e?document.getElementById("group-directory-btn")?.classList.add("active"):null===e&&document.getElementById("clear-group-btn")?.classList.add("active")}function escapeHtml(e){const n=document.createElement("div");return n.textContent=e,n.innerHTML}document.addEventListener("DOMContentLoaded",()=>{document.getElementById("summary-stats")&&populateReport()})</script>