So, I've been trying to have one of the macro browser parameter fields work like a label picker. I'm at the point where it's functional; however, for the labels that were already saved in the macro when the remove 'x' is clicked, it not only removes the label but also opens a new page.
So, how do I do this correctly?
<?xml version="1.0" encoding="UTF-8"?> <module-container> <!-- add our i18n resource --> <resource type="i18n" name="faq" location="/com/keysight/include-content/i18n/faq"/> <web-resource key="faq-macro-browser-resources" name="Resources for the faq macro in the editor."> <resource type="download" name="faq-macro-browser.js" location="js/faq-macro-browser.js" /> <dependency>confluence.editor.actions:editor-macro-browser</dependency> <context>macro-browser</context> </web-resource> <xhtml-macro name="faq" key="faq" class="com.keysight.include.content.macros.Faq" icon="/download/resources/com.keysight.include-content:include-content-resources/images/keysight-logo-80x80.png"> <category name="confluence-content" /> <parameters> <parameter name="labels" type="string"/> <parameter name="spaceKeys" type="spacekey"/> <parameter name="page" type="confluence-content"/> <parameter name="renderStyle" default="Expand" type="enum"> <value name="Expand"/> <value name="Link"/> <value name="Popup"/> </parameter> <parameter name="renderContent" default="Page" type="enum"> <value name="First Excerpt"/> <value name="First Shared Block"/> <value name="Page"/> </parameter> <parameter name="popupTitle" type="string"/> <parameter name="andLabels" type="boolean"/> <parameter name="includeDecendants" type="boolean"/> <parameter name="includeSpace" type="boolean"/> <parameter name="includeLastModificationDate" type="boolean"/> <parameter name="includeLastModificationAuthor" type="boolean"/> <parameter name="includeLabels" type="boolean"/> <parameter name="includeLikes" type="boolean"/> </parameters> </xhtml-macro> </module-container>
(function($) { var FaqMacroConfig = function() {}; FaqMacroConfig.prototype.beforeParamsSet = function( params, inserting ){ var labels = params.labels.split(","); $("div.select2-container", $("#macro-param-div-labels")).auiSelect2("val", labels); return params; }; FaqMacroConfig.prototype.fields = { "string" : { "labels" : function(param, options) { options = options || {}; var paramDiv = $(Confluence.Templates.MacroBrowser.macroParameter()); var input = $("input", paramDiv); if (param.required) { input.keyup(MacroBrowser.processRequiredParameters); } input.auiSelect2(Confluence.UI.Components.LabelPicker.build({ separator: ",", })); return AJS.MacroBrowser.Field(paramDiv, input, options); } } }; AJS.MacroBrowser.Macros["faq"] = new FaqMacroConfig(); })(AJS.$);
What I have noticed is that without the FaqMacroConfig.prototype.beforeParamsSet call, the values saved into the macro content don't show up. I did try to bind an onclick method to the anchor for the values and disabled the default behavior and propagation; however, when clicked the anchor still opened a new tab.
OK, so I think I figured it out.
If you insert the known labels in FaqMacroConfig.prototype.beforeParamsSet, then when the MacroBrowser window is created it will bind a handler to the "a" tag instructing the browser to open a new window. If you insert the labels in FaqMacroConfig.prototype.beforeParamsRetrieved, then they are inserted after the "a" binding operation happens and the undesired behavior goes away.
(function($) { var FaqMacroConfig = function() {}; // this is used to insert the pre-defined values in the macro // into the auiSelect2 widget. FaqMacroConfig.prototype.beforeParamsRetrieved = function( params ){ if( params.labels != null ){ $("div.select2-container", $("#macro-param-div-labels")).auiSelect2("val", params.labels.split(",") ); } return params; }; FaqMacroConfig.prototype.fields = { "string" : { "labels" : function(param, options) { options = options || {}; var paramDiv = $(Confluence.Templates.MacroBrowser.macroParameter()); var input = $("input", paramDiv); if (param.required) { input.keyup(MacroBrowser.processRequiredParameters); } input.auiSelect2(Confluence.UI.Components.LabelPicker.build({ separator: ",", })); return AJS.MacroBrowser.Field(paramDiv, input, options); } } }; AJS.MacroBrowser.Macros["faq"] = new FaqMacroConfig(); })(AJS.$);
Omg @Scott Selberg you made my week, I have been facing the same situation and I was unable to find any workaround. I will update my post with your link.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.