blob: 4ce116f1cb47048722821ee87c620cd30e7fc4ef [file] [log] [blame]
if(!AJS.MacroBrowser.Macros["gadget"]){
AJS.MacroBrowser.Macros["gadget"] = {};
}
AJS.MacroBrowser.Macros["gadget"].postPreview = function (iframe, macro) {
var hasAJS = iframe.contentWindow.AJS;
var bodyParamMap = {};
var keyValuePairs = AJS.$("#macro-insert-container .macro-body-div textarea").val().split("&");
for (var i = 0; i < keyValuePairs.length; i++) {
var keyValue = keyValuePairs[i].split("=");
try {
bodyParamMap[decodeURI(keyValue[0])] = decodeURI(keyValue[1]);
} catch(e) {
//Do nothing, just skip it. It's not essential that we capture all preferences, and not all are valid
//to be decoded as a URI
}
}
if (macro.needsConfig && hasAJS) {
var bodyConfigured = !!bodyParamMap["isConfigured"];
if (!bodyConfigured) {
var okButton = AJS.$("#macro-browser-dialog .dialog-button-panel .ok");
AJS.$("#save-warning-span").addClass("gadget-not-configured-warning").text(AJS.params.gadgetPreviewWarning).removeClass("hidden");
okButton.attr("disabled", "disabled");
}
}
};
AJS.MacroBrowser.Macros["gadget"].populateBodyParams = function(body) {
var bodyParamMap = {};
var keyValuePairs = AJS.$("textarea", body).val().split("&");
for (var i = 0; i < keyValuePairs.length; i++) {
var keyValue = keyValuePairs[i].split("=");
bodyParamMap[decodeURI(keyValue[0])] = decodeURI(keyValue[1]);
}
return bodyParamMap;
};
AJS.MacroBrowser.Macros["gadget"].prepareMacroForPreview = function(wikiMarkup) {
var posOfBrace = wikiMarkup.indexOf('}');
return wikiMarkup.substring(0, posOfBrace) + "|forceWrite=true" + wikiMarkup.substring(posOfBrace, wikiMarkup.length);
};
AJS.MacroBrowser.Macros["gadget"].manipulateMarkup = function (macro) {
if(AJS.MacroBrowser.gadgetPrefsChanged){
var container = top.document.getElementById("macro-insert-container");
var textArea = AJS.$(".macro-body-div .textarea", container);
var baseVal = "";
for (var key in AJS.MacroBrowser.gadgetPrefs)
{
if (baseVal.length != 0)
{
baseVal += "&";
}
baseVal = baseVal + encodeURI(key) + "=" + encodeURI(AJS.MacroBrowser.gadgetPrefs[key]);
}
textArea.val(baseVal);
}
};
//Adds special behaviour for "gadget" macros : only considered the same if they share the same url as the selected macro
AJS.MacroBrowser.Macros["gadget"].getMacroDetailsFromSelectedMacro = function(metadataList, selectedMacroToUse) {
var selectedUrl = selectedMacroToUse.params["url"];
for (var i = 0; i < metadataList.length; i++) {
var tempMacro = metadataList[i];
if (tempMacro.macroName == selectedMacroToUse.name) {
for (var j = 0; j < tempMacro.formDetails.parameters.length; j++) {
if (tempMacro.formDetails.parameters[j].name == "url") {
if (tempMacro.formDetails.parameters[j].defaultValue == selectedUrl) {
return tempMacro;
}
}
}
}
}
};
//Add special handling to intepret and merge existing body params for opensocial preference gadgets
AJS.MacroBrowser.Macros["gadget"].applySpecialBodyHandling = function(macro, previousBodyMarkup, bodyParamMap) {
var result="";
if (macro.nonHiddenUserPrefs) {
var first = true;
//reparse the possible existing key value pairs
var userPreferenceMap = {};
if (previousBodyMarkup) {
var keyValuePairs = previousBodyMarkup.split("&");
for (var i = 0; i < keyValuePairs.length; i++) {
var keyValue = keyValuePairs[i].split("=");
var userPrefKey = decodeURI(keyValue[0]);
var userPrefValue = decodeURI(keyValue[1]);
userPreferenceMap[userPrefKey] = userPrefValue;
}
}
//New values take precedence over existing values
for (var param1 in bodyParamMap) {
userPreferenceMap[param1] = bodyParamMap[param1];
}
var isDefaultValue = function (macro, name, value)
{
var params = macro.formDetails.parameters;
for (var i = 0; i < params.length; i++)
{
if (params[i].name == name)
{
return value == params[i].defaultValue;
}
}
//Not necessarily bad ... could be a param we don't have metadata for
AJS.log("Unable to find matching param for " + name);
return false;
};
for (var param in userPreferenceMap) {
if (!isDefaultValue(macro, param, userPreferenceMap[param]))
{
if (!first)
{
result += "&";
}
first = false;
result = result + encodeURI(param) + "=" + encodeURI(userPreferenceMap[param]);
}
}
return result;
}
else
{
return previousBodyMarkup;
}
};