tianyun 3 éve
szülő
commit
284597079a
1 módosított fájl, 100 hozzáadás és 0 törlés
  1. 100 0
      tmp/monkey/notion-标题编号.js

+ 100 - 0
tmp/monkey/notion-标题编号.js

@@ -0,0 +1,100 @@
+// ==UserScript==
+// @name        T-Notion-标题编号
+// @namespace   Violentmonkey Scripts
+// @match       *://www.notion.so/*
+// @grant       none
+// @version     1.0
+// @author      -
+// @description 2021/11/5 下午2:18:51
+// ==/UserScript==
+(function () {
+    function myHeader() {
+        // 删除最后gap个数字后seq+1
+        function leftMoveAndAddSeq(str, gap) {
+            let arr = str.split(".")
+            arr[arr.length - 2 - gap] = parseInt(arr[arr.length - 2 - gap]) + 1
+            while (gap >= 0) {
+                arr.pop();
+                gap -= 1;
+            }
+            return arr.join(".") + ".";
+        }
+
+        // 删除过去生成的序号
+        function removeOldPrefix(content) {
+            return content.replace(/^(\d+\.\d+\.\d+\.\s)/, '').replace(/^(\d+\.\d+\.\s)/, '').replace(/^(\d+\.\s)/, '')
+        }
+
+        // 获取所有的header
+        const $headers = [...document.querySelectorAll(`.notion-header-block, .notion-sub_header-block, .notion-sub_sub_header-block`)];
+        // 遍历生成序号,固定格式:
+        // level1 x.
+        // level2 x.x.
+        // level3 x.x.x.
+        let outermostLevel = 0 // 最外层的level
+        let lastPrefix = '' // 上一项的前缀
+        let lastLevel = 0 // 上一项的level
+        for (let i = 0; i < $headers.length; i++) {
+            const $header = $headers[i]
+            const level = $header.classList.contains('notion-header-block')
+                ? 1 : $header.classList.contains('notion-sub_header-block')
+                    ? 2 : 3
+            let curPrefix = ''
+            if (i === 0) {
+                outermostLevel = level
+                curPrefix = '1.'
+            } else {
+                if (level < outermostLevel) {
+                    // 不规范格式,直接停止转换
+                    break
+                }
+                if (level === lastLevel) {
+                    // 同一层级
+                    curPrefix = leftMoveAndAddSeq(lastPrefix, 0)
+                }
+                if (level > lastLevel) {
+                    // 下一层级
+                    curPrefix = lastPrefix + 1 + '.'
+                }
+                if (level < lastLevel) {
+                    // 外层
+                    if (lastLevel - level === 1) {
+                        if (lastPrefix.length < 4) break
+                        curPrefix = leftMoveAndAddSeq(lastPrefix, 1)
+                    } else if (lastLevel - level === 2) {
+                        if (lastPrefix.length < 6) break
+                        curPrefix = leftMoveAndAddSeq(lastPrefix, 2)
+                    }
+                }
+            }
+
+            // 删除之前生成的prefix
+            const originContent = removeOldPrefix($header.textContent)
+            // 更改dom
+            const $edit = $header.querySelector('.notranslate[contenteditable=true]')
+            $edit.textContent = curPrefix + ' ' + originContent
+            // 手动触发input event 以触发notion进行远程更新
+            setTimeout(() => {
+                $edit.dispatchEvent(new Event('input', {
+                    bubbles: true,
+                    cancelable: true,
+                }))
+            }, 0)
+            // 更新变量
+            lastPrefix = curPrefix
+            lastLevel = level
+        }
+    }
+
+    document.onkeydown = function (ev) {
+        if (ev.key === 'h' && ev.shiftKey) {
+            ev.preventDefault() // 关闭浏览器快捷键
+            myHeader()
+        }
+    }
+    myHeader();
+    setInterval(() => {
+        myHeader();
+    }, 20000);
+
+})();