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;
}