sloc-web 1.5.3

Source line analysis tool with CLI, web UI, HTML/PDF reports, and CI/CD integration
Documentation
// ── Shared background init ── call inside the page's main IIFE ────────────
// Include with:  {% include "_bg_js.html" %}
(function randomizeWatermarks() {
  var wms = Array.prototype.slice.call(document.querySelectorAll('.background-watermarks img'));
  if (!wms.length) return;
  var placed = [];
  function tooClose(top, left) {
    for (var i = 0; i < placed.length; i++) {
      var dt = Math.abs(placed[i][0] - top), dl = Math.abs(placed[i][1] - left);
      if (dt < 16 && dl < 12) return true;
    }
    return false;
  }
  function pick(leftBand) {
    for (var attempt = 0; attempt < 50; attempt++) {
      var top = Math.random() * 88 + 2;
      var left = leftBand ? Math.random() * 24 + 1 : Math.random() * 24 + 74;
      if (!tooClose(top, left)) { placed.push([top, left]); return [top, left]; }
    }
    var top = Math.random() * 88 + 2;
    var left = leftBand ? Math.random() * 24 + 1 : Math.random() * 24 + 74;
    placed.push([top, left]); return [top, left];
  }
  var half = Math.floor(wms.length / 2);
  wms.forEach(function (img, i) {
    var pos = pick(i < half);
    var size = Math.floor(Math.random() * 100 + 120);
    var rot = (Math.random() * 360).toFixed(1);
    var op = (Math.random() * 0.08 + 0.12).toFixed(2);
    img.style.cssText = 'width:' + size + 'px;top:' + pos[0].toFixed(1) + '%;left:'
      + pos[1].toFixed(1) + '%;transform:rotate(' + rot + 'deg);opacity:' + op + ';';
  });
})();
(function spawnCodeParticles() {
  var container = document.getElementById('code-particles');
  if (!container) return;
  var snippets = [
    '1,247 sloc','fn analyze()','code_lines','0 mixed','blanks: 312',
    '// comment','pub fn run','use std::fs','Result<()>','let mut n = 0',
    'git main','#[derive]','impl Scan','3,841 physical','files: 60',
    '450 comments','cargo build','Ok(run)','Vec<String>','match lang',
    'fn main() {','.rs .go .py','sloc_core','render_html','2,163 code'
  ];
  var count = 38;
  for (var i = 0; i < count; i++) {
    (function(idx) {
      var el = document.createElement('span');
      el.className = 'code-particle';
      el.textContent = snippets[idx % snippets.length];
      var left = Math.random() * 94 + 2;
      var top = Math.random() * 88 + 6;
      var dur = (Math.random() * 10 + 9).toFixed(1);
      var delay = (Math.random() * 18).toFixed(1);
      var rot = (Math.random() * 26 - 13).toFixed(1);
      var op = (Math.random() * 0.09 + 0.06).toFixed(3);
      el.style.cssText = 'left:' + left.toFixed(1) + '%;top:' + top.toFixed(1) + '%;'
        + '--rot:' + rot + 'deg;--op:' + op + ';'
        + 'animation-duration:' + dur + 's;animation-delay:-' + delay + 's;';
      container.appendChild(el);
    })(i);
  }
})();