如何在 Confluence 中获得自动编号的标题?

问题描述 投票:0回答:4

目前无法对文档结构的标题进行自动编号。我知道有(付费)第三方插件可用。

如何实现连续编号的标题?

javascript wiki confluence
4个回答
10
投票

TL;博士

为以下 javascript 创建书签,然后在 confluence 的编辑模式下单击它以重新编号标题。

javascript:(function()%7Bfunction%20addIndex()%20%7Bvar%20indices%20%3D%20%5B%5D%3BjQuery(%22.ak-editor-content-area%20.ProseMirror%22).find(%22h1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%22).each(function(i%2Ce)%20%7Bvar%20hIndex%20%3D%20parseInt(this.nodeName.substring(1))%20-%201%3Bif%20(indices.length%20-%201%20%3E%20hIndex)%20%7Bindices%3D%20indices.slice(0%2C%20hIndex%20%2B%201%20)%3B%7Dif%20(indices%5BhIndex%5D%20%3D%3D%20undefined)%20%7Bindices%5BhIndex%5D%20%3D%200%3B%7Dindices%5BhIndex%5D%2B%2B%3BjQuery(this).html(indices.join(%22.%22)%2B%22.%20%22%20%2B%20removeNo(jQuery(this).html()))%3B%7D)%3B%7Dfunction%20removeNo(str)%20%7Blet%20newstr%20%3D%20str.trim()%3Bnewstr%20%3D%20newstr.replace(%2F%5B%5Cu00A0%5Cu1680%E2%80%8B%5Cu180e%5Cu2000-%5Cu2009%5Cu200a%E2%80%8B%5Cu200b%E2%80%8B%5Cu202f%5Cu205f%E2%80%8B%5Cu3000%5D%2Fg%2C'%20')%3Bif(IsNumeric(newstr.substring(0%2Cnewstr.indexOf('%20'))))%7Breturn%20newstr.substring(newstr.indexOf('%20')%2B1).trim()%3B%7Dreturn%20newstr%3B%7Dfunction%20IsNumeric(num)%20%7Bnum%20%3D%20num.split('.').join(%22%22)%3Breturn%20(num%20%3E%3D0%20%7C%7C%20num%20%3C%200)%3B%7DaddIndex()%7D)()

结果

initial structure numbered structure

如何使用

对结构进行更改后,单击添加书签的 javascript 会对文档重新编号。

限制是它只提供 n.n.n。编号,但对于许多情况来说这已经足够了。脚本也可以根据需要定制。

背景、解释和披露

我尝试了这个 TaperMonkey 脚本,显然是由 this post 产生的,但它没有按原样工作。所以我拿了它的源代码并剥离了集成代码、旧版本兼容性,并做了一些小的调整以获得这个:

function addIndex() {
        var indices = [];

            jQuery(".ak-editor-content-area .ProseMirror").find("h1,h2,h3,h4,h5,h6").each(function(i,e) {
                var hIndex = parseInt(this.nodeName.substring(1)) - 1;
                if (indices.length - 1 > hIndex) {
                    indices= indices.slice(0, hIndex + 1 );
                }
                if (indices[hIndex] == undefined) {
                    indices[hIndex] = 0;
                }
                indices[hIndex]++;
                jQuery(this).html(indices.join(".")+". " + removeNo(jQuery(this).html()));
            });
    }

    function removeNo(str) {
        let newstr = str.trim();
        newstr = newstr.replace(/[\u00A0\u1680​\u180e\u2000-\u2009\u200a​\u200b​\u202f\u205f​\u3000]/g,' ');
        if(IsNumeric(newstr.substring(0,newstr.indexOf(' ')))){
            return newstr.substring(newstr.indexOf(' ')+1).trim();
        }
        return newstr;
    }

    function IsNumeric(num) {
        num = num.split('.').join("");
        return (num >=0 || num < 0);
    }
    
addIndex();

(我不是 JavaScript 开发人员,我确信它可以写得更好/更好)

然后我使用 bookmarklet 将其转换为顶部的 javascript 书签,点击即可触发功能。


1
投票

基于小书签方法,我创建了一个 Chrome 扩展,它将在上下文菜单中添加此功能并将脚本注入页面中。 请参阅 https://tdalon.blogspot.com/2024/03/crx-confluence-numbered-headings.html 以及 GitHub 中提供的源代码 https://github.com/tdalon/confluence_crx

这避免了设置书签的麻烦,并使功能也更易于访问。 除了 Chrome 扩展程序之外,Chrome 扩展程序还具有其他一些不错的功能,例如按标签快速组合搜索。


0
投票

灵感来源:https://2ality.com/2012/01/numbering-headingshtml.html

这是一个 CSS,您可以在 Confluence 外观/样式表中应用该 CSS 以进行自动编号。

.wiki-content h1 {
  counter-increment: h1counter;
  counter-reset: h2counter;
}
.wiki-content h1::before {
  content: counter(h1counter) ".\0000a0\0000a0";
}
.wiki-content h2 {
  counter-increment: h2counter;
  counter-reset: h3counter;
}
.wiki-content h2::before {
  content: counter(h1counter) "." counter(h2counter) ".\0000a0\0000a0";
}
.wiki-content h3 {
  counter-increment: h3counter;
  counter-reset: h4counter;
}
.wiki-content h3::before {
  content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) ".\0000a0\0000a0";
}
.wiki-content h4 {
  counter-increment: h4counter;
}
.wiki-content h4::before {
  content: counter(h1counter) "." counter(h2counter) "." counter(h3counter) "." counter(h4counter) ".\0000a0\0000a0";    }

有了这个,您可以使编号在目录中可见:

.toc-macro.hidden-outline span.toc-outline {
    display: inline;
}

0
投票

我们为 Confluence 构建了一个编号标题应用程序。这是令人惊讶的复杂,即使你让它工作一次,当你更新添加/删除标题时会发生什么。没有人愿意为应用程序付费,包括我自己,但如果您正在处理公共页面,例如 Confluence 在技术文档中很受欢迎..

Atlassian Marketplace 上有 5 个应用程序,但只有 3 家公司,即 2 家拥有 2 个应用程序,而且价格相差很大。

© www.soinside.com 2019 - 2024. All rights reserved.