{ "name": "File Manager", "icon": `folder`, "desc": "The GopalOS file manager. This application is usually included with GopalOS.", "id": "file-manager", "globalID": "GopalOS.System.FileManager", "defaultRelease": "stable", "releases": { "stable": { "version": "v4.2.1", "app-files": { "file-manager": { type: "pgm", content: function() { if (document.getElementById("app_file-manager_window")) { document.getElementById("app_file-manager_window").style.display = "block"; } else { document.getElementById("windows").insertAdjacentHTML("beforeend", getRef("/apps/file-manager/window")); getRef("/apps/file-manager/load")(); } focusWin(document.getElementById("app_file-manager_window")); regTbarIcon("/apps/file-manager/file-manager", "app_file-manager_window", getRef("/apps/file-manager/icon")); refreshWindows(); } }, "icon": { type: "var", content: `apps` }, "load": { type: "js", content: function() { document.getElementById("app_file-manager_content").innerHTML = ""; document.getElementById("app_file-manager_bar").value = getRef("/apps/file-manager/working-dir"); if (!getRef("/home/appdata/file-manager")) { createRef("/home/appdata/file-manager", "dir", {}); createRef("/home/appdata/file-manager/view", "var", "list"); } else {} for (let i of Object.keys(getRef(getRef("/apps/file-manager/working-dir"))).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()))) { if (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "dir") { document.getElementById("app_file-manager_content").insertAdjacentHTML("beforeend", `
${i}/${getRef("/home/appdata/file-manager/view") == "details" ? "Folder" : ""}
`); } else {} } for (let i of Object.keys(getRef(getRef("/apps/file-manager/working-dir"))).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()))) { if (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "dir") {} else { document.getElementById("app_file-manager_content").insertAdjacentHTML("beforeend", `
${i}.${getRef(getRef("/apps/file-manager/working-dir"))[i].type ? getRef(getRef("/apps/file-manager/working-dir"))[i].type : "file"}${getRef("/home/appdata/file-manager/view") == "details" ? "" + getType(getRef(getRef("/apps/file-manager/working-dir"))[i].type) + (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "var" ? ` (${getVarType(getRef(getRef("/apps/file-manager/working-dir"))[i].content)})` : "") + "" : ""}
`); } } if (Object.keys(getRef(getRef("/apps/file-manager/working-dir"))).length == 0) { document.getElementById("app_file-manager_content").insertAdjacentHTML("beforeend", `
(This folder is empty.)
`); } else {} if (getRef("/apps/file-manager/working-dir") == "/") {} else { document.getElementById("app_file-manager_content").insertAdjacentHTML("afterbegin", `
../${getRef("/home/appdata/file-manager/view") == "details" ? "Up one level" : ""}
`); } document.getElementById("app_file-manager_listview").classList.remove("popup-menu-item-selected"); document.getElementById("app_file-manager_detailsview").classList.remove("popup-menu-item-selected"); document.getElementById("app_file-manager_tileview").classList.remove("popup-menu-item-selected"); document.getElementById(`app_file-manager_${getRef("/home/appdata/file-manager/view")}view`).classList.add("popup-menu-item-selected"); createRef("/home/appdata/file-manager", "dir", { "view": { type: "var", content: "list" } }); } }, "window": { type: "html", content: `
File Manager
🗕
🗖
❌︎
Personal Files
🗎 Documents
🗎 Pictures
System & App Files
🗎 System Dir
🗎 App Data
` }, "handler": { type: "js", content: function(file, absolute = false) { /*console.group("Handled file"); console.info(file, absolute); console.info(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true)); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "var"); console.groupEnd();*/ if (getRef("/apps/file-manager/working-dir") == "/") { if (getRef(`/${file.replace(/\//, "")}`, true) && getRef(`/${file.replace(/\//, "")}`, true).type == "dir") { writeRef("/apps/file-manager/working-dir", `${getRef("/apps/file-manager/working-dir")}${file.replace(/\//, "")}`); getRef("/apps/file-manager/load")(); } else {} } else {} if (file == "/") { writeRef("/apps/file-manager/working-dir", "/"); getRef("/apps/file-manager/load")(); } else if (absolute == true && getRef(file, true) && getRef(file, true).type == "dir") { writeRef("/apps/file-manager/working-dir", file); getRef("/apps/file-manager/load")(); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "var") { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "json") { if (getRef("/apps/text-editor/text-editor")) { getRef("/apps/text-editor/open")(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); } else { msgbox(`Value:

${escapeHTML(JSON.stringify(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`), null, 2))}
`); } } else if (getRef("/system/text-filetypes").includes(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type)) { if (getRef("/apps/text-editor/text-editor")) { getRef("/apps/text-editor/open")(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); } else { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}
`); } } // TODO: can possibly remove below two cases else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "css") { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}
`); } else if (["js", "ajs"].includes(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type)) { if (getRef("/apps/text-editor/text-editor")) { getRef("/apps/text-editor/open")(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); } else { msgbox(`JavaScript content:

${escapeHTML(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`).toString())}
`); } } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "bin") { msgbox(`Value (hexadecimal):

${[...getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)].map(b => b.toString(16).padStart(2, "0").toUpperCase()).join(" ")}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "html") { if (getRef("/apps/text-editor/text-editor")) { getRef("/apps/text-editor/open")(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); } else { msgbox(`HTML code:

${escapeHTML(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`).toString())}
`); } } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "pgm") { getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)(); } else if (getRef("/apps/file-manager/working-dir") != "/") { if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "dir") { writeRef("/apps/file-manager/working-dir", `${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); getRef("/apps/file-manager/load")(); } else {} } /*if (!getRef("/apps/file-manager/supported-filetypes").includes(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type) && getRef("/apps/file-manager/working-dir") != "/") { msgbox("File type not supported
GopalOS cannot open this file.", "Error"); } else {}*/ document.getElementById("app_file-manager_bar").value = getRef("/apps/file-manager/working-dir"); } }, "parent-dir": { type: "js", content: function() { if (getRef("/apps/file-manager/working-dir").replace(/\/[^/]*$/, "") == "") { getRef("/apps/file-manager/handler")("/"); } else { getRef("/apps/file-manager/handler")(getRef("/apps/file-manager/working-dir").replace(/\/[^/]*$/, ""), true); } } }, "working-dir": { type: "var", content: "/" }, "supported-filetypes": { type: "var", content: [ "pgm", "js", "json", "txt", "var", "bin" ] }, "view": { type: "var", content: "list" }, "create-file": { type: "js", content: function() { let name = prompt("Enter file name and extension separated by a period (e.g. my-text-file.txt):\n\nWARNING: Do not use spaces, periods, or slashes. To prevent critical system errors, please stick to letters, numbers, hyphens, and underscores. It is recommended (but not required) that you use an all-lowercase name (however the extension MUST be lowercase)."); if (!name || name.trim() == "") {} else if (["apps", "home", "system"].includes(name)) {msgbox("ERROR: Reserved name.", "File Manager");} else { let nameArr = name.split("."); createRef(`${getRef("/apps/file-manager/working-dir")}/${nameArr[0]}`, nameArr[1]); getRef("/apps/file-manager/load")(); } } }, "create-folder": { type: "js", content: function() { let name = prompt("Enter folder name:\n\nWARNING: Do not use spaces, periods, or slashes. To prevent critical system errors, please stick to letters, numbers, hyphens, and underscores. It is recommended (but not required) that you use an all-lowercase name."); if (!name || name.trim() == "") {} else if (["apps", "home", "system"].includes(name)) {msgbox("ERROR: Reserved name.", "File Manager");} else { createRef(`${getRef("/apps/file-manager/working-dir")}/${name}`, "dir"); getRef("/apps/file-manager/load")(); } } } } }, "old (v4.1.4)": { "version": "v4.1.4", "notice": "This is an unsupported version and will be removed soon.", "app-files": { "file-manager": { type: "pgm", content: function() { if (document.getElementById("app_file-manager_window")) { document.getElementById("app_file-manager_window").style.display = "block"; } else { document.getElementById("windows").insertAdjacentHTML("beforeend", getRef("/apps/file-manager/window")); getRef("/apps/file-manager/load")(); } focusWin(document.getElementById("app_file-manager_window")); regTbarIcon("/apps/file-manager/file-manager", "app_file-manager_window", getRef("/apps/file-manager/icon")); refreshWindows(); } }, "icon": { type: "var", content: "\u{1F4C1}\uFE0E" }, "load": { type: "js", content: function() { document.getElementById("app_file-manager_content").innerHTML = ""; document.getElementById("app_file-manager_bar").value = getRef("/apps/file-manager/working-dir"); for (let i of Object.keys(getRef(getRef("/apps/file-manager/working-dir"))).sort()) { if (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "dir") { document.getElementById("app_file-manager_content").insertAdjacentHTML("beforeend", `
${i}.${getRef(getRef("/apps/file-manager/working-dir"))[i].type ? getRef(getRef("/apps/file-manager/working-dir"))[i].type : "file"}${getRef("/home/appdata/file-manager/view") == "details" ? "" + getType(getRef(getRef("/apps/file-manager/working-dir"))[i].type) + (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "var" ? ` (${getVarType(getRef(getRef("/apps/file-manager/working-dir"))[i].content)})` : "") + "" : ""}
`); } else {} } for (let i of Object.keys(getRef(getRef("/apps/file-manager/working-dir"))).sort()) { if (getRef(getRef("/apps/file-manager/working-dir"))[i].type == "dir") {} else { document.getElementById("app_file-manager_content").insertAdjacentHTML("beforeend", `
${i}.${getRef(getRef("/apps/file-manager/working-dir"))[i].type ? getRef(getRef("/apps/file-manager/working-dir"))[i].type : "file"}${getRef("/home/appdata/file-manager/view") == "details" ? "" + getType(getRef(getRef("/apps/file-manager/working-dir"))[i].type) + "" : ""}
`); } } if (getRef("/apps/file-manager/working-dir") == "/") {} else { document.getElementById("app_file-manager_content").insertAdjacentHTML("afterbegin", `
../${getRef("/home/appdata/file-manager/view") == "details" ? "Up one level" : ""}
`); } document.getElementById("app_file-manager_listview").classList.remove("popup-menu-item-selected"); document.getElementById("app_file-manager_detailsview").classList.remove("popup-menu-item-selected"); document.getElementById("app_file-manager_tileview").classList.remove("popup-menu-item-selected"); document.getElementById(`app_file-manager_${getRef("/home/appdata/file-manager/view")}view`).classList.add("popup-menu-item-selected"); createRef("/home/appdata/text-editor", "dir", { "options": { type: "json", content: { "allowPGMEditing": false } } }); } }, "window": { type: "html", content: `
File Manager
🗕
🗖
❌︎
Personal Files
🗎 Documents
🗎 Pictures
System & App Files
🗎 System Dir
🗎 App Data
` }, "handler": { type: "js", content: function(file, absolute = false) { /*console.group("Handled file"); console.info(file, absolute); console.info(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true)); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type); console.info(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "var"); console.groupEnd();*/ if (getRef("/apps/file-manager/working-dir") == "/") { if (getRef(`/${file.replace(/\//, "")}`, true) && getRef(`/${file.replace(/\//, "")}`, true).type == "dir") { writeRef("/apps/file-manager/working-dir", `${getRef("/apps/file-manager/working-dir")}${file.replace(/\//, "")}`); getRef("/apps/file-manager/load")(); } else {} } else {} if (file == "/") { writeRef("/apps/file-manager/working-dir", "/"); getRef("/apps/file-manager/load")(); } else if (absolute == true && getRef(file, true) && getRef(file, true).type == "dir") { writeRef("/apps/file-manager/working-dir", file); getRef("/apps/file-manager/load")(); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "var") { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "json") { msgbox(`Value:

${escapeHTML(JSON.stringify(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`), null, 2))}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "txt") { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "css") { msgbox(`Value:

${getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "js") { msgbox(`JavaScript content:

${escapeHTML(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`).toString())}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "html") { msgbox(`HTML code:

${escapeHTML(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`).toString())}
`); } else if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "pgm") { getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`)(); } else if (getRef("/apps/file-manager/working-dir") != "/") { if (getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true) && getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type == "dir") { writeRef("/apps/file-manager/working-dir", `${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`); getRef("/apps/file-manager/load")(); } else {} } /*if (!getRef("/apps/file-manager/supported-filetypes").includes(getRef(`${getRef("/apps/file-manager/working-dir")}/${file.replace(/\//, "")}`, true).type) && getRef("/apps/file-manager/working-dir") != "/") { msgbox("File type not supported
GopalOS cannot open this file.", "Error"); } else {}*/ document.getElementById("app_file-manager_bar").value = getRef("/apps/file-manager/working-dir"); } }, "parent-dir": { type: "js", content: function() { if (getRef("/apps/file-manager/working-dir").replace(/\/[^/]*$/, "") == "") { getRef("/apps/file-manager/handler")("/"); } else { getRef("/apps/file-manager/handler")(getRef("/apps/file-manager/working-dir").replace(/\/[^/]*$/, ""), true);/*TODO*/ } } }, "working-dir": { type: "var", content: "/" }, "supported-filetypes": { type: "var", content: [ "pgm", "js", "json", "txt", "var" ] }, "create-file": { type: "js", content: function() { let name = prompt("Enter file name and extension separated by a period (e.g. my-text-file.txt):\n\nWARNING: Do not use spaces, periods, or slashes. To prevent critical system errors, please stick to letters, numbers, hyphens, and underscores. It is HIGHLY RECOMMENDED (but not required) that you use an all-lowercase name (however the extension MUST be lowercase)."); if (!name || name.trim() == "") {} else if (["apps", "home", "system"].includes(name)) {msgbox("ERROR: Reserved name.", "File Manager");} else { let nameArr = name.split("."); createRef(`${getRef("/apps/file-manager/working-dir")}/${nameArr[0]}`, nameArr[1]); getRef("/apps/file-manager/load")(); } } }, "create-folder": { type: "js", content: function() { let name = prompt("Enter folder name:\n\nWARNING: Do not use spaces, periods, or slashes. To prevent critical system errors, please stick to letters, numbers, hyphens, and underscores. It is HIGHLY RECOMMENDED (but not required) that you use an all-lowercase name."); if (!name || name.trim() == "") {} else if (["apps", "home", "system"].includes(name)) {msgbox("ERROR: Reserved name.", "File Manager");} else { createRef(`${getRef("/apps/file-manager/working-dir")}/${name}`, "dir"); getRef("/apps/file-manager/load")(); } } } } } } }