Raw Source
Dedonych / ShikiCSSComments

// ==UserScript==
// @name         ShikiCSSComments
// @namespace    http://tampermonkey.net/
// @version      2024-08-28
// @description  Comment your css code!
// @author       Dedonych
// @match        https://shikimori.one/*
// @updateURL    https://openuserjs.org/meta/Dedonych/ShikiMirror_comments.meta.js
// @downloadURL  https://openuserjs.org/install/Dedonych/ShikiMirror_comments.user.js
// @icon         https://www.google.com/s2/favicons?sz=64&domain=shikimori.one
// @license      MIT
// @grant        none
// ==/UserScript==

addEventListener("keydown", (e) => {
  if (e.ctrlKey && e.code == "Slash") {
    const cmtmp = document.querySelector(".p-profiles-edit .CodeMirror");
    // if not CodeMirror =  return
    if (!cmtmp) return;
    const cm = cmtmp.CodeMirror;
    // get value of textarea
    const value = cm.getValue().split("\n");

    // get selected ranges
    const selectedArray = cm.listSelections();
    for (const r of selectedArray) {
      //get lines
      const {
        anchor,
        head
      } = r;
      // sort lines number;
      const [x, y] = [anchor.line, head.line].sort((a, b) => a - b);
      // defime has a comments
      if (value[x].startsWith("/*") && value[y].endsWith("*/")) {
        // define spaces;
        const [s_x, s_y] = [
          value[x][2] == " " ? 3 : 2,
          value[y][(value[y].length -= 3)] == " " ? -3 : -2,
        ];
        value[x] = value[x].slice(s_x);
        value[y] = value[y].slice(0, s_y);
      }
      else {
        value[x] = "/* " + value[x];
        value[y] = value[y] + " */";
      }
      cm.setValue(value.join("\n"));
      // wait for load
      setTimeout(() => {
        cm.setCursor(head);
        cm.setSelection(anchor, head);
      }, 0);
    }
  }
});