1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-06-08 12:13:31 -04:00
Files
DankMaterialShell/quickshell/Modals/DankLauncherV2/ItemTransformers.js
T

293 lines
8.4 KiB
JavaScript

.pragma library
.import "ControllerUtils.js" as Utils
function transformApp(app, override, defaultActions, primaryActionLabel) {
var appId = app.id || app.execString || app.exec || "";
var actions = [];
if (app.actions && app.actions.length > 0) {
for (var i = 0; i < app.actions.length; i++) {
actions.push({
name: app.actions[i].name,
icon: "play_arrow",
actionData: app.actions[i]
});
}
}
return {
id: appId,
type: "app",
name: override?.name || app.name || "",
subtitle: override?.comment || app.comment || "",
icon: override?.icon || app.icon || "application-x-executable",
iconType: "image",
section: "apps",
data: app,
keywords: app.keywords || [],
actions: actions,
source: Utils.classifyAppSource(app),
primaryAction: {
name: primaryActionLabel,
icon: "open_in_new",
action: "launch"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: undefined
};
}
function transformCoreApp(app, openLabel) {
var iconName = "apps";
var iconType = "material";
if (app.icon) {
if (app.icon.startsWith("svg+corner:")) {
iconType = "composite";
} else if (app.icon.startsWith("material:")) {
iconName = app.icon.substring(9);
} else {
iconName = app.icon;
iconType = "image";
}
}
return {
id: app.builtInPluginId || app.action || "",
type: "app",
name: app.name || "",
subtitle: app.comment || "",
icon: iconName,
iconType: iconType,
iconFull: app.icon,
section: "apps",
data: app,
isCore: true,
actions: [],
primaryAction: {
name: openLabel,
icon: "open_in_new",
action: "launch"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: undefined
};
}
function transformBuiltInLauncherItem(item, pluginId, openLabel) {
var rawIcon = item.icon || "extension";
var icon = Utils.stripIconPrefix(rawIcon);
var iconType = item.iconType;
if (!iconType) {
if (rawIcon.startsWith("material:"))
iconType = "material";
else if (rawIcon.startsWith("unicode:"))
iconType = "unicode";
else
iconType = "image";
}
return {
id: item.action || "",
type: item.type || "plugin",
name: item.name || "",
subtitle: item.comment || "",
icon: icon,
iconType: iconType,
section: item.section || ("plugin_" + pluginId),
data: item.data || item,
pluginId: pluginId,
isBuiltInLauncher: true,
keywords: item.keywords || [],
actions: [],
source: item.source || "",
badgeLabel: item.badgeLabel || "",
primaryAction: {
name: openLabel,
icon: "open_in_new",
action: "execute"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: item._preScored
};
}
function transformClipboardItem(entry, copyLabel, pasteLabel, primaryLabel, imageLabel, textLabel, pinnedLabel, pasteHintLabel, copyHintLabel, clipboardLabel) {
var preview = (entry.preview || "").toString().replace(/\s+/g, " ").trim();
var isImage = entry.isImage || false;
var title = preview.length > 0 ? preview : imageLabel;
if (title.length > 140)
title = title.substring(0, 137) + "...";
var typeLabel = isImage ? imageLabel : textLabel;
var subtitle = typeLabel;
if (entry.pinned)
subtitle = pinnedLabel + " - " + subtitle;
if (pasteHintLabel)
subtitle += " - " + pasteHintLabel;
if (copyHintLabel)
subtitle += " - " + copyHintLabel;
return {
id: "clipboard_" + (entry.id || entry.hash || title),
type: "clipboard",
name: title,
subtitle: subtitle,
icon: isImage ? "image" : "content_paste",
iconType: "material",
section: "clipboard",
data: entry,
keywords: [preview, isImage ? "image" : "text", "clipboard"],
actions: [
{
name: copyLabel,
icon: "content_copy",
action: "clipboard_copy"
},
{
name: pasteLabel,
icon: "content_paste",
action: "clipboard_paste"
}
],
source: clipboardLabel,
badgeLabel: clipboardLabel,
primaryAction: {
name: primaryLabel,
icon: primaryLabel === pasteLabel ? "content_paste" : "content_copy",
action: primaryLabel === pasteLabel ? "clipboard_paste" : "clipboard_copy"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: entry._preScored
};
}
function transformFileResult(file, openLabel, openFolderLabel, copyPathLabel, openTerminalLabel) {
var filename = file.path ? file.path.split("/").pop() : "";
var dirname = file.path ? file.path.substring(0, file.path.lastIndexOf("/")) : "";
var isDir = file.is_dir || false;
var actions = [];
if (isDir) {
if (openTerminalLabel) {
actions.push({
name: openTerminalLabel,
icon: "terminal",
action: "open_terminal"
});
}
} else {
actions.push({
name: openFolderLabel,
icon: "folder_open",
action: "open_folder"
});
}
actions.push({
name: copyPathLabel,
icon: "content_copy",
action: "copy_path"
});
return {
id: file.path || "",
type: "file",
name: filename,
subtitle: dirname,
icon: isDir ? "folder" : Utils.getFileIcon(filename),
iconType: "material",
section: "files",
data: file,
actions: actions,
primaryAction: {
name: openLabel,
icon: "open_in_new",
action: "open"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: undefined
};
}
function transformPluginItem(item, pluginId, selectLabel) {
var rawIcon = item.icon || "extension";
var icon = Utils.stripIconPrefix(rawIcon);
var iconType = item.iconType;
if (!iconType) {
if (rawIcon.startsWith("material:"))
iconType = "material";
else if (rawIcon.startsWith("unicode:"))
iconType = "unicode";
else
iconType = "image";
}
return {
id: item.id || item.name || "",
type: "plugin",
name: item.name || "",
subtitle: item.comment || item.description || "",
icon: icon,
iconType: iconType,
section: "plugin_" + pluginId,
data: item,
pluginId: pluginId,
keywords: item.keywords || [],
actions: item.actions || [],
primaryAction: item.primaryAction || {
name: selectLabel,
icon: "check",
action: "execute"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: item._preScored
};
}
function createPluginBrowseItem(pluginId, plugin, trigger, isBuiltIn, isAllowed, browseLabel, triggerLabel, noTriggerLabel) {
var rawIcon = isBuiltIn ? (plugin.cornerIcon || "extension") : (plugin.icon || "extension");
return {
id: "browse_" + pluginId,
type: "plugin_browse",
name: plugin.name || pluginId,
subtitle: trigger ? triggerLabel.replace("%1", trigger) : noTriggerLabel,
icon: isBuiltIn ? rawIcon : Utils.stripIconPrefix(rawIcon),
iconType: isBuiltIn ? "material" : Utils.detectIconType(rawIcon),
section: "browse_plugins",
data: {
pluginId: pluginId,
plugin: plugin,
isBuiltIn: isBuiltIn
},
actions: [
{
name: "All",
icon: isAllowed ? "visibility" : "visibility_off",
action: "toggle_all_visibility"
}
],
primaryAction: {
name: browseLabel,
icon: "arrow_forward",
action: "browse_plugin"
},
_hName: "",
_hSub: "",
_hRich: false,
_preScored: undefined
};
}