chore: Clarify usage of window fields in UIDesktop.js

/puter/src/UI/UIDesktop.js
    44:24   error  'gui_origin' is not defined                                   no-undef
    46:25   error  'auth_token' is not defined                                   no-undef
    86:5    error  'socket' is not defined                                       no-undef
    95:5    error  'socket' is not defined                                       no-undef
   104:5    error  'socket' is not defined                                       no-undef
   105:43   error  'trash_path' is not defined                                   no-undef
   106:45   error  'trash_path' is not defined                                   no-undef
   109:49   error  'trash_path' is not defined                                   no-undef
   112:5    error  'socket' is not defined                                       no-undef
   118:9    error  'launch_apps' is not defined                                  no-undef
   121:9    error  'launch_apps' is not defined                                  no-undef
   121:39   error  'launch_apps' is not defined                                  no-undef
   124:9    error  'launch_apps' is not defined                                  no-undef
   124:30   error  'launch_apps' is not defined                                  no-undef
   127:5    error  'socket' is not defined                                       no-undef
   146:5    error  'socket' is not defined                                       no-undef
   153:85   error  'truncate_filename' is not defined                            no-undef
   153:114  error  'TRUNCATE_LENGTH' is not defined                              no-undef
   156:77   error  'item_icon' is not defined                                    no-undef
   192:13   error  'update_window_path' is not defined                           no-undef
   199:13   error  'sort_items' is not defined                                   no-undef
   203:5    error  'socket' is not defined                                       no-undef
   206:9    error  'sendItemChangeEventToWatchingApps' is not defined            no-undef
   220:25   error  'fsentry.path' is assigned to itself                          no-self-assign
   233:17   error  'update_explorer_footer_item_count' is not defined            no-undef
   234:17   error  'update_explorer_footer_selected_items_count' is not defined  no-undef
   239:26   error  'trash_path' is not defined                                   no-undef
   249:17   error  'update_window_path' is not defined                           no-undef
   253:26   error  'trash_path' is not defined                                   no-undef
   280:25   error  'item_icon' is not defined                                    no-undef
   281:34   error  'trash_path' is not defined                                   no-undef
   287:39   error  'trash_path' is not defined                                   no-undef
   308:37   error  'item_icon' is not defined                                    no-undef
   319:17   error  'sort_items' is not defined                                   no-undef
   324:13   error  'sort_items' is not defined                                   no-undef
   328:5    error  'socket' is not defined                                       no-undef
   333:9    error  'refresh_user_data' is not defined                            no-undef
   336:5    error  'socket' is not defined                                       no-undef
   341:9    error  'refresh_user_data' is not defined                            no-undef
   344:5    error  'socket' is not defined                                       no-undef
   346:9    error  'sendItemChangeEventToWatchingApps' is not defined            no-undef
   360:85   error  'truncate_filename' is not defined                            no-undef
   360:114  error  'TRUNCATE_LENGTH' is not defined                              no-undef
   363:77   error  'item_icon' is not defined                                    no-undef
   398:13   error  'update_window_path' is not defined                           no-undef
   405:13   error  'sort_items' is not defined                                   no-undef
   409:5    error  'socket' is not defined                                       no-undef
   415:9    error  'sendItemChangeEventToWatchingApps' is not defined            no-undef
   440:81   error  'item_icon' is not defined                                    no-undef
   445:17   error  'sort_items' is not defined                                   no-undef
   455:29   error  'item_icon' is not defined                                    no-undef
   463:17   error  Duplicate key 'associated_app_name'                           no-dupe-keys
   470:17   error  'sort_items' is not defined                                   no-undef
   491:42   error  'desktop_path' is not defined                                 no-undef
   496:5    error  'getItem' is not defined                                      no-undef
   508:8    error  'url_query_params' is not defined                             no-undef
   525:9    error  'update_user_preferences' is not defined                      no-undef
   560:17   error  'upload_items' is not defined                                 no-undef
   560:52   error  'desktop_path' is not defined                                 no-undef
   577:16   error  'mouseover_window' is not defined                             no-undef
   585:69   error  'desktop_path' is not defined                                 no-undef
   613:17   error  'copy_items' is not defined                                   no-undef
   613:43   error  'desktop_path' is not defined                                 no-undef
   617:17   error  'move_items' is not defined                                   no-undef
   617:43   error  'desktop_path' is not defined                                 no-undef
   649:39   error  'is_auto_arrange_enabled' is not defined                      no-undef
   651:37   error  'is_auto_arrange_enabled' is not defined                      no-undef
   651:64   error  'is_auto_arrange_enabled' is not defined                      no-undef
   652:37   error  'store_auto_arrange_preference' is not defined                no-undef
   652:67   error  'is_auto_arrange_enabled' is not defined                      no-undef
   653:40   error  'is_auto_arrange_enabled' is not defined                      no-undef
   654:41   error  'sort_items' is not defined                                   no-undef
   655:41   error  'set_sort_by' is not defined                                  no-undef
   656:41   error  'clear_desktop_item_positions' is not defined                 no-undef
   658:41   error  'set_desktop_item_positions' is not defined                   no-undef
   668:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   671:37   error  'sort_items' is not defined                                   no-undef
   672:37   error  'set_sort_by' is not defined                                  no-undef
   677:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   680:37   error  'sort_items' is not defined                                   no-undef
   681:37   error  'set_sort_by' is not defined                                  no-undef
   686:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   689:37   error  'sort_items' is not defined                                   no-undef
   690:37   error  'set_sort_by' is not defined                                  no-undef
   695:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   698:37   error  'sort_items' is not defined                                   no-undef
   699:37   error  'set_sort_by' is not defined                                  no-undef
   708:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   712:37   error  'sort_items' is not defined                                   no-undef
   713:37   error  'set_sort_by' is not defined                                  no-undef
   718:44   error  'is_auto_arrange_enabled' is not defined                      no-undef
   722:37   error  'sort_items' is not defined                                   no-undef
   723:37   error  'set_sort_by' is not defined                                  no-undef
   757:43   error  'desktop_path' is not defined                                 no-undef
   767:35   error  'clipboard' is not defined                                    no-undef
   769:32   error  'clipboard_op' is not defined                                 no-undef
   770:33   error  'copy_clipboard_items' is not defined                         no-undef
   770:54   error  'desktop_path' is not defined                                 no-undef
   771:37   error  'clipboard_op' is not defined                                 no-undef
   772:33   error  'move_clipboard_items' is not defined                         no-undef
   780:35   error  'actions_history' is not defined                              no-undef
   782:29   error  'undo_last_action' is not defined                             no-undef
   791:29   error  'init_upload_using_dialog' is not defined                     no-undef
   818:9    error  'is_embedded' is not defined                                  no-undef
   911:12   error  'user' is not defined                                         no-undef
   922:13   error  'is_embedded' is not defined                                  no-undef
   940:8    error  'url_query_params' is not defined                             no-undef
   941:28   error  'url_query_params' is not defined                             no-undef
   943:35   error  'home_path' is not defined                                    no-undef
   944:16   error  'url_query_params' is not defined                             no-undef
   945:34   error  'url_query_params' is not defined                             no-undef
   950:29   error  'item_icon' is not defined                                    no-undef
   966:13   error  'launch_app' is not defined                                   no-undef
   967:23   error  'app_launched_from_url' is not defined                        no-undef
   970:25   error  'app_query_params' is not defined                             no-undef
  1017:40   error  'taskbar_height' is not defined                               no-undef
  1023:40   error  'user' is not defined                                         no-undef
  1024:9    error  'getItem' is not defined                                      no-undef
  1031:21   error  'setItem' is not defined                                      no-undef
  1125:47   error  'user' is not defined                                         no-undef
  1128:48   error  'user' is not defined                                         no-undef
  1131:25   error  'update_auth_data' is not defined                             no-undef
  1170:37   error  'listSupportedLanguages' is not defined                       no-undef
  1249:29   error  'logout' is not defined                                       no-undef
  1253:25   error  'logout' is not defined                                       no-undef
  1261:9    error  'is_fullscreen' is not defined                                no-undef
  1308:5    error  'launch_app' is not defined                                   no-undef
  1381:9    error  'launch_apps' is not defined                                  no-undef
  1460:14   error  'api_origin' is not defined                                   no-undef
  1468:40   error  'auth_token' is not defined                                   no-undef
  1488:14   error  'toolbar_height' is not defined                               no-undef
  1502:9    error  'reset_window_size_and_position' is not defined               no-undef
  1513:5    error  'refresh_desktop_background' is not defined                   no-undef
  1520:26   error  'window_border_radius' is not defined                         no-undef
This commit is contained in:
Sam Atkins 2024-05-01 15:02:55 +01:00
parent dd7361441d
commit 9fc983f54a

View File

@ -41,9 +41,9 @@ async function UIDesktop(options){
let h = ''; let h = '';
// connect socket. // connect socket.
window.socket = io(gui_origin + '/', { window.socket = io(window.gui_origin + '/', {
query: { query: {
auth_token: auth_token auth_token: window.auth_token
} }
}); });
@ -83,7 +83,7 @@ async function UIDesktop(options){
console.error('GUI Socket Error:', error); console.error('GUI Socket Error:', error);
}); });
socket.on('upload.progress', (msg) => { window.socket.on('upload.progress', (msg) => {
if(window.progress_tracker[msg.operation_id]){ if(window.progress_tracker[msg.operation_id]){
window.progress_tracker[msg.operation_id].cloud_uploaded += msg.loaded_diff window.progress_tracker[msg.operation_id].cloud_uploaded += msg.loaded_diff
if(window.progress_tracker[msg.operation_id][msg.item_upload_id]){ if(window.progress_tracker[msg.operation_id][msg.item_upload_id]){
@ -92,7 +92,7 @@ async function UIDesktop(options){
} }
}); });
socket.on('download.progress', (msg) => { window.socket.on('download.progress', (msg) => {
if(window.progress_tracker[msg.operation_id]){ if(window.progress_tracker[msg.operation_id]){
if(window.progress_tracker[msg.operation_id][msg.item_upload_id]){ if(window.progress_tracker[msg.operation_id][msg.item_upload_id]){
window.progress_tracker[msg.operation_id][msg.item_upload_id].downloaded = msg.loaded; window.progress_tracker[msg.operation_id][msg.item_upload_id].downloaded = msg.loaded;
@ -101,30 +101,30 @@ async function UIDesktop(options){
} }
}); });
socket.on('trash.is_empty', async (msg) => { window.socket.on('trash.is_empty', async (msg) => {
$(`.item[data-path="${html_encode(trash_path)}" i]`).find('.item-icon > img').attr('src', msg.is_empty ? window.icons['trash.svg'] : window.icons['trash-full.svg']); $(`.item[data-path="${html_encode(window.trash_path)}" i]`).find('.item-icon > img').attr('src', msg.is_empty ? window.icons['trash.svg'] : window.icons['trash-full.svg']);
$(`.window[data-path="${html_encode(trash_path)}" i]`).find('.window-head-icon').attr('src', msg.is_empty ? window.icons['trash.svg'] : window.icons['trash-full.svg']); $(`.window[data-path="${html_encode(window.trash_path)}" i]`).find('.window-head-icon').attr('src', msg.is_empty ? window.icons['trash.svg'] : window.icons['trash-full.svg']);
// empty trash windows if needed // empty trash windows if needed
if(msg.is_empty) if(msg.is_empty)
$(`.window[data-path="${html_encode(trash_path)}" i]`).find('.item-container').empty(); $(`.window[data-path="${html_encode(window.trash_path)}" i]`).find('.item-container').empty();
}) })
socket.on('app.opened', async (app) => { window.socket.on('app.opened', async (app) => {
// don't update if this is the original client that initiated the action // don't update if this is the original client that initiated the action
if(app.original_client_socket_id === window.socket.id) if(app.original_client_socket_id === window.socket.id)
return; return;
// add the app to the beginning of the array // add the app to the beginning of the array
launch_apps.recent.unshift(app); window.launch_apps.recent.unshift(app);
// dedupe the array by uuid, uid, and id // dedupe the array by uuid, uid, and id
launch_apps.recent = _.uniqBy(launch_apps.recent, 'name'); window.launch_apps.recent = _.uniqBy(window.launch_apps.recent, 'name');
// limit to 5 // limit to 5
launch_apps.recent = launch_apps.recent.slice(0, window.launch_recent_apps_count); window.launch_apps.recent = window.launch_apps.recent.slice(0, window.launch_recent_apps_count);
}) })
socket.on('item.removed', async (item) => { window.socket.on('item.removed', async (item) => {
// don't update if this is the original client that initiated the action // don't update if this is the original client that initiated the action
if(item.original_client_socket_id === window.socket.id) if(item.original_client_socket_id === window.socket.id)
return; return;
@ -143,17 +143,17 @@ async function UIDesktop(options){
}); });
}) })
socket.on('item.updated', async (item) => { window.socket.on('item.updated', async (item) => {
// Don't update if this is the original client that initiated the action // Don't update if this is the original client that initiated the action
if(item.original_client_socket_id === window.socket.id) if(item.original_client_socket_id === window.socket.id)
return; return;
// Update matching items // Update matching items
// set new item name // set new item name
$(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(truncate_filename(item.name, TRUNCATE_LENGTH)).replaceAll(' ', ' ')); $(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(window.truncate_filename(item.name, window.TRUNCATE_LENGTH)).replaceAll(' ', ' '));
// Set new icon // Set new icon
const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image); const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.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-thumb').attr('src', new_icon);
$(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon); $(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon);
@ -189,21 +189,21 @@ async function UIDesktop(options){
// Update all exact-matching windows // Update all exact-matching windows
$(`.window-${item.uid}`).each(function(){ $(`.window-${item.uid}`).each(function(){
update_window_path(this, new_path); window.update_window_path(this, new_path);
}) })
// Set new name for matching open windows // Set new name for matching open windows
$(`.window-${item.uid} .window-head-title`).text(item.name); $(`.window-${item.uid} .window-head-title`).text(item.name);
// Re-sort all matching item containers // Re-sort all matching item containers
$(`.item[data-uid='${item.uid}']`).parent('.item-container').each(function(){ $(`.item[data-uid='${item.uid}']`).parent('.item-container').each(function(){
sort_items(this, $(this).closest('.item-container').attr('data-sort_by'), $(this).closest('.item-container').attr('data-sort_order')); window.sort_items(this, $(this).closest('.item-container').attr('data-sort_by'), $(this).closest('.item-container').attr('data-sort_order'));
}) })
}) })
socket.on('item.moved', async (resp) => { window.socket.on('item.moved', async (resp) => {
let fsentry = resp; let fsentry = resp;
// Notify all apps that are watching this item // Notify all apps that are watching this item
sendItemChangeEventToWatchingApps(fsentry.uid, { window.sendItemChangeEventToWatchingApps(fsentry.uid, {
event: 'moved', event: 'moved',
uid: fsentry.uid, uid: fsentry.uid,
name: fsentry.name, name: fsentry.name,
@ -216,9 +216,6 @@ async function UIDesktop(options){
let dest_path = path.dirname(fsentry.path); let dest_path = path.dirname(fsentry.path);
let metadata = fsentry.metadata; let metadata = fsentry.metadata;
// path must use the real name from DB
fsentry.path = fsentry.path;
// update all shortcut_to_path // update all shortcut_to_path
$(`.item[data-shortcut_to_path="${html_encode(resp.old_path)}" i]`).attr(`data-shortcut_to_path`, html_encode(fsentry.path)); $(`.item[data-shortcut_to_path="${html_encode(resp.old_path)}" i]`).attr(`data-shortcut_to_path`, html_encode(fsentry.path));
@ -230,13 +227,13 @@ async function UIDesktop(options){
$(this).removeItems(); $(this).removeItems();
// update parent windows' item counts // update parent windows' item counts
$(parent_windows).each(function(index){ $(parent_windows).each(function(index){
update_explorer_footer_item_count(this); window.update_explorer_footer_item_count(this);
update_explorer_footer_selected_items_count(this) window.update_explorer_footer_selected_items_count(this)
}); });
}) })
// if trashing, close windows of trashed items and its descendants // if trashing, close windows of trashed items and its descendants
if(dest_path === trash_path){ if(dest_path === window.trash_path){
$(`.window[data-path="${html_encode(resp.old_path)}" i]`).close(); $(`.window[data-path="${html_encode(resp.old_path)}" i]`).close();
// todo this has to be case-insensitive but the `i` selector doesn't work on ^= // todo this has to be case-insensitive but the `i` selector doesn't work on ^=
$(`.window[data-path^="${html_encode(resp.old_path)}/"]`).close(); $(`.window[data-path^="${html_encode(resp.old_path)}/"]`).close();
@ -246,11 +243,11 @@ async function UIDesktop(options){
else{ else{
// todo this has to be case-insensitive but the `i` selector doesn't work on ^= // todo this has to be case-insensitive but the `i` selector doesn't work on ^=
$(`.window[data-path^="${html_encode(resp.old_path)}/"], .window[data-path="${html_encode(resp.old_path)}" i]`).each(function(){ $(`.window[data-path^="${html_encode(resp.old_path)}/"], .window[data-path="${html_encode(resp.old_path)}" i]`).each(function(){
update_window_path(this, $(this).attr('data-path').replace(resp.old_path, fsentry.path)); window.update_window_path(this, $(this).attr('data-path').replace(resp.old_path, fsentry.path));
}) })
} }
if(dest_path === trash_path){ if(dest_path === window.trash_path){
$(`.item[data-uid="${fsentry.uid}"]`).find('.item-is-shared').fadeOut(300); $(`.item[data-uid="${fsentry.uid}"]`).find('.item-is-shared').fadeOut(300);
// if trashing dir... // if trashing dir...
@ -277,14 +274,14 @@ async function UIDesktop(options){
immutable: fsentry.immutable, immutable: fsentry.immutable,
uid: fsentry.uid, uid: fsentry.uid,
path: fsentry.path, path: fsentry.path,
icon: await item_icon(fsentry), icon: await window.item_icon(fsentry),
name: (dest_path === trash_path) ? metadata.original_name : fsentry.name, name: (dest_path === window.trash_path) ? metadata.original_name : fsentry.name,
is_dir: fsentry.is_dir, is_dir: fsentry.is_dir,
size: fsentry.size, size: fsentry.size,
type: fsentry.type, type: fsentry.type,
modified: fsentry.modified, modified: fsentry.modified,
is_selected: false, is_selected: false,
is_shared: (dest_path === trash_path) ? false : fsentry.is_shared, is_shared: (dest_path === window.trash_path) ? false : fsentry.is_shared,
is_shortcut: fsentry.is_shortcut, is_shortcut: fsentry.is_shortcut,
shortcut_to: fsentry.shortcut_to, shortcut_to: fsentry.shortcut_to,
shortcut_to_path: fsentry.shortcut_to_path, shortcut_to_path: fsentry.shortcut_to_path,
@ -305,7 +302,7 @@ async function UIDesktop(options){
immutable: false, immutable: false,
uid: dir.uid, uid: dir.uid,
path: dir.path, path: dir.path,
icon: await item_icon(dir), icon: await window.item_icon(dir),
name: dir.name, name: dir.name,
size: dir.size, size: dir.size,
type: dir.type, type: dir.type,
@ -316,34 +313,34 @@ async function UIDesktop(options){
has_website: false, has_website: false,
}); });
} }
sort_items(item_container, $(item_container).attr('data-sort_by'), $(item_container).attr('data-sort_order')); window.sort_items(item_container, $(item_container).attr('data-sort_by'), $(item_container).attr('data-sort_order'));
}); });
} }
//sort each container //sort each container
$(`.item-container[data-path='${html_encode(dest_path)}' i]`).each(function(){ $(`.item-container[data-path='${html_encode(dest_path)}' i]`).each(function(){
sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order')) window.sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order'))
}) })
}); });
socket.on('user.email_confirmed', (msg) => { window.socket.on('user.email_confirmed', (msg) => {
// don't update if this is the original client that initiated the action // don't update if this is the original client that initiated the action
if(msg.original_client_socket_id === window.socket.id) if(msg.original_client_socket_id === window.socket.id)
return; return;
refresh_user_data(window.auth_token); window.refresh_user_data(window.auth_token);
}); });
socket.on('user.email_changed', (msg) => { window.socket.on('user.email_changed', (msg) => {
// don't update if this is the original client that initiated the action // don't update if this is the original client that initiated the action
if(msg.original_client_socket_id === window.socket.id) if(msg.original_client_socket_id === window.socket.id)
return; return;
refresh_user_data(window.auth_token); window.refresh_user_data(window.auth_token);
}); });
socket.on('item.renamed', async (item) => { window.socket.on('item.renamed', async (item) => {
// Notify all apps that are watching this item // Notify all apps that are watching this item
sendItemChangeEventToWatchingApps(item.uid, { window.sendItemChangeEventToWatchingApps(item.uid, {
event: 'rename', event: 'rename',
uid: item.uid, uid: item.uid,
// path: item.path, // path: item.path,
@ -357,10 +354,10 @@ async function UIDesktop(options){
// Update matching items // Update matching items
// Set new item name // Set new item name
$(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(truncate_filename(item.name, TRUNCATE_LENGTH)).replaceAll(' ', ' ')); $(`.item[data-uid='${html_encode(item.uid)}'] .item-name`).html(html_encode(window.truncate_filename(item.name, window.TRUNCATE_LENGTH)).replaceAll(' ', ' '));
// Set new icon // Set new icon
const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image); const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.item_icon(item)).image);
$(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon); $(`.item[data-uid='${item.uid}']`).find('.item-icon-icon').attr('src', new_icon);
// Set new data-name // Set new data-name
@ -395,24 +392,24 @@ async function UIDesktop(options){
// Update all exact-matching windows // Update all exact-matching windows
$(`.window-${item.uid}`).each(function(){ $(`.window-${item.uid}`).each(function(){
update_window_path(this, new_path); window.update_window_path(this, new_path);
}) })
// Set new name for matching open windows // Set new name for matching open windows
$(`.window-${item.uid} .window-head-title`).text(item.name); $(`.window-${item.uid} .window-head-title`).text(item.name);
// Re-sort all matching item containers // Re-sort all matching item containers
$(`.item[data-uid='${item.uid}']`).parent('.item-container').each(function(){ $(`.item[data-uid='${item.uid}']`).parent('.item-container').each(function(){
sort_items(this, $(this).closest('.item-container').attr('data-sort_by'), $(this).closest('.item-container').attr('data-sort_order')); window.sort_items(this, $(this).closest('.item-container').attr('data-sort_by'), $(this).closest('.item-container').attr('data-sort_order'));
}) })
}); });
socket.on('item.added', async (item) => { window.socket.on('item.added', async (item) => {
// if item is empty, don't proceed // if item is empty, don't proceed
if(_.isEmpty(item)) if(_.isEmpty(item))
return; return;
// Notify all apps that are watching this item // Notify all apps that are watching this item
sendItemChangeEventToWatchingApps(item.uid, { window.sendItemChangeEventToWatchingApps(item.uid, {
event: 'write', event: 'write',
uid: item.uid, uid: item.uid,
// path: item.path, // path: item.path,
@ -437,12 +434,12 @@ async function UIDesktop(options){
'data-type': item.type, 'data-type': item.type,
}) })
// set new icon // set new icon
const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await item_icon(item)).image); const new_icon = (item.is_dir ? window.icons['folder.svg'] : (await window.item_icon(item)).image);
$(`.item[data-uid="${item.overwritten_uid}"]`).find('.item-icon > img').attr('src', new_icon); $(`.item[data-uid="${item.overwritten_uid}"]`).find('.item-icon > img').attr('src', new_icon);
//sort each window //sort each window
$(`.item-container[data-path='${html_encode(item.dirpath)}' i]`).each(function(){ $(`.item-container[data-path='${html_encode(item.dirpath)}' i]`).each(function(){
sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order')) window.sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order'))
}) })
} }
else{ else{
@ -452,7 +449,7 @@ async function UIDesktop(options){
immutable: item.immutable, immutable: item.immutable,
associated_app_name: item.associated_app?.name, associated_app_name: item.associated_app?.name,
path: item.path, path: item.path,
icon: await item_icon(item), icon: await window.item_icon(item),
name: item.name, name: item.name,
size: item.size, size: item.size,
type: item.type, type: item.type,
@ -460,14 +457,13 @@ async function UIDesktop(options){
is_dir: item.is_dir, is_dir: item.is_dir,
is_shared: item.is_shared, is_shared: item.is_shared,
is_shortcut: item.is_shortcut, is_shortcut: item.is_shortcut,
associated_app_name: item.associated_app?.name,
shortcut_to: item.shortcut_to, shortcut_to: item.shortcut_to,
shortcut_to_path: item.shortcut_to_path, shortcut_to_path: item.shortcut_to_path,
}); });
//sort each window //sort each window
$(`.item-container[data-path='${html_encode(item.dirpath)}' i]`).each(function(){ $(`.item-container[data-path='${html_encode(item.dirpath)}' i]`).each(function(){
sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order')) window.sort_items(this, $(this).attr('data-sort_by'), $(this).attr('data-sort_order'))
}) })
} }
}); });
@ -488,12 +484,12 @@ async function UIDesktop(options){
data-uid="${options.desktop_fsentry.uid}" data-uid="${options.desktop_fsentry.uid}"
data-sort_by="${!options.desktop_fsentry.sort_by ? 'name' : options.desktop_fsentry.sort_by}" data-sort_by="${!options.desktop_fsentry.sort_by ? 'name' : options.desktop_fsentry.sort_by}"
data-sort_order="${!options.desktop_fsentry.sort_order ? 'asc' : options.desktop_fsentry.sort_order}" data-sort_order="${!options.desktop_fsentry.sort_order ? 'asc' : options.desktop_fsentry.sort_order}"
data-path="${html_encode(desktop_path)}" data-path="${html_encode(window.desktop_path)}"
>`; >`;
h += `</div>`; h += `</div>`;
// Get window sidebar width // Get window sidebar width
getItem({ window.getItem({
key: "window_sidebar_width", key: "window_sidebar_width",
success: async function(res){ success: async function(res){
let value = parseInt(res.value); let value = parseInt(res.value);
@ -505,7 +501,7 @@ async function UIDesktop(options){
}) })
// Remove `?ref=...` from navbar URL // Remove `?ref=...` from navbar URL
if(url_query_params.has('ref')){ if(window.url_query_params.has('ref')){
window.history.pushState(null, document.title, '/'); window.history.pushState(null, document.title, '/');
} }
@ -522,7 +518,7 @@ async function UIDesktop(options){
user_preferences[default_app_keys[key].substring(17)] = await puter.kv.get(default_app_keys[key]); user_preferences[default_app_keys[key].substring(17)] = await puter.kv.get(default_app_keys[key]);
} }
update_user_preferences(user_preferences); window.update_user_preferences(user_preferences);
}); });
// Append to <body> // Append to <body>
@ -557,7 +553,7 @@ async function UIDesktop(options){
return false; return false;
// recursively create directories and upload files // recursively create directories and upload files
if(e.dataTransfer?.items?.length>0){ if(e.dataTransfer?.items?.length>0){
upload_items(e.dataTransfer.items, desktop_path); window.upload_items(e.dataTransfer.items, window.desktop_path);
} }
e.stopPropagation(); e.stopPropagation();
@ -574,7 +570,7 @@ async function UIDesktop(options){
tolerance: "intersect", tolerance: "intersect",
drop: function( event, ui ) { drop: function( event, ui ) {
// Check if item was actually dropped on desktop and not a window // Check if item was actually dropped on desktop and not a window
if(mouseover_window !== undefined) if(window.mouseover_window !== undefined)
return; return;
// Can't drop anything but UIItems on desktop // Can't drop anything but UIItems on desktop
@ -582,7 +578,7 @@ async function UIDesktop(options){
return; return;
// Don't move an item to its current directory // Don't move an item to its current directory
if( path.dirname($(ui.draggable).attr('data-path')) === desktop_path && !event.ctrlKey) if( path.dirname($(ui.draggable).attr('data-path')) === window.desktop_path && !event.ctrlKey)
return; return;
// If ctrl is pressed and source is Trashed, cancel whole operation // If ctrl is pressed and source is Trashed, cancel whole operation
@ -610,11 +606,11 @@ async function UIDesktop(options){
if(path.dirname($(ui.draggable).attr('data-path')) === window.trash_path) if(path.dirname($(ui.draggable).attr('data-path')) === window.trash_path)
return; return;
copy_items(items_to_move, desktop_path) window.copy_items(items_to_move, window.desktop_path)
} }
// otherwise, move items // otherwise, move items
else{ else{
move_items(items_to_move, desktop_path); window.move_items(items_to_move, window.desktop_path);
} }
} }
}); });
@ -646,16 +642,16 @@ async function UIDesktop(options){
items: [ items: [
{ {
html: i18n('auto_arrange'), html: i18n('auto_arrange'),
icon: is_auto_arrange_enabled ? '✓' : '', icon: window.is_auto_arrange_enabled ? '✓' : '',
onClick: async function(){ onClick: async function(){
is_auto_arrange_enabled = !is_auto_arrange_enabled; window.is_auto_arrange_enabled = !window.is_auto_arrange_enabled;
store_auto_arrange_preference(is_auto_arrange_enabled); window.store_auto_arrange_preference(window.is_auto_arrange_enabled);
if(is_auto_arrange_enabled){ if(window.is_auto_arrange_enabled){
sort_items(el_desktop, $(el_desktop).attr('data-sort_by'), $(el_desktop).attr('data-sort_order')); window.sort_items(el_desktop, $(el_desktop).attr('data-sort_by'), $(el_desktop).attr('data-sort_order'));
set_sort_by(options.desktop_fsentry.uid, $(el_desktop).attr('data-sort_by'), $(el_desktop).attr('data-sort_order')) window.set_sort_by(options.desktop_fsentry.uid, $(el_desktop).attr('data-sort_by'), $(el_desktop).attr('data-sort_order'))
clear_desktop_item_positions(el_desktop); window.clear_desktop_item_positions(el_desktop);
}else{ }else{
set_desktop_item_positions(el_desktop) window.set_desktop_item_positions(el_desktop)
} }
} }
}, },
@ -665,38 +661,38 @@ async function UIDesktop(options){
'-', '-',
{ {
html: i18n('name'), html: i18n('name'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_by') === 'name' ? '✓' : '', icon: $(el_desktop).attr('data-sort_by') === 'name' ? '✓' : '',
onClick: async function(){ onClick: async function(){
sort_items(el_desktop, 'name', $(el_desktop).attr('data-sort_order')); window.sort_items(el_desktop, 'name', $(el_desktop).attr('data-sort_order'));
set_sort_by(options.desktop_fsentry.uid, 'name', $(el_desktop).attr('data-sort_order')) window.set_sort_by(options.desktop_fsentry.uid, 'name', $(el_desktop).attr('data-sort_order'))
} }
}, },
{ {
html: i18n('date_modified'), html: i18n('date_modified'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_by') === 'modified' ? '✓' : '', icon: $(el_desktop).attr('data-sort_by') === 'modified' ? '✓' : '',
onClick: async function(){ onClick: async function(){
sort_items(el_desktop, 'modified', $(el_desktop).attr('data-sort_order')); window.sort_items(el_desktop, 'modified', $(el_desktop).attr('data-sort_order'));
set_sort_by(options.desktop_fsentry.uid, 'modified', $(el_desktop).attr('data-sort_order')) window.set_sort_by(options.desktop_fsentry.uid, 'modified', $(el_desktop).attr('data-sort_order'))
} }
}, },
{ {
html: i18n('type'), html: i18n('type'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_by') === 'type' ? '✓' : '', icon: $(el_desktop).attr('data-sort_by') === 'type' ? '✓' : '',
onClick: async function(){ onClick: async function(){
sort_items(el_desktop, 'type', $(el_desktop).attr('data-sort_order')); window.sort_items(el_desktop, 'type', $(el_desktop).attr('data-sort_order'));
set_sort_by(options.desktop_fsentry.uid, 'type', $(el_desktop).attr('data-sort_order')) window.set_sort_by(options.desktop_fsentry.uid, 'type', $(el_desktop).attr('data-sort_order'))
} }
}, },
{ {
html: i18n('size'), html: i18n('size'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_by') === 'size' ? '✓' : '', icon: $(el_desktop).attr('data-sort_by') === 'size' ? '✓' : '',
onClick: async function(){ onClick: async function(){
sort_items(el_desktop, 'size', $(el_desktop).attr('data-sort_order')); window.sort_items(el_desktop, 'size', $(el_desktop).attr('data-sort_order'));
set_sort_by(options.desktop_fsentry.uid, 'size', $(el_desktop).attr('data-sort_order')) window.set_sort_by(options.desktop_fsentry.uid, 'size', $(el_desktop).attr('data-sort_order'))
} }
}, },
// ------------------------------------------- // -------------------------------------------
@ -705,22 +701,22 @@ async function UIDesktop(options){
'-', '-',
{ {
html: i18n('ascending'), html: i18n('ascending'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_order') === 'asc' ? '✓' : '', icon: $(el_desktop).attr('data-sort_order') === 'asc' ? '✓' : '',
onClick: async function(){ onClick: async function(){
const sort_by = $(el_desktop).attr('data-sort_by') const sort_by = $(el_desktop).attr('data-sort_by')
sort_items(el_desktop, sort_by, 'asc'); window.sort_items(el_desktop, sort_by, 'asc');
set_sort_by(options.desktop_fsentry.uid, sort_by, 'asc') window.set_sort_by(options.desktop_fsentry.uid, sort_by, 'asc')
} }
}, },
{ {
html: i18n('descending'), html: i18n('descending'),
disabled: !is_auto_arrange_enabled, disabled: !window.is_auto_arrange_enabled,
icon: $(el_desktop).attr('data-sort_order') === 'desc' ? '✓' : '', icon: $(el_desktop).attr('data-sort_order') === 'desc' ? '✓' : '',
onClick: async function(){ onClick: async function(){
const sort_by = $(el_desktop).attr('data-sort_by') const sort_by = $(el_desktop).attr('data-sort_by')
sort_items(el_desktop, sort_by, 'desc'); window.sort_items(el_desktop, sort_by, 'desc');
set_sort_by(options.desktop_fsentry.uid, sort_by, 'desc') window.set_sort_by(options.desktop_fsentry.uid, sort_by, 'desc')
} }
}, },
] ]
@ -754,7 +750,7 @@ async function UIDesktop(options){
// ------------------------------------------- // -------------------------------------------
// New File // New File
// ------------------------------------------- // -------------------------------------------
new_context_menu_item(desktop_path, el_desktop), new_context_menu_item(window.desktop_path, el_desktop),
// ------------------------------------------- // -------------------------------------------
// - // -
// ------------------------------------------- // -------------------------------------------
@ -764,12 +760,12 @@ async function UIDesktop(options){
// ------------------------------------------- // -------------------------------------------
{ {
html: i18n('paste'), html: i18n('paste'),
disabled: clipboard.length > 0 ? false : true, disabled: window.clipboard.length > 0 ? false : true,
onClick: function(){ onClick: function(){
if(clipboard_op === 'copy') if(window.clipboard_op === 'copy')
copy_clipboard_items(desktop_path, el_desktop); window.copy_clipboard_items(window.desktop_path, el_desktop);
else if(clipboard_op === 'move') else if(window.clipboard_op === 'move')
move_clipboard_items(el_desktop) window.move_clipboard_items(el_desktop)
} }
}, },
// ------------------------------------------- // -------------------------------------------
@ -777,9 +773,9 @@ async function UIDesktop(options){
// ------------------------------------------- // -------------------------------------------
{ {
html: i18n('undo'), html: i18n('undo'),
disabled: actions_history.length > 0 ? false : true, disabled: window.actions_history.length > 0 ? false : true,
onClick: function(){ onClick: function(){
undo_last_action(); window.undo_last_action();
} }
}, },
// ------------------------------------------- // -------------------------------------------
@ -788,7 +784,7 @@ async function UIDesktop(options){
{ {
html: i18n('upload_here'), html: i18n('upload_here'),
onClick: function(){ onClick: function(){
init_upload_using_dialog(el_desktop); window.init_upload_using_dialog(el_desktop);
} }
}, },
// ------------------------------------------- // -------------------------------------------
@ -815,7 +811,7 @@ async function UIDesktop(options){
// we don't need to get the desktop items if we're in embedded or fullpage mode // we don't need to get the desktop items if we're in embedded or fullpage mode
// because the items aren't visible anyway and we don't need to waste bandwidth/server resources // because the items aren't visible anyway and we don't need to waste bandwidth/server resources
//------------------------------------------- //-------------------------------------------
if(!is_embedded && !window.is_fullpage_mode){ if(!window.is_embedded && !window.is_fullpage_mode){
refresh_item_container(el_desktop, {fadeInItems: true}) refresh_item_container(el_desktop, {fadeInItems: true})
} }
@ -908,7 +904,7 @@ async function UIDesktop(options){
} }
// refer // refer
if(user.referral_code){ if(window.user.referral_code){
ht += `<div class="toolbar-btn refer-btn" title="Refer" style="background-image:url(${window.icons['gift.svg']});"></div>`; ht += `<div class="toolbar-btn refer-btn" title="Refer" style="background-image:url(${window.icons['gift.svg']});"></div>`;
} }
@ -919,7 +915,7 @@ async function UIDesktop(options){
} }
// qr code button -- only show if not embedded // qr code button -- only show if not embedded
if(!is_embedded) if(!window.is_embedded)
ht += `<div class="toolbar-btn qr-btn" title="QR code" style="background-image:url(${window.icons['qr.svg']})"></div>`; ht += `<div class="toolbar-btn qr-btn" title="QR code" style="background-image:url(${window.icons['qr.svg']})"></div>`;
// user options menu // user options menu
@ -937,17 +933,17 @@ async function UIDesktop(options){
// --------------------------------------------- // ---------------------------------------------
// Run apps from insta-login URL // Run apps from insta-login URL
// --------------------------------------------- // ---------------------------------------------
if(url_query_params.has('app')){ if(window.url_query_params.has('app')){
let url_app_name = url_query_params.get('app'); let url_app_name = window.url_query_params.get('app');
if(url_app_name === 'explorer'){ if(url_app_name === 'explorer'){
let predefined_path = home_path; let predefined_path = window.home_path;
if(url_query_params.has('path')) if(window.url_query_params.has('path'))
predefined_path =url_query_params.get('path') predefined_path =window.url_query_params.get('path')
// launch explorer // launch explorer
UIWindow({ UIWindow({
path: predefined_path, path: predefined_path,
title: path.basename(predefined_path), title: path.basename(predefined_path),
icon: await item_icon({is_dir: true, path: predefined_path}), icon: await window.item_icon({is_dir: true, path: predefined_path}),
// todo // todo
// uid: $(el_item).attr('data-uid'), // uid: $(el_item).attr('data-uid'),
is_dir: true, is_dir: true,
@ -963,11 +959,11 @@ async function UIDesktop(options){
else if(window.app_launched_from_url){ else if(window.app_launched_from_url){
let qparams = new URLSearchParams(window.location.search); let qparams = new URLSearchParams(window.location.search);
if(!qparams.has('c')){ if(!qparams.has('c')){
launch_app({ window.launch_app({
name: app_launched_from_url, name: window.app_launched_from_url,
readURL: qparams.get('readURL'), readURL: qparams.get('readURL'),
maximized: qparams.get('maximized'), maximized: qparams.get('maximized'),
params: app_query_params ?? [], params: window.app_query_params ?? [],
is_fullpage: window.is_fullpage_mode, is_fullpage: window.is_fullpage_mode,
window_options: { window_options: {
stay_on_top: false, stay_on_top: false,
@ -1014,21 +1010,21 @@ async function UIDesktop(options){
var x1=month + "/" + dt + "/" + x.getFullYear(); var x1=month + "/" + dt + "/" + x.getFullYear();
x1 = x1 + " - " + hours + ":" + minutes + ":" + seconds + " " + ampm; x1 = x1 + " - " + hours + ":" + minutes + ":" + seconds + " " + ampm;
$('#clock').html(x1); $('#clock').html(x1);
$('#clock').css('line-height', taskbar_height + 'px'); $('#clock').css('line-height', window.taskbar_height + 'px');
} }
setInterval(display_ct, 1000); setInterval(display_ct, 1000);
// show referral notice window // show referral notice window
if(window.show_referral_notice && !user.email_confirmed){ if(window.show_referral_notice && !window.user.email_confirmed){
getItem({ window.getItem({
key: "shown_referral_notice", key: "shown_referral_notice",
success: async function(res){ success: async function(res){
if(!res){ if(!res){
setTimeout(() => { setTimeout(() => {
UIWindowClaimReferral(); UIWindowClaimReferral();
}, 1000); }, 1000);
setItem({ window.setItem({
key: "shown_referral_notice", key: "shown_referral_notice",
value: true, value: true,
}) })
@ -1122,13 +1118,13 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
items.push( items.push(
{ {
html: l_user.username, html: l_user.username,
icon: l_user.username === user.username ? '✓' : '', icon: l_user.username === window.user.username ? '✓' : '',
onClick: async function(val){ onClick: async function(val){
// don't reload everything if clicked on already-logged-in user // don't reload everything if clicked on already-logged-in user
if(l_user.username === user.username) if(l_user.username === window.user.username)
return; return;
// update auth data // update auth data
update_auth_data(l_user.auth_token, l_user); window.update_auth_data(l_user.auth_token, l_user);
// refresh // refresh
location.reload(); location.reload();
} }
@ -1167,7 +1163,7 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
// ------------------------------------------- // -------------------------------------------
// Load available languages // Load available languages
// ------------------------------------------- // -------------------------------------------
const supportedLanguagesItems = listSupportedLanguages().map(lang => { const supportedLanguagesItems = window.listSupportedLanguages().map(lang => {
return { return {
html: lang.name, html: lang.name,
icon: window.locale === lang.code ? '✓' : '', icon: window.locale === lang.code ? '✓' : '',
@ -1246,11 +1242,11 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
] ]
}) })
if(alert_resp === 'close_and_log_out') if(alert_resp === 'close_and_log_out')
logout(); window.logout();
} }
// no open windows // no open windows
else else
logout(); window.logout();
} }
}, },
] ]
@ -1258,7 +1254,7 @@ $(document).on('click', '.user-options-menu-btn', async function(e){
}) })
$(document).on('click', '.fullscreen-btn', async function (e) { $(document).on('click', '.fullscreen-btn', async function (e) {
if(!is_fullscreen()) { if(!window.is_fullscreen()) {
var elem = document.documentElement; var elem = document.documentElement;
if (elem.requestFullscreen) { if (elem.requestFullscreen) {
elem.requestFullscreen(); elem.requestFullscreen();
@ -1305,7 +1301,7 @@ $(document).on('click', '.refer-btn', async function(e){
}) })
$(document).on('click', '.start-app', async function(e){ $(document).on('click', '.start-app', async function(e){
launch_app({ window.launch_app({
name: $(this).attr('data-app-name') name: $(this).attr('data-app-name')
}) })
// close popovers // close popovers
@ -1367,7 +1363,7 @@ $(document).on('focus', '.launch-search', function(e){
}) })
$(document).on('change keyup keypress keydown paste', '.launch-search', function(e){ $(document).on('change keyup keypress keydown paste', '.launch-search', function(e){
// search launch_apps.recommended for query // search window.launch_apps.recommended for query
const query = $(this).val().toLowerCase(); const query = $(this).val().toLowerCase();
if(query === ''){ if(query === ''){
$('.launch-search-clear').hide(); $('.launch-search-clear').hide();
@ -1378,7 +1374,7 @@ $(document).on('change keyup keypress keydown paste', '.launch-search', function
$('.launch-apps-recent').hide(); $('.launch-apps-recent').hide();
$('.start-section-heading').hide(); $('.start-section-heading').hide();
$('.launch-search-clear').show(); $('.launch-search-clear').show();
launch_apps.recommended.forEach((app)=>{ window.launch_apps.recommended.forEach((app)=>{
if(app.title.toLowerCase().includes(query.toLowerCase())){ if(app.title.toLowerCase().includes(query.toLowerCase())){
$(`.start-app-card[data-name="${app.name}"]`).show(); $(`.start-app-card[data-name="${app.name}"]`).show();
}else{ }else{
@ -1457,7 +1453,7 @@ window.update_taskbar = function(){
// update taskbar in the server-side // update taskbar in the server-side
$.ajax({ $.ajax({
url: api_origin + "/update-taskbar-items", url: window.api_origin + "/update-taskbar-items",
type: 'POST', type: 'POST',
data: JSON.stringify({ data: JSON.stringify({
items: items, items: items,
@ -1465,7 +1461,7 @@ window.update_taskbar = function(){
async: true, async: true,
contentType: "application/json", contentType: "application/json",
headers: { headers: {
"Authorization": "Bearer "+auth_token "Authorization": "Bearer "+window.auth_token
}, },
}) })
} }
@ -1485,7 +1481,7 @@ window.enter_fullpage_mode = (el_window)=>{
$(el_window).css({ $(el_window).css({
width: '100%', width: '100%',
height: '100%', height: '100%',
top: toolbar_height + 'px', top: window.toolbar_height + 'px',
left: 0, left: 0,
'border-radius': 0, 'border-radius': 0,
}); });
@ -1499,7 +1495,7 @@ window.exit_fullpage_mode = (el_window)=>{
refresh_item_container($('.desktop.item-container'), {fadeInItems: true}); refresh_item_container($('.desktop.item-container'), {fadeInItems: true});
$(el_window).removeAttr('data-is_fullpage'); $(el_window).removeAttr('data-is_fullpage');
if(el_window){ if(el_window){
reset_window_size_and_position(el_window) window.reset_window_size_and_position(el_window)
$(el_window).find('.window-head').show(); $(el_window).find('.window-head').show();
} }
@ -1510,14 +1506,14 @@ window.exit_fullpage_mode = (el_window)=>{
$('.show-desktop-btn').hide(); $('.show-desktop-btn').hide();
// refresh desktop background // refresh desktop background
refresh_desktop_background(); window.refresh_desktop_background();
} }
window.reset_window_size_and_position = (el_window)=>{ window.reset_window_size_and_position = (el_window)=>{
$(el_window).css({ $(el_window).css({
width: 680, width: 680,
height: 380, height: 380,
'border-radius': window_border_radius, 'border-radius': window.window_border_radius,
top: 'calc(50% - 190px)', top: 'calc(50% - 190px)',
left: 'calc(50% - 340px)', left: 'calc(50% - 340px)',
}); });