mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-26 14:32:52 -05:00
158 lines
4.1 KiB
JavaScript
158 lines
4.1 KiB
JavaScript
.pragma library
|
|
|
|
function getFileIcon(filename) {
|
|
var ext = filename.lastIndexOf(".") > 0 ? filename.substring(filename.lastIndexOf(".") + 1).toLowerCase() : "";
|
|
|
|
switch (ext) {
|
|
case "pdf":
|
|
return "picture_as_pdf";
|
|
case "doc":
|
|
case "docx":
|
|
case "odt":
|
|
return "description";
|
|
case "xls":
|
|
case "xlsx":
|
|
case "ods":
|
|
return "table_chart";
|
|
case "ppt":
|
|
case "pptx":
|
|
case "odp":
|
|
return "slideshow";
|
|
case "txt":
|
|
case "md":
|
|
case "rst":
|
|
return "article";
|
|
case "jpg":
|
|
case "jpeg":
|
|
case "png":
|
|
case "gif":
|
|
case "svg":
|
|
case "webp":
|
|
return "image";
|
|
case "mp3":
|
|
case "wav":
|
|
case "flac":
|
|
case "ogg":
|
|
return "audio_file";
|
|
case "mp4":
|
|
case "mkv":
|
|
case "avi":
|
|
case "webm":
|
|
return "video_file";
|
|
case "zip":
|
|
case "tar":
|
|
case "gz":
|
|
case "7z":
|
|
case "rar":
|
|
return "folder_zip";
|
|
case "js":
|
|
case "ts":
|
|
case "py":
|
|
case "rs":
|
|
case "go":
|
|
case "java":
|
|
case "c":
|
|
case "cpp":
|
|
case "h":
|
|
return "code";
|
|
case "html":
|
|
case "css":
|
|
case "htm":
|
|
return "web";
|
|
case "json":
|
|
case "xml":
|
|
case "yaml":
|
|
case "yml":
|
|
return "data_object";
|
|
case "sh":
|
|
case "bash":
|
|
case "zsh":
|
|
return "terminal";
|
|
default:
|
|
return "insert_drive_file";
|
|
}
|
|
}
|
|
|
|
function stripIconPrefix(iconName) {
|
|
if (!iconName)
|
|
return "extension";
|
|
if (iconName.startsWith("unicode:"))
|
|
return iconName.substring(8);
|
|
if (iconName.startsWith("material:"))
|
|
return iconName.substring(9);
|
|
if (iconName.startsWith("image:"))
|
|
return iconName.substring(6);
|
|
return iconName;
|
|
}
|
|
|
|
function detectIconType(iconName) {
|
|
if (!iconName)
|
|
return "material";
|
|
if (iconName.startsWith("unicode:"))
|
|
return "unicode";
|
|
if (iconName.startsWith("material:"))
|
|
return "material";
|
|
if (iconName.startsWith("image:"))
|
|
return "image";
|
|
if (iconName.indexOf("/") >= 0 || iconName.indexOf(".") >= 0)
|
|
return "image";
|
|
if (/^[a-z]+-[a-z]/.test(iconName.toLowerCase()))
|
|
return "image";
|
|
return "material";
|
|
}
|
|
|
|
function evaluateCalculator(query) {
|
|
if (!query || query.length === 0)
|
|
return null;
|
|
|
|
var mathExpr = query.replace(/[^0-9+\-*/().%\s^]/g, "");
|
|
if (mathExpr.length < 2)
|
|
return null;
|
|
|
|
var hasMath = /[+\-*/^%]/.test(query) && /\d/.test(query);
|
|
if (!hasMath)
|
|
return null;
|
|
|
|
try {
|
|
var sanitized = mathExpr.replace(/\^/g, "**");
|
|
var result = Function('"use strict"; return (' + sanitized + ')')();
|
|
|
|
if (typeof result === "number" && isFinite(result)) {
|
|
var displayResult = Number.isInteger(result) ? result.toString() : result.toFixed(6).replace(/\.?0+$/, "");
|
|
return {
|
|
expression: query,
|
|
result: result,
|
|
displayResult: displayResult
|
|
};
|
|
}
|
|
} catch (e) { }
|
|
|
|
return null;
|
|
}
|
|
|
|
function sortPluginIdsByOrder(pluginIds, order) {
|
|
if (!order || order.length === 0)
|
|
return pluginIds;
|
|
var orderMap = {};
|
|
for (var i = 0; i < order.length; i++)
|
|
orderMap[order[i]] = i;
|
|
return pluginIds.slice().sort(function (a, b) {
|
|
var aOrder = orderMap[a] !== undefined ? orderMap[a] : 9999;
|
|
var bOrder = orderMap[b] !== undefined ? orderMap[b] : 9999;
|
|
return aOrder - bOrder;
|
|
});
|
|
}
|
|
|
|
function sortPluginsOrdered(plugins, order) {
|
|
if (!order || order.length === 0)
|
|
return plugins;
|
|
var orderMap = {};
|
|
for (var i = 0; i < order.length; i++)
|
|
orderMap[order[i]] = i;
|
|
return plugins.sort(function (a, b) {
|
|
var aOrder = orderMap[a.id] !== undefined ? orderMap[a.id] : 9999;
|
|
var bOrder = orderMap[b.id] !== undefined ? orderMap[b.id] : 9999;
|
|
return aOrder - bOrder;
|
|
});
|
|
}
|