blob: a8fc19be6b070a13ca9fcbdc70607ba80b924158 [file] [log] [blame]
/**
* Settings that each Autocomplete will be initialized on, depending on the trigger character used to activate the
* autocomplete.
*/
AJS.toInit(function ($) {
AJS.log("tinyMce-autocomplete-settings-macro initialising");
var dropdownSelectionMade = function(autoCompleteControl, options) {
autoCompleteControl.replaceWithSelectedSearchText();
autoCompleteControl.die();
tinymce.confluence.macrobrowser.macroBrowserToolbarButtonClicked(options);
};
var autoComplete = tinymce.confluence.Autocompleter,
makeMacroDropdownItem = function (summary) {
if (summary.hidden && !AJS.params.showHiddenUserMacros)
return null; // macros like {viewfile} hidden from the browser should be hidden from the dropdown
var item = {
className: "autocomplete-macro-" + summary.macroName,
callback: function(autoCompleteControl) {
dropdownSelectionMade(autoCompleteControl, {
ignoreEditorSelection: true, // the selected text will be the search term, ignore it
presetMacroMetadata: summary
});
}
};
if (summary.icon) {
item.name = summary.title;
item.href = "#";
item.icon = (summary.icon.relative ? AJS.params.staticResourceUrlPrefix : "") + summary.icon.location;
} else {
item.html = tinymce.confluence.Autocompleter.Util.dropdownLink(summary.title);
}
return item;
};
// Link settings.
tinymce.confluence.Autocompleter.Settings["{"] = {
ch : "{",
endChars : ["}", ":"],
dropDownClassName: "autocomplete-macros",
getHeaderText : function (autoCompleteControl, value) {
return "Macro suggestions";
},
getAdditionalLinks : function (autoCompleteControl, value) {
return [
{
className: "dropdown-insert-macro",
html: tinymce.confluence.Autocompleter.Util.dropdownLink(
"Open Macro Browser", "dropdown-prevent-highlight", "editor-icon"),
callback: function(autoCompleteControl) {
var searchText = autoCompleteControl.text();
dropdownSelectionMade(autoCompleteControl, { searchText: searchText });
}
}
];
},
getDataAndRunCallback : function(autoCompleteControl, val, callback) {
var dropdownItems = [];
if (!val) {
$("#rte-featured-macros div").each(function() {
var macroMetadata = AJS.MacroBrowser.getMacroMetadata($(this).text());
var dropdownItem = makeMacroDropdownItem(macroMetadata);
dropdownItem && dropdownItems.push(dropdownItem);
});
} else {
var summaries = AJS.MacroBrowser.searchSummaries(val, { keywordsField: "keywordsNoDesc" }),
itemCount;
for (var i = 0, ii = summaries.length; i < ii; i++) {
var dropdownItem = makeMacroDropdownItem(summaries[i]);
if (dropdownItem && dropdownItems.push(dropdownItem) == autoCompleteControl.maxResults)
break;
}
}
callback([dropdownItems], val);
},
update : function (autoCompleteControl, data) {
throw new Error("All items in the Macro Autocomplete dropdown must have a callback function");
}
}});