はじめに
(勝手に)以下ページを参考にしております。
Confluenceで子ページの中身を全て展開したページを作る
参考にさせてもらったコードだと、Server6.1.4では動かず、一部手直しした時の情報を残しておきます。
※問題あれば記事消します。(本家優先)
使い方
基本
本家と変わりません。
1. 「その他マクロ>子ページの表示」をページ内のどこかに配置する。
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使えばできるわ・・・ということに思い至り、このソースを拡充していく方向は取りやめにしようかと・・・
でもせっかくなので、公開しておこうかな・・・くらいの感覚です。
以上です。