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.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.