Add folder to folderaliases via context menu

This script can be used as context menu for folders in the file types dialog to add them directly as folder alias and does some extra logic.

@script jscript
var UseFolderNameAsDefaultAliasName = true;
function OnClick(clickData)
{	
	var source = clickData.func.sourcetab.selected_dirs(0);
	if(!source)
		return;

	var dlg = clickData.func.Dlg;
	var existingAlias = AliasPathExists(source);
	if(existingAlias)
	{
		var result = ShowDialog(dlg, "Alias already exists", "Alias for '" + source + "' exists already as '" + existingAlias + "'", "Add either way|Cancel", "information");
		if(result == "Cancel")
			return;
	}

	var aliasName = "";
	var canContinue = false;
	do
	{
		aliasName = dlg.GetString("Enter alias name for '" + source + "'", GetDefaultAliasName(source), 256, "OK|Cancel", "Enter alias name");
		if(dlg.result == 0)
			return;

		var existingAlias = AliasNameExists(aliasName);
		if(existingAlias)
		{
			if(existingAlias.system)
			{
				ShowDialog(dlg, "Alias already exits", "Alias name '" + aliasName + "' is a system alias and thus cannot be overwritten", "OK", "error");
				return;
			}
			else
			{
				var result = ShowDialog(dlg, "Alias already exits", "Alias name '" + aliasName + "' is already taken", "Overwrite|Change alias name|Cancel", "warning");
				if(result == "Overwrite")
				{
					canContinue = true;
					DOpus.aliases.Delete(aliasName);
				}
				else if(result == "Change alias name")
					canContinue = false;
	
				return;
			}
		}
		else
			canContinue = true;
			
	}
	while(!canContinue);

	DOpus.aliases.Add(aliasName, source);
}

function ShowDialog(dlg, title, msg, buttons, icon)
{
	dlg.title = title || "";
	dlg.message = msg || "";
    dlg.buttons = buttons || "OK";
	dlg.icon = icon || "";

	var result = dlg.Show();
	var buttonValues = buttons.split('|');
	if(buttonValues.length > 1)
		return buttonValues[(result + 1) % buttonValues.length];
	
	return buttons;
}

function AliasPathExists(path)
{
	for (var aliasEnum = new Enumerator(DOpus.aliases); !aliasEnum.atEnd(); aliasEnum.moveNext())
	{
		var alias = aliasEnum.item();
		if(String(alias.path) == String(path))
			return alias;
	}
	return null;
}

function GetDefaultAliasName(path)
{
	if(!UseFolderNameAsDefaultAliasName)
		return "";

	return DOpus.FSUtil.GetItem(path).name;
}

function AliasNameExists(name)
{
	name = String(name).toLowerCase();
	for (var aliasEnum = new Enumerator(DOpus.aliases); !aliasEnum.atEnd(); aliasEnum.moveNext())
	{
		var alias = aliasEnum.item();
		if(String(alias).toLowerCase() == name)
			return alias;
	}
	return null;
}

5 Likes