Confluence Server 用のカスタム マクロを作成しました。これには、マクロの他のパラメーターの履歴を保持する隠しパラメーター フィールドが含まれています。「manipulateMarkup」フックで AJS.MacroBrowser.setMacroJsOverride を使用してこれを実現します。フック コードでは、マクロの編集時に、非表示の履歴パラメーターを新しい設定で修正します。コード スニペット (mymacro.js から):
AJS.MacroBrowser.setMacroJsOverride('my-macro', {
fields: {
string: {
"history": function (params, options) {
return AJS.MacroBrowser.ParameterFields["_hidden"](params, options);
}
}
},
// This gets called AFTER the user clicks "Save", but BEFORE new values are retrieved from the form.
manipulateMarkup:
function (metadata) {
// Original values (from "selectedMacro" settings)
let oparms, oimpact, oprobability;
let today = new Date().toISOString().slice(0, 10);
// New values (from the form)
let impact = AJS.$('#macro-param-impact')[0].value;
let probability = AJS.$('#macro-param-probability')[0].value;
let hist = AJS.$('#macro-param-history');
let record = {"date": today, "impact": impact, "probability": probability};
// Check if we're editing an existing macro, or adding a new one
if (typeof AJS.MacroBrowser.settings.selectedMacro != 'undefined') {
// Editing an existing macro. Check to see if probability or impact changed.
oparms = AJS.MacroBrowser.settings.selectedMacro.params;
oimpact = oparms["impact"];
oprobability = oparms["probability"];
if ((oimpact != impact) || (oprobability != probability)) {
try {
let jobj = JSON.parse(hist[0].value);
jobj.push(record); // <--- PROBLEM: Corrupts macro icon and title text in page edit
hist.val( JSON.stringify(jobj) );
} catch (e) {
console.error(e.name);
}
}
} else {
// Creating a new one
let jobj = JSON.parse("[]");
jobj.push(record); // <--- PROBLEM: Corrupts macro icon and title text in page edit
hist.val( JSON.stringify(jobj) );
}
}
});
atlassian-plugin.xml の関連セクション:
<xhtml-macro key="my-macro" name="my-macro"
class= ...
icon="/download/resources/${atlassian.plugin.key}/images/SysEngGroup_Logo.png">
<category name="content" />
<parameters>
<parameter name="identifier" type="string" required="true" >
<option key="showValueInPlaceholder" value="true" />
</parameter>
<parameter name="type" type="enum" required="true" > ... </parameter>
<parameter name="probability" type="enum" required="true" > ... </parameter>
<parameter name="impact" type="enum" required="true" > ... </parameter>
<parameter name="status" type="enum" required="true" > ... </parameter>
<parameter name="history" type="string" />
</parameters>
</xhtml-macro>
すべてが機能しますが、探し出すのに苦労しているという副作用があります。前のコードでは、「問題」コメントで 2 行にラベルを付けました。何らかの理由で、JS 配列のプッシュ操作により、マクロ アイコンとタイトル (ページ編集ダイアログ内) が破損したままになります。アイコンはデフォルトのページのようなアイコンに戻り、タイトルには history パラメータの内容が含まれます。破損したマクロは次のようになります: 画像← 破損したマクロのアイコンとタイトル
push() 操作をコメント アウトすると、アイコンとタイトルは正しくなります (もちろん、履歴は修正されません)。マクロは次のようになります: image ← 正しい見た目のマクロ
デバッガーを使用して、マクロ メタデータがそのままであることを確認しました。(つまり、アイコン設定はまだ正しいファイルを指しており、タイトルは私が期待するものを示しています)。抜けているステップ、または設定していないフラグ (「フォームの何かを変更しました...」) があると確信していますが、ドキュメントはそれが何であるかです...</p>
問題があれば、Confluence 7.4.11 でこれらのマクロを作成しています。
コミュニティから何か考えはありますか?