Edited at

Confluenceで子ページの中身を全て展開したページを作る[Server 6.1.4版]

More than 1 year has passed since last update.


はじめに

(勝手に)以下ページを参考にしております。

Confluenceで子ページの中身を全て展開したページを作る

参考にさせてもらったコードだと、Server6.1.4では動かず、一部手直しした時の情報を残しておきます。

※問題あれば記事消します。(本家優先)


使い方


基本

本家と変わりません。

1. 「その他マクロ>子ページの表示」をページ内のどこかに配置する。

image.png

2. 以下ソースを、「その他マクロ>htmlマクロ」に記載する。

※htmlマクロを使うには管理>アドオンで有効化する必要があります。

詳しくは こちら

<div class="w-child-pages" data-url="this"></div>

<script type="text/javascript">
(function() {
var expandScript = function($div, data) {
$div.css({padding: '15px', border: 'solid 1px #aaa', borderRadius: '5px'});
var page_url = $div.attr('data-url');
if (page_url == 'this') {
appendPage($div, data, true);
return;
}
$.get(page_url, function(data) {
appendPage($div, data, false);
});
};
var appendPage = function($div, data, self) {
if (self) {
appendChildPages($div, data);
} else {
var $data = $(data);
var $content = $data.find('div#main-content');
$div.append($data.find('h1#title-text'));
$div.append($content);
expandScripts($content, data);
}
if (window.SyntaxHighlighter) {
window.SyntaxHighlighter.highlight();
}
};
var expandScripts = function($div, data) {
$div.find('div.w-child-pages').each(function(){
expandScript($(this), data);
});
};
var appendChildPages = function($div, data) {
$(data).find('ul.childpages-macro.conf-macro.output-block').find('li').each(function() {
var $content = $('<div>').css({marginBottom: '10px'});;
$div.append($content);
$.get($(this).find('a').attr('href'), function(data) {
appendPage($content, data, false);
});
});
};
var scriptTags = document.getElementsByTagName('script');
var $div = $(scriptTags[scriptTags.length - 1]).prev();
$(function(){
if (location.pathname != '/pages/viewpage.action') {
return;
}
expandScript($div, $('html')[0].outerHTML);
});
})();
</script>

※サーバーがインターネット接続できないネットワークにあるので、<script src="https://・・・">ではうまくいかないので、直書き。


応用

本家と変わりません。

・任意のページを埋め込むときは最初のdivのdata-urlの部分にURLを指定する


制約

本家と変わりません。

・子ページでコードブロックが使われている場合、埋め込むページにも最低1つはコードブロックが必要


手直し箇所

たぶんconfluence本体のタグの使い方が変わったのだと思う。

before

$(data).find('li.child-item').each(function() {

after

$(data).find('ul.childpages-macro.conf-macro.output-block').find('li').each(function() {

※うちの環境では、/pages/の前に/wikiが着くように設定ファイルいじったりしてたので、ここも直してます。

before

if (location.pathname != '/pages/viewpage.action') {

after

if (location.pathname != '/wiki/pages/viewpage.action') {

気が向いたらプルリク送ります・・・


あとがき

ホントは、配下ページの添付ファイル一覧作りたいな、と思ったのがスタート。 → 作りました@201711/29

ページの再帰展開がまずできれば、きっとなんとかなるだろうと思って、いじりました。

結論的には、REST api使えばできるわ・・・ということに思い至り、このソースを拡充していく方向は取りやめにしようかと・・・

でもせっかくなので、公開しておこうかな・・・くらいの感覚です。

以上です。