Hi all, I’m noticing a strange behavior when using my macro on a Confluence Server.
The macro browser of my macro is supposed to have a textarea
that allows multiple lines of input, as such:
It behaves correctly only when there is another instance of the same macro already in the page.
However, whenever I insert the macro into a Confluence page where there is no instance of this macro, the textarea
becomes an input
, as such:
Macro browser override:
(function($) {
var MermaidMacro = function(){
};
var originalCode;
MermaidMacro.prototype.fields = {
"string" : function(param, options){
if(param.name == "Code"){
var paramDiv = AJS.$(Confluence.Templates.MacroBrowser.macroParameter());
var input = AJS.$("macro-param-div-Code", paramDiv);
var textArea = document.createElement("textarea");
textArea.style.resize = "none";
textArea.style.overflow = "scroll";
textArea.style.whiteSpace = "nowrap";
textArea.setAttribute("rows", "12");
textArea.setAttribute("cols", "29");
textArea.setAttribute("id", "macro-param-Code");
textArea.setAttribute("class", "macro-param-input");
var label = document.createElement("label");
label.innerHTML = "Code";
label.setAttribute("for", "macro-param-Code");
paramDiv.empty();
paramDiv.append(label);
paramDiv.append(textArea);
return AJS.MacroBrowser.Field(paramDiv, input, options);
}
}
}
MermaidMacro.prototype.beforeParamsSet = function(selectedParams, macroSelected){
originalCode = selectedParams.code;
$("#macro-param-Code").val(originalCode);
console.log("Orignal Code : " + originalCode);
return selectedParams;
};
MermaidMacro.prototype.beforeParamsRetrieved = function(params){
params.code = $("#macro-param-Code").val();
console.log("params.code : " + params.code);
return params;
};
AJS.toInit(function(){
AJS.bind("init.rte", function(){
AJS.MacroBrowser.setMacroJsOverride('mermaid-macro', new MermaidMacro());
})
})
})(AJS.$);
What’s going on?