diff --git a/src/IPC.js b/src/IPC.js
index e4145b03eb..c17f8c31b1 100644
--- a/src/IPC.js
+++ b/src/IPC.js
@@ -30,6 +30,7 @@ import path from "./lib/path.js";
import UIContextMenu from './UI/UIContextMenu.js';
import update_mouse_position from './helpers/update_mouse_position.js';
import launch_app from './helpers/launch_app.js';
+import item_icon from './helpers/item_icon.js';
/**
* In Puter, apps are loaded in iframes and communicate with the graphical user interface (GUI), and each other, using the postMessage API.
@@ -1063,7 +1064,7 @@ window.addEventListener('message', async (event) => {
immutable: res.immutable,
associated_app_name: res.associated_app?.name,
path: target_path,
- icon: await window.item_icon(res),
+ icon: await item_icon(res),
name: path.basename(target_path),
uid: res.uid,
size: res.size,
diff --git a/src/UI/UIDesktop.js b/src/UI/UIDesktop.js
index 5740b49e9b..2a46a05244 100644
--- a/src/UI/UIDesktop.js
+++ b/src/UI/UIDesktop.js
@@ -39,6 +39,7 @@ import UIWindowTaskManager from "./UIWindowTaskManager.js"
import truncate_filename from '../helpers/truncate_filename.js';
import UINotification from "./UINotification.js"
import launch_app from "../helpers/launch_app.js"
+import item_icon from "../helpers/item_icon.js"
async function UIDesktop(options){
let h = '';
@@ -135,7 +136,7 @@ async function UIDesktop(options){
UIWindow({
path: '/' + notification.fields.username,
title: path.basename(item_path),
- icon: await window.item_icon({is_dir: true, path: item_path}),
+ icon: await item_icon({is_dir: true, path: item_path}),
is_dir: true,
app: 'explorer',
});
@@ -217,7 +218,7 @@ async function UIDesktop(options){
$(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(truncate_filename(item.name)).replaceAll(' ', ' '));
// Set new icon
- const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.item_icon(item)).image);
+ const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image);
$(`.item[data-uid='${item.uid}']`).find('.item-icon-thumb').attr('src', new_icon);
$(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon);
@@ -338,7 +339,7 @@ async function UIDesktop(options){
immutable: fsentry.immutable,
uid: fsentry.uid,
path: fsentry.path,
- icon: await window.item_icon(fsentry),
+ icon: await item_icon(fsentry),
name: (dest_path === window.trash_path) ? metadata.original_name : fsentry.name,
is_dir: fsentry.is_dir,
size: fsentry.size,
@@ -366,7 +367,7 @@ async function UIDesktop(options){
immutable: false,
uid: dir.uid,
path: dir.path,
- icon: await window.item_icon(dir),
+ icon: await item_icon(dir),
name: dir.name,
size: dir.size,
type: dir.type,
@@ -421,7 +422,7 @@ async function UIDesktop(options){
$(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(truncate_filename(item.name)).replaceAll(' ', ' '));
// Set new icon
- const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.item_icon(item)).image);
+ const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image);
$(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon);
// Set new data-name
@@ -498,7 +499,7 @@ async function UIDesktop(options){
'data-type': item.type,
})
// set new icon
- const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.item_icon(item)).image);
+ const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image);
$(`.item[data-uid="${item.overwritten_uid}"]`).find('.item-icon > img').attr('src', new_icon);
//sort each window
@@ -513,7 +514,7 @@ async function UIDesktop(options){
immutable: item.immutable,
associated_app_name: item.associated_app?.name,
path: item.path,
- icon: await window.item_icon(item),
+ icon: await item_icon(item),
name: item.name,
size: item.size,
type: item.type,
@@ -1007,7 +1008,7 @@ async function UIDesktop(options){
UIWindow({
path: predefined_path,
title: path.basename(predefined_path),
- icon: await window.item_icon({is_dir: true, path: predefined_path}),
+ icon: await item_icon({is_dir: true, path: predefined_path}),
// todo
// uid: $(el_item).attr('data-uid'),
is_dir: true,
diff --git a/src/UI/UIWindow.js b/src/UI/UIWindow.js
index d836253113..1f23f12218 100644
--- a/src/UI/UIWindow.js
+++ b/src/UI/UIWindow.js
@@ -30,6 +30,7 @@ import UIWindowSaveAccount from './UIWindowSaveAccount.js';
import UIWindowEmailConfirmationRequired from './UIWindowEmailConfirmationRequired.js';
import launch_app from "../helpers/launch_app.js"
import UIWindowShare from './UIWindowShare.js';
+import item_icon from '../helpers/item_icon.js';
const el_body = document.getElementsByTagName('body')[0];
@@ -2343,7 +2344,7 @@ $(document).on('click', '.window-sidebar-item', async function(e){
UIWindow({
path: item_path,
title: path.basename(item_path),
- icon: await window.item_icon({is_dir: true, path: item_path}),
+ icon: await item_icon({is_dir: true, path: item_path}),
// todo
// uid: $(el_item).attr('data-uid'),
is_dir: true,
@@ -2405,7 +2406,7 @@ $(document).on('contextmenu taphold', '.window-sidebar-item', function(event){
UIWindow({
path: item_path,
title: path.basename(item_path),
- icon: await window.item_icon({is_dir: true, path: item_path}),
+ icon: await item_icon({is_dir: true, path: item_path}),
// todo
// uid: $(el_item).attr('data-uid'),
is_dir: true,
diff --git a/src/helpers.js b/src/helpers.js
index 7885a4a0f9..20de9f606e 100644
--- a/src/helpers.js
+++ b/src/helpers.js
@@ -18,18 +18,17 @@
*/
import path from "./lib/path.js"
-import mime from "./lib/mime.js";
import UIAlert from './UI/UIAlert.js'
import UIItem from './UI/UIItem.js'
import UIWindowLogin from './UI/UIWindowLogin.js';
import UIWindowSaveAccount from './UI/UIWindowSaveAccount.js';
import update_username_in_gui from './helpers/update_username_in_gui.js';
import update_title_based_on_uploads from './helpers/update_title_based_on_uploads.js';
-import content_type_to_icon from './helpers/content_type_to_icon.js';
import truncate_filename from './helpers/truncate_filename.js';
import UIWindowProgress from './UI/UIWindowProgress.js';
import globToRegExp from "./helpers/globToRegExp.js";
import get_html_element_from_options from "./helpers/get_html_element_from_options.js";
+import item_icon from "./helpers/item_icon.js";
window.is_auth = ()=>{
if(localStorage.getItem("auth_token") === null || window.auth_token === null)
@@ -624,187 +623,6 @@ window.sendItemChangeEventToWatchingApps = function(item_uid, event_data){
}
}
-/**
- * Assigns an icon to a filesystem entry based on its properties such as name, type,
- * and whether it's a directory, app, trashed, or specific file type.
- *
- * @function item_icon
- * @global
- * @async
- * @param {Object} fsentry - A filesystem entry object. It may contain various properties
- * like name, type, path, associated_app, thumbnail, is_dir, and metadata, depending on
- * the type of filesystem entry.
- */
-
-window.item_icon = async (fsentry)=>{
- // --------------------------------------------------
- // If this file is Trashed then set the name to the original name of the file before it was trashed
- // --------------------------------------------------
- if(fsentry.path?.startsWith(window.trash_path + '/')){
- if(fsentry.metadata){
- try{
- let metadata = JSON.parse(fsentry.metadata);
- fsentry.name = (metadata && metadata.original_name) ? metadata.original_name : fsentry.name
- }
- catch(e){
- // Ignored
- }
- }
- }
- // --------------------------------------------------
- // thumbnail
- // --------------------------------------------------
- if(fsentry.thumbnail){
- return {image: fsentry.thumbnail, type: 'thumb'};
- }
- // --------------------------------------------------
- // app icon
- // --------------------------------------------------
- else if(fsentry.associated_app && fsentry.associated_app?.name){
- if(fsentry.associated_app.icon)
- return {image: fsentry.associated_app.icon, type: 'icon'};
- else
- return {image: window.icons['app.svg'], type: 'icon'};
- }
- // --------------------------------------------------
- // Trash
- // --------------------------------------------------
- else if(fsentry.shortcut_to_path && fsentry.shortcut_to_path === window.trash_path){
- // get trash image, this is needed to get the correct empty vs full trash icon
- let trash_img = $(`.item[data-path="${html_encode(window.trash_path)}" i] .item-icon-icon`).attr('src')
- // if trash_img is undefined that's probably because trash wasn't added anywhere, do a direct lookup to see if trash is empty or no
- if(!trash_img){
- let trashstat = await puter.fs.stat(window.trash_path);
- if(trashstat.is_empty !== undefined && trashstat.is_empty === true)
- trash_img = window.icons['trash.svg'];
- else
- trash_img = window.icons['trash-full.svg'];
- }
- return {image: trash_img, type: 'icon'};
- }
- // --------------------------------------------------
- // Directories
- // --------------------------------------------------
- else if(fsentry.is_dir){
- // System Directories
- if(fsentry.path === window.docs_path)
- return {image: window.icons['folder-documents.svg'], type: 'icon'};
- else if (fsentry.path === window.pictures_path)
- return { image: window.icons['folder-pictures.svg'], type: 'icon' };
- else if (fsentry.path === window.home_path)
- return { image: window.icons['folder-home.svg'], type: 'icon' };
- else if (fsentry.path === window.videos_path)
- return { image: window.icons['folder-videos.svg'], type: 'icon' };
- else if (fsentry.path === window.desktop_path)
- return { image: window.icons['folder-desktop.svg'], type: 'icon' };
- else if (fsentry.path === window.public_path)
- return { image: window.icons['folder-public.svg'], type: 'icon' };
- // regular directories
- else
- return {image: window.icons['folder.svg'], type: 'icon'};
- }
- // --------------------------------------------------
- // Match icon by file extension
- // --------------------------------------------------
- // *.doc
- else if(fsentry.name.toLowerCase().endsWith('.doc')){
- return {image: window.icons['file-doc.svg'], type: 'icon'};
- }
- // *.docx
- else if(fsentry.name.toLowerCase().endsWith('.docx')){
- return {image: window.icons['file-docx.svg'], type: 'icon'};
- }
- // *.exe
- else if(fsentry.name.toLowerCase().endsWith('.exe')){
- return {image: window.icons['file-exe.svg'], type: 'icon'};
- }
- // *.gz
- else if(fsentry.name.toLowerCase().endsWith('.gz')){
- return {image: window.icons['file-gzip.svg'], type: 'icon'};
- }
- // *.jar
- else if(fsentry.name.toLowerCase().endsWith('.jar')){
- return {image: window.icons['file-jar.svg'], type: 'icon'};
- }
- // *.java
- else if(fsentry.name.toLowerCase().endsWith('.java')){
- return {image: window.icons['file-java.svg'], type: 'icon'};
- }
- // *.jsp
- else if(fsentry.name.toLowerCase().endsWith('.jsp')){
- return {image: window.icons['file-jsp.svg'], type: 'icon'};
- }
- // *.log
- else if(fsentry.name.toLowerCase().endsWith('.log')){
- return {image: window.icons['file-log.svg'], type: 'icon'};
- }
- // *.mp3
- else if(fsentry.name.toLowerCase().endsWith('.mp3')){
- return {image: window.icons['file-mp3.svg'], type: 'icon'};
- }
- // *.rb
- else if(fsentry.name.toLowerCase().endsWith('.rb')){
- return {image: window.icons['file-ruby.svg'], type: 'icon'};
- }
- // *.rss
- else if(fsentry.name.toLowerCase().endsWith('.rss')){
- return {image: window.icons['file-rss.svg'], type: 'icon'};
- }
- // *.rtf
- else if(fsentry.name.toLowerCase().endsWith('.rtf')){
- return {image: window.icons['file-rtf.svg'], type: 'icon'};
- }
- // *.sketch
- else if(fsentry.name.toLowerCase().endsWith('.sketch')){
- return {image: window.icons['file-sketch.svg'], type: 'icon'};
- }
- // *.sql
- else if(fsentry.name.toLowerCase().endsWith('.sql')){
- return {image: window.icons['file-sql.svg'], type: 'icon'};
- }
- // *.tif
- else if(fsentry.name.toLowerCase().endsWith('.tif')){
- return {image: window.icons['file-tif.svg'], type: 'icon'};
- }
- // *.tiff
- else if(fsentry.name.toLowerCase().endsWith('.tiff')){
- return {image: window.icons['file-tiff.svg'], type: 'icon'};
- }
- // *.wav
- else if(fsentry.name.toLowerCase().endsWith('.wav')){
- return {image: window.icons['file-wav.svg'], type: 'icon'};
- }
- // *.cpp
- else if(fsentry.name.toLowerCase().endsWith('.cpp')){
- return {image: window.icons['file-cpp.svg'], type: 'icon'};
- }
- // *.pptx
- else if(fsentry.name.toLowerCase().endsWith('.pptx')){
- return {image: window.icons['file-pptx.svg'], type: 'icon'};
- }
- // *.psd
- else if(fsentry.name.toLowerCase().endsWith('.psd')){
- return {image: window.icons['file-psd.svg'], type: 'icon'};
- }
- // *.py
- else if(fsentry.name.toLowerCase().endsWith('.py')){
- return {image: window.icons['file-py.svg'], type: 'icon'};
- }
- // *.xlsx
- else if(fsentry.name.toLowerCase().endsWith('.xlsx')){
- return {image: window.icons['file-xlsx.svg'], type: 'icon'};
- }
- // --------------------------------------------------
- // Determine icon by set or derived mime type
- // --------------------------------------------------
- else if(fsentry.type){
- return {image: content_type_to_icon(fsentry.type), type: 'icon'};
- }
- else{
- return {image: content_type_to_icon(mime.getType(fsentry.name)), type: 'icon'};
- }
-}
-
/**
* Asynchronously checks if a save account notice should be shown to the user, and if needed, displays the notice.
*
@@ -1605,7 +1423,7 @@ window.move_items = async function(el_items, dest_path, is_undo = false){
associated_app_name: fsentry.associated_app?.name,
uid: fsentry.uid,
path: fsentry.path,
- icon: await window.item_icon(fsentry),
+ icon: await item_icon(fsentry),
name: (dest_path === window.trash_path) ? $(el_item).attr('data-name') : fsentry.name,
is_dir: fsentry.is_dir,
size: fsentry.size,
@@ -1634,7 +1452,7 @@ window.move_items = async function(el_items, dest_path, is_undo = false){
immutable: false,
uid: dir.uid,
path: dir.path,
- icon: await window.item_icon(dir),
+ icon: await item_icon(dir),
name: dir.name,
size: dir.size,
type: dir.type,
@@ -2277,7 +2095,7 @@ window.rename_file = async(options, new_name, old_name, old_path, el_item, el_it
$(el_item_name_editor).hide();
// Set new icon
- const new_icon = (options.is_dir ? window.icons['folder.svg'] : (await window.item_icon(fsentry)).image);
+ const new_icon = (options.is_dir ? window.icons['folder.svg'] : (await item_icon(fsentry)).image);
$(el_item_icon).find('.item-icon-icon').attr('src', new_icon);
// Set new `data-name`
diff --git a/src/helpers/item_icon.js b/src/helpers/item_icon.js
new file mode 100644
index 0000000000..f17ea7893b
--- /dev/null
+++ b/src/helpers/item_icon.js
@@ -0,0 +1,204 @@
+/**
+ * Copyright (C) 2024 Puter Technologies Inc.
+ *
+ * This file is part of Puter.
+ *
+ * Puter is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import mime from "../lib/mime.js";
+import content_type_to_icon from './content_type_to_icon.js';
+
+/**
+ * Assigns an icon to a filesystem entry based on its properties such as name, type,
+ * and whether it's a directory, app, trashed, or specific file type.
+ *
+ * @function item_icon
+ * @global
+ * @async
+ * @param {Object} fsentry - A filesystem entry object. It may contain various properties
+ * like name, type, path, associated_app, thumbnail, is_dir, and metadata, depending on
+ * the type of filesystem entry.
+ */
+
+const item_icon = async (fsentry)=>{
+ // --------------------------------------------------
+ // If this file is Trashed then set the name to the original name of the file before it was trashed
+ // --------------------------------------------------
+ if(fsentry.path?.startsWith(window.trash_path + '/')){
+ if(fsentry.metadata){
+ try{
+ let metadata = JSON.parse(fsentry.metadata);
+ fsentry.name = (metadata && metadata.original_name) ? metadata.original_name : fsentry.name
+ }
+ catch(e){
+ // Ignored
+ }
+ }
+ }
+ // --------------------------------------------------
+ // thumbnail
+ // --------------------------------------------------
+ if(fsentry.thumbnail){
+ return {image: fsentry.thumbnail, type: 'thumb'};
+ }
+ // --------------------------------------------------
+ // app icon
+ // --------------------------------------------------
+ else if(fsentry.associated_app && fsentry.associated_app?.name){
+ if(fsentry.associated_app.icon)
+ return {image: fsentry.associated_app.icon, type: 'icon'};
+ else
+ return {image: window.icons['app.svg'], type: 'icon'};
+ }
+ // --------------------------------------------------
+ // Trash
+ // --------------------------------------------------
+ else if(fsentry.shortcut_to_path && fsentry.shortcut_to_path === window.trash_path){
+ // get trash image, this is needed to get the correct empty vs full trash icon
+ let trash_img = $(`.item[data-path="${html_encode(window.trash_path)}" i] .item-icon-icon`).attr('src')
+ // if trash_img is undefined that's probably because trash wasn't added anywhere, do a direct lookup to see if trash is empty or no
+ if(!trash_img){
+ let trashstat = await puter.fs.stat(window.trash_path);
+ if(trashstat.is_empty !== undefined && trashstat.is_empty === true)
+ trash_img = window.icons['trash.svg'];
+ else
+ trash_img = window.icons['trash-full.svg'];
+ }
+ return {image: trash_img, type: 'icon'};
+ }
+ // --------------------------------------------------
+ // Directories
+ // --------------------------------------------------
+ else if(fsentry.is_dir){
+ // System Directories
+ if(fsentry.path === window.docs_path)
+ return {image: window.icons['folder-documents.svg'], type: 'icon'};
+ else if (fsentry.path === window.pictures_path)
+ return { image: window.icons['folder-pictures.svg'], type: 'icon' };
+ else if (fsentry.path === window.home_path)
+ return { image: window.icons['folder-home.svg'], type: 'icon' };
+ else if (fsentry.path === window.videos_path)
+ return { image: window.icons['folder-videos.svg'], type: 'icon' };
+ else if (fsentry.path === window.desktop_path)
+ return { image: window.icons['folder-desktop.svg'], type: 'icon' };
+ else if (fsentry.path === window.public_path)
+ return { image: window.icons['folder-public.svg'], type: 'icon' };
+ // regular directories
+ else
+ return {image: window.icons['folder.svg'], type: 'icon'};
+ }
+ // --------------------------------------------------
+ // Match icon by file extension
+ // --------------------------------------------------
+ // *.doc
+ else if(fsentry.name.toLowerCase().endsWith('.doc')){
+ return {image: window.icons['file-doc.svg'], type: 'icon'};
+ }
+ // *.docx
+ else if(fsentry.name.toLowerCase().endsWith('.docx')){
+ return {image: window.icons['file-docx.svg'], type: 'icon'};
+ }
+ // *.exe
+ else if(fsentry.name.toLowerCase().endsWith('.exe')){
+ return {image: window.icons['file-exe.svg'], type: 'icon'};
+ }
+ // *.gz
+ else if(fsentry.name.toLowerCase().endsWith('.gz')){
+ return {image: window.icons['file-gzip.svg'], type: 'icon'};
+ }
+ // *.jar
+ else if(fsentry.name.toLowerCase().endsWith('.jar')){
+ return {image: window.icons['file-jar.svg'], type: 'icon'};
+ }
+ // *.java
+ else if(fsentry.name.toLowerCase().endsWith('.java')){
+ return {image: window.icons['file-java.svg'], type: 'icon'};
+ }
+ // *.jsp
+ else if(fsentry.name.toLowerCase().endsWith('.jsp')){
+ return {image: window.icons['file-jsp.svg'], type: 'icon'};
+ }
+ // *.log
+ else if(fsentry.name.toLowerCase().endsWith('.log')){
+ return {image: window.icons['file-log.svg'], type: 'icon'};
+ }
+ // *.mp3
+ else if(fsentry.name.toLowerCase().endsWith('.mp3')){
+ return {image: window.icons['file-mp3.svg'], type: 'icon'};
+ }
+ // *.rb
+ else if(fsentry.name.toLowerCase().endsWith('.rb')){
+ return {image: window.icons['file-ruby.svg'], type: 'icon'};
+ }
+ // *.rss
+ else if(fsentry.name.toLowerCase().endsWith('.rss')){
+ return {image: window.icons['file-rss.svg'], type: 'icon'};
+ }
+ // *.rtf
+ else if(fsentry.name.toLowerCase().endsWith('.rtf')){
+ return {image: window.icons['file-rtf.svg'], type: 'icon'};
+ }
+ // *.sketch
+ else if(fsentry.name.toLowerCase().endsWith('.sketch')){
+ return {image: window.icons['file-sketch.svg'], type: 'icon'};
+ }
+ // *.sql
+ else if(fsentry.name.toLowerCase().endsWith('.sql')){
+ return {image: window.icons['file-sql.svg'], type: 'icon'};
+ }
+ // *.tif
+ else if(fsentry.name.toLowerCase().endsWith('.tif')){
+ return {image: window.icons['file-tif.svg'], type: 'icon'};
+ }
+ // *.tiff
+ else if(fsentry.name.toLowerCase().endsWith('.tiff')){
+ return {image: window.icons['file-tiff.svg'], type: 'icon'};
+ }
+ // *.wav
+ else if(fsentry.name.toLowerCase().endsWith('.wav')){
+ return {image: window.icons['file-wav.svg'], type: 'icon'};
+ }
+ // *.cpp
+ else if(fsentry.name.toLowerCase().endsWith('.cpp')){
+ return {image: window.icons['file-cpp.svg'], type: 'icon'};
+ }
+ // *.pptx
+ else if(fsentry.name.toLowerCase().endsWith('.pptx')){
+ return {image: window.icons['file-pptx.svg'], type: 'icon'};
+ }
+ // *.psd
+ else if(fsentry.name.toLowerCase().endsWith('.psd')){
+ return {image: window.icons['file-psd.svg'], type: 'icon'};
+ }
+ // *.py
+ else if(fsentry.name.toLowerCase().endsWith('.py')){
+ return {image: window.icons['file-py.svg'], type: 'icon'};
+ }
+ // *.xlsx
+ else if(fsentry.name.toLowerCase().endsWith('.xlsx')){
+ return {image: window.icons['file-xlsx.svg'], type: 'icon'};
+ }
+ // --------------------------------------------------
+ // Determine icon by set or derived mime type
+ // --------------------------------------------------
+ else if(fsentry.type){
+ return {image: content_type_to_icon(fsentry.type), type: 'icon'};
+ }
+ else{
+ return {image: content_type_to_icon(mime.getType(fsentry.name)), type: 'icon'};
+ }
+}
+
+export default item_icon;
\ No newline at end of file
diff --git a/src/helpers/open_item.js b/src/helpers/open_item.js
index f75212aaab..efdf3686fd 100644
--- a/src/helpers/open_item.js
+++ b/src/helpers/open_item.js
@@ -16,11 +16,13 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
+
import UIWindow from '../UI/UIWindow.js';
import UIAlert from '../UI/UIAlert.js';
import i18n from '../i18n/i18n.js';
import launch_app from "./launch_app.js";
import path from '../lib/path.js';
+import item_icon from './item_icon.js';
const open_item = async function(options){
let el_item = options.item;
@@ -154,7 +156,7 @@ const open_item = async function(options){
UIWindow({
path: item_path,
title: path.basename(item_path),
- icon: await window.item_icon({is_dir: true, path: item_path}),
+ icon: await item_icon({is_dir: true, path: item_path}),
uid: $(el_item).attr('data-uid'),
is_dir: is_dir,
app: 'explorer',
diff --git a/src/helpers/refresh_item_container.js b/src/helpers/refresh_item_container.js
index 51cb1d7558..3de003295d 100644
--- a/src/helpers/refresh_item_container.js
+++ b/src/helpers/refresh_item_container.js
@@ -19,6 +19,7 @@
import path from '../lib/path.js';
import UIItem from '../UI/UIItem.js';
+import item_icon from './item_icon.js';
const refresh_item_container = function(el_item_container, options){
options = options || {};
@@ -177,7 +178,7 @@ const refresh_item_container = function(el_item_container, options){
immutable: fsentry.immutable,
associated_app_name: fsentry.associated_app?.name,
path: item_path,
- icon: await window.item_icon(fsentry),
+ icon: await item_icon(fsentry),
name: (metadata && metadata.original_name !== undefined) ? metadata.original_name : fsentry.name,
is_dir: fsentry.is_dir,
multiselectable: !is_openFileDialog,
diff --git a/src/initgui.js b/src/initgui.js
index a536c733e1..a8f37515f1 100644
--- a/src/initgui.js
+++ b/src/initgui.js
@@ -44,7 +44,7 @@ import { SettingsService } from './services/SettingsService.js';
import UIComponentWindow from './UI/UIComponentWindow.js';
import update_mouse_position from './helpers/update_mouse_position.js';
import { LaunchOnInitService } from './services/LaunchOnInitService.js';
-
+import item_icon from './helpers/item_icon.js';
const launch_services = async function (options) {
// === Services Data Structures ===
@@ -204,7 +204,7 @@ window.initgui = async function(options){
UIWindow({
path: item_path,
title: path.basename(item_path),
- icon: await window.item_icon({is_dir: true, path: item_path}),
+ icon: await item_icon({is_dir: true, path: item_path}),
is_dir: true,
app: 'explorer',
});