@jupyterlab/filebrowser 4.0.0-alpha.19 → 4.0.0-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser.d.ts +4 -4
- package/lib/browser.js +14 -35
- package/lib/browser.js.map +1 -1
- package/lib/listing.d.ts +2 -2
- package/lib/listing.js +97 -15
- package/lib/listing.js.map +1 -1
- package/lib/model.js +1 -0
- package/lib/model.js.map +1 -1
- package/lib/tokens.d.ts +1 -1
- package/package.json +25 -24
- package/src/browser.ts +444 -0
- package/src/crumbs.ts +441 -0
- package/src/index.ts +15 -0
- package/src/listing.ts +2609 -0
- package/src/model.ts +832 -0
- package/src/opendialog.ts +257 -0
- package/src/tokens.ts +122 -0
- package/src/upload.ts +119 -0
- package/src/uploadstatus.tsx +259 -0
- package/style/base.css +17 -4
package/lib/browser.d.ts
CHANGED
|
@@ -34,9 +34,10 @@ export declare class FileBrowser extends SidePanel {
|
|
|
34
34
|
get showLastModifiedColumn(): boolean;
|
|
35
35
|
set showLastModifiedColumn(value: boolean);
|
|
36
36
|
/**
|
|
37
|
-
* Whether to
|
|
37
|
+
* Whether to show the file size column
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
get showFileSizeColumn(): boolean;
|
|
40
|
+
set showFileSizeColumn(value: boolean);
|
|
40
41
|
/**
|
|
41
42
|
* Whether to show hidden files
|
|
42
43
|
*/
|
|
@@ -142,13 +143,12 @@ export declare class FileBrowser extends SidePanel {
|
|
|
142
143
|
protected listing: DirListing;
|
|
143
144
|
protected crumbs: BreadCrumbs;
|
|
144
145
|
protected mainPanel: Panel;
|
|
145
|
-
private _filenameSearcher;
|
|
146
146
|
private _manager;
|
|
147
147
|
private _directoryPending;
|
|
148
148
|
private _filePending;
|
|
149
149
|
private _navigateToCurrentDirectory;
|
|
150
150
|
private _showLastModifiedColumn;
|
|
151
|
-
private
|
|
151
|
+
private _showFileSizeColumn;
|
|
152
152
|
private _showHiddenFiles;
|
|
153
153
|
private _showFileCheckboxes;
|
|
154
154
|
}
|
package/lib/browser.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { showErrorMessage } from '@jupyterlab/apputils';
|
|
4
4
|
import { ServerConnection } from '@jupyterlab/services';
|
|
5
5
|
import { nullTranslator } from '@jupyterlab/translation';
|
|
6
|
-
import {
|
|
6
|
+
import { SidePanel } from '@jupyterlab/ui-components';
|
|
7
7
|
import { Panel } from '@lumino/widgets';
|
|
8
8
|
import { BreadCrumbs } from './crumbs';
|
|
9
9
|
import { DirListing } from './listing';
|
|
@@ -19,10 +19,6 @@ const FILE_BROWSER_PANEL_CLASS = 'jp-FileBrowser-Panel';
|
|
|
19
19
|
* The class name added to the filebrowser crumbs node.
|
|
20
20
|
*/
|
|
21
21
|
const CRUMBS_CLASS = 'jp-FileBrowser-crumbs';
|
|
22
|
-
/**
|
|
23
|
-
* The class name added to the filebrowser filterbox node.
|
|
24
|
-
*/
|
|
25
|
-
const FILTERBOX_CLASS = 'jp-FileBrowser-filterBox';
|
|
26
22
|
/**
|
|
27
23
|
* The class name added to the filebrowser toolbar node.
|
|
28
24
|
*/
|
|
@@ -48,7 +44,7 @@ export class FileBrowser extends SidePanel {
|
|
|
48
44
|
var _a;
|
|
49
45
|
super({ content: new Panel(), translator: options.translator });
|
|
50
46
|
this._showLastModifiedColumn = true;
|
|
51
|
-
this.
|
|
47
|
+
this._showFileSizeColumn = false;
|
|
52
48
|
this._showHiddenFiles = false;
|
|
53
49
|
this._showFileCheckboxes = false;
|
|
54
50
|
this.addClass(FILE_BROWSER_CLASS);
|
|
@@ -75,17 +71,6 @@ export class FileBrowser extends SidePanel {
|
|
|
75
71
|
translator
|
|
76
72
|
});
|
|
77
73
|
this.listing.addClass(LISTING_CLASS);
|
|
78
|
-
this._filenameSearcher = FilenameSearcher({
|
|
79
|
-
updateFilter: (filterFn, query) => {
|
|
80
|
-
this.listing.model.setFilter(value => {
|
|
81
|
-
return filterFn(value.name.toLowerCase());
|
|
82
|
-
});
|
|
83
|
-
},
|
|
84
|
-
useFuzzyFilter: this._useFuzzyFilter,
|
|
85
|
-
placeholder: this._trans.__('Filter files by name')
|
|
86
|
-
});
|
|
87
|
-
this._filenameSearcher.addClass(FILTERBOX_CLASS);
|
|
88
|
-
this.mainPanel.addWidget(this._filenameSearcher);
|
|
89
74
|
this.mainPanel.addWidget(this.crumbs);
|
|
90
75
|
this.mainPanel.addWidget(this.listing);
|
|
91
76
|
this.addWidget(this.mainPanel);
|
|
@@ -118,25 +103,19 @@ export class FileBrowser extends SidePanel {
|
|
|
118
103
|
}
|
|
119
104
|
}
|
|
120
105
|
/**
|
|
121
|
-
* Whether to
|
|
106
|
+
* Whether to show the file size column
|
|
122
107
|
*/
|
|
123
|
-
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
this.
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
useFuzzyFilter: this._useFuzzyFilter,
|
|
135
|
-
placeholder: this._trans.__('Filter files by name'),
|
|
136
|
-
forceRefresh: true
|
|
137
|
-
});
|
|
138
|
-
this._filenameSearcher.addClass(FILTERBOX_CLASS);
|
|
139
|
-
this.mainPanel.insertWidget(0, this._filenameSearcher);
|
|
108
|
+
get showFileSizeColumn() {
|
|
109
|
+
return this._showFileSizeColumn;
|
|
110
|
+
}
|
|
111
|
+
set showFileSizeColumn(value) {
|
|
112
|
+
if (this.listing.setColumnVisibility) {
|
|
113
|
+
this.listing.setColumnVisibility('file_size', value);
|
|
114
|
+
this._showFileSizeColumn = value;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
console.warn('Listing does not support toggling column visibility');
|
|
118
|
+
}
|
|
140
119
|
}
|
|
141
120
|
/**
|
|
142
121
|
* Whether to show hidden files
|
package/lib/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAY,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAe,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/lib/listing.d.ts
CHANGED
|
@@ -353,12 +353,12 @@ export declare namespace DirListing {
|
|
|
353
353
|
/**
|
|
354
354
|
* The sort key.
|
|
355
355
|
*/
|
|
356
|
-
key: 'name' | 'last_modified';
|
|
356
|
+
key: 'name' | 'last_modified' | 'file_size';
|
|
357
357
|
}
|
|
358
358
|
/**
|
|
359
359
|
* Toggleable columns.
|
|
360
360
|
*/
|
|
361
|
-
type ToggleableColumn = 'last_modified' | 'is_selected';
|
|
361
|
+
type ToggleableColumn = 'last_modified' | 'is_selected' | 'file_size';
|
|
362
362
|
/**
|
|
363
363
|
* A file contents model thunk.
|
|
364
364
|
*
|
package/lib/listing.js
CHANGED
|
@@ -54,6 +54,10 @@ const ITEM_ICON_CLASS = 'jp-DirListing-itemIcon';
|
|
|
54
54
|
* The class name added to the listing item modified cell.
|
|
55
55
|
*/
|
|
56
56
|
const ITEM_MODIFIED_CLASS = 'jp-DirListing-itemModified';
|
|
57
|
+
/**
|
|
58
|
+
* The class name added to the listing item file size cell.
|
|
59
|
+
*/
|
|
60
|
+
const ITEM_FILE_SIZE_CLASS = 'jp-DirListing-itemFileSize';
|
|
57
61
|
/**
|
|
58
62
|
* The class name added to the label element that wraps each item's checkbox and
|
|
59
63
|
* the header's check-all checkbox.
|
|
@@ -71,6 +75,10 @@ const NAME_ID_CLASS = 'jp-id-name';
|
|
|
71
75
|
* The class name added to the modified column header cell.
|
|
72
76
|
*/
|
|
73
77
|
const MODIFIED_ID_CLASS = 'jp-id-modified';
|
|
78
|
+
/**
|
|
79
|
+
* The class name added to the file size column header cell.
|
|
80
|
+
*/
|
|
81
|
+
const FILE_SIZE_ID_CLASS = 'jp-id-filesize';
|
|
74
82
|
/**
|
|
75
83
|
* The class name added to the narrow column header cell.
|
|
76
84
|
*/
|
|
@@ -79,6 +87,10 @@ const NARROW_ID_CLASS = 'jp-id-narrow';
|
|
|
79
87
|
* The class name added to the modified column header cell and modified item cell when hidden.
|
|
80
88
|
*/
|
|
81
89
|
const MODIFIED_COLUMN_HIDDEN = 'jp-LastModified-hidden';
|
|
90
|
+
/**
|
|
91
|
+
* The class name added to the size column header cell and size item cell when hidden.
|
|
92
|
+
*/
|
|
93
|
+
const FILE_SIZE_COLUMN_HIDDEN = 'jp-FileSize-hidden';
|
|
82
94
|
/**
|
|
83
95
|
* The mime type for a contents drag object.
|
|
84
96
|
*/
|
|
@@ -180,6 +192,8 @@ export class DirListing extends Widget {
|
|
|
180
192
|
this._manager = this._model.manager;
|
|
181
193
|
this._renderer = options.renderer || DirListing.defaultRenderer;
|
|
182
194
|
const headerNode = DOMUtils.findElement(this.node, HEADER_CLASS);
|
|
195
|
+
// hide the file size column by default
|
|
196
|
+
this._hiddenColumns.add('file_size');
|
|
183
197
|
this._renderer.populateHeaderNode(headerNode, this.translator, this._hiddenColumns);
|
|
184
198
|
this._manager.activateRequested.connect(this._onActivateRequested, this);
|
|
185
199
|
}
|
|
@@ -1508,18 +1522,19 @@ export class DirListing extends Widget {
|
|
|
1508
1522
|
* @param node - The header node to populate.
|
|
1509
1523
|
*/
|
|
1510
1524
|
populateHeaderNode(node, translator, hiddenColumns) {
|
|
1511
|
-
var _a, _b;
|
|
1512
1525
|
translator = translator || nullTranslator;
|
|
1513
1526
|
const trans = translator.load('jupyterlab');
|
|
1514
1527
|
const name = this.createHeaderItemNode(trans.__('Name'));
|
|
1515
1528
|
const narrow = document.createElement('div');
|
|
1516
1529
|
const modified = this.createHeaderItemNode(trans.__('Last Modified'));
|
|
1530
|
+
const fileSize = this.createHeaderItemNode(trans.__('File Size'));
|
|
1517
1531
|
name.classList.add(NAME_ID_CLASS);
|
|
1518
1532
|
name.classList.add(SELECTED_CLASS);
|
|
1519
1533
|
modified.classList.add(MODIFIED_ID_CLASS);
|
|
1534
|
+
fileSize.classList.add(FILE_SIZE_ID_CLASS);
|
|
1520
1535
|
narrow.classList.add(NARROW_ID_CLASS);
|
|
1521
1536
|
narrow.textContent = '...';
|
|
1522
|
-
if (!(
|
|
1537
|
+
if (!(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('is_selected'))) {
|
|
1523
1538
|
const checkboxWrapper = this.createCheckboxWrapperNode({
|
|
1524
1539
|
alwaysVisible: true
|
|
1525
1540
|
});
|
|
@@ -1528,12 +1543,19 @@ export class DirListing extends Widget {
|
|
|
1528
1543
|
node.appendChild(name);
|
|
1529
1544
|
node.appendChild(narrow);
|
|
1530
1545
|
node.appendChild(modified);
|
|
1531
|
-
|
|
1546
|
+
node.appendChild(fileSize);
|
|
1547
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('last_modified')) {
|
|
1532
1548
|
modified.classList.add(MODIFIED_COLUMN_HIDDEN);
|
|
1533
1549
|
}
|
|
1534
1550
|
else {
|
|
1535
1551
|
modified.classList.remove(MODIFIED_COLUMN_HIDDEN);
|
|
1536
1552
|
}
|
|
1553
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('file_size')) {
|
|
1554
|
+
fileSize.classList.add(FILE_SIZE_COLUMN_HIDDEN);
|
|
1555
|
+
}
|
|
1556
|
+
else {
|
|
1557
|
+
fileSize.classList.remove(FILE_SIZE_COLUMN_HIDDEN);
|
|
1558
|
+
}
|
|
1537
1559
|
// set the initial caret icon
|
|
1538
1560
|
Private.updateCaret(DOMUtils.findElement(name, HEADER_ITEM_ICON_CLASS), 'right', 'up');
|
|
1539
1561
|
}
|
|
@@ -1549,11 +1571,13 @@ export class DirListing extends Widget {
|
|
|
1549
1571
|
handleHeaderClick(node, event) {
|
|
1550
1572
|
const name = DOMUtils.findElement(node, NAME_ID_CLASS);
|
|
1551
1573
|
const modified = DOMUtils.findElement(node, MODIFIED_ID_CLASS);
|
|
1574
|
+
const fileSize = DOMUtils.findElement(node, FILE_SIZE_ID_CLASS);
|
|
1552
1575
|
const state = { direction: 'ascending', key: 'name' };
|
|
1553
1576
|
const target = event.target;
|
|
1577
|
+
const modifiedIcon = DOMUtils.findElement(modified, HEADER_ITEM_ICON_CLASS);
|
|
1578
|
+
const fileSizeIcon = DOMUtils.findElement(fileSize, HEADER_ITEM_ICON_CLASS);
|
|
1579
|
+
const nameIcon = DOMUtils.findElement(name, HEADER_ITEM_ICON_CLASS);
|
|
1554
1580
|
if (name.contains(target)) {
|
|
1555
|
-
const modifiedIcon = DOMUtils.findElement(modified, HEADER_ITEM_ICON_CLASS);
|
|
1556
|
-
const nameIcon = DOMUtils.findElement(name, HEADER_ITEM_ICON_CLASS);
|
|
1557
1581
|
if (name.classList.contains(SELECTED_CLASS)) {
|
|
1558
1582
|
if (!name.classList.contains(DESCENDING_CLASS)) {
|
|
1559
1583
|
state.direction = 'descending';
|
|
@@ -1572,12 +1596,13 @@ export class DirListing extends Widget {
|
|
|
1572
1596
|
name.classList.add(SELECTED_CLASS);
|
|
1573
1597
|
modified.classList.remove(SELECTED_CLASS);
|
|
1574
1598
|
modified.classList.remove(DESCENDING_CLASS);
|
|
1599
|
+
fileSize.classList.remove(SELECTED_CLASS);
|
|
1600
|
+
fileSize.classList.remove(DESCENDING_CLASS);
|
|
1575
1601
|
Private.updateCaret(modifiedIcon, 'left');
|
|
1602
|
+
Private.updateCaret(fileSizeIcon, 'left');
|
|
1576
1603
|
return state;
|
|
1577
1604
|
}
|
|
1578
1605
|
if (modified.contains(target)) {
|
|
1579
|
-
const modifiedIcon = DOMUtils.findElement(modified, HEADER_ITEM_ICON_CLASS);
|
|
1580
|
-
const nameIcon = DOMUtils.findElement(name, HEADER_ITEM_ICON_CLASS);
|
|
1581
1606
|
state.key = 'last_modified';
|
|
1582
1607
|
if (modified.classList.contains(SELECTED_CLASS)) {
|
|
1583
1608
|
if (!modified.classList.contains(DESCENDING_CLASS)) {
|
|
@@ -1597,7 +1622,36 @@ export class DirListing extends Widget {
|
|
|
1597
1622
|
modified.classList.add(SELECTED_CLASS);
|
|
1598
1623
|
name.classList.remove(SELECTED_CLASS);
|
|
1599
1624
|
name.classList.remove(DESCENDING_CLASS);
|
|
1625
|
+
fileSize.classList.remove(SELECTED_CLASS);
|
|
1626
|
+
fileSize.classList.remove(DESCENDING_CLASS);
|
|
1600
1627
|
Private.updateCaret(nameIcon, 'right');
|
|
1628
|
+
Private.updateCaret(fileSizeIcon, 'left');
|
|
1629
|
+
return state;
|
|
1630
|
+
}
|
|
1631
|
+
if (fileSize.contains(target)) {
|
|
1632
|
+
state.key = 'file_size';
|
|
1633
|
+
if (fileSize.classList.contains(SELECTED_CLASS)) {
|
|
1634
|
+
if (!fileSize.classList.contains(DESCENDING_CLASS)) {
|
|
1635
|
+
state.direction = 'descending';
|
|
1636
|
+
fileSize.classList.add(DESCENDING_CLASS);
|
|
1637
|
+
Private.updateCaret(fileSizeIcon, 'left', 'down');
|
|
1638
|
+
}
|
|
1639
|
+
else {
|
|
1640
|
+
fileSize.classList.remove(DESCENDING_CLASS);
|
|
1641
|
+
Private.updateCaret(fileSizeIcon, 'left', 'up');
|
|
1642
|
+
}
|
|
1643
|
+
}
|
|
1644
|
+
else {
|
|
1645
|
+
fileSize.classList.remove(DESCENDING_CLASS);
|
|
1646
|
+
Private.updateCaret(fileSizeIcon, 'left', 'up');
|
|
1647
|
+
}
|
|
1648
|
+
fileSize.classList.add(SELECTED_CLASS);
|
|
1649
|
+
name.classList.remove(SELECTED_CLASS);
|
|
1650
|
+
name.classList.remove(DESCENDING_CLASS);
|
|
1651
|
+
modified.classList.remove(SELECTED_CLASS);
|
|
1652
|
+
modified.classList.remove(DESCENDING_CLASS);
|
|
1653
|
+
Private.updateCaret(nameIcon, 'right');
|
|
1654
|
+
Private.updateCaret(modifiedIcon, 'left');
|
|
1601
1655
|
return state;
|
|
1602
1656
|
}
|
|
1603
1657
|
return state;
|
|
@@ -1608,32 +1662,40 @@ export class DirListing extends Widget {
|
|
|
1608
1662
|
* @returns A new DOM node to use as a content item.
|
|
1609
1663
|
*/
|
|
1610
1664
|
createItemNode(hiddenColumns) {
|
|
1611
|
-
var _a, _b;
|
|
1612
1665
|
const node = document.createElement('li');
|
|
1613
1666
|
const icon = document.createElement('span');
|
|
1614
1667
|
const text = document.createElement('span');
|
|
1615
1668
|
const modified = document.createElement('span');
|
|
1669
|
+
const fileSize = document.createElement('span');
|
|
1616
1670
|
icon.className = ITEM_ICON_CLASS;
|
|
1617
1671
|
text.className = ITEM_TEXT_CLASS;
|
|
1618
1672
|
modified.className = ITEM_MODIFIED_CLASS;
|
|
1619
|
-
|
|
1673
|
+
fileSize.className = ITEM_FILE_SIZE_CLASS;
|
|
1674
|
+
if (!(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('is_selected'))) {
|
|
1620
1675
|
const checkboxWrapper = this.createCheckboxWrapperNode();
|
|
1621
1676
|
node.appendChild(checkboxWrapper);
|
|
1622
1677
|
}
|
|
1623
1678
|
node.appendChild(icon);
|
|
1624
1679
|
node.appendChild(text);
|
|
1625
1680
|
node.appendChild(modified);
|
|
1681
|
+
node.appendChild(fileSize);
|
|
1626
1682
|
// Make the text note focusable so that it receives keyboard events;
|
|
1627
1683
|
// text node was specifically chosen to receive shortcuts because
|
|
1628
1684
|
// text element gets substituted with input area during file name edits
|
|
1629
1685
|
// which conveniently deactivate irrelevant shortcuts.
|
|
1630
1686
|
text.tabIndex = 0;
|
|
1631
|
-
if (
|
|
1687
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('last_modified')) {
|
|
1632
1688
|
modified.classList.add(MODIFIED_COLUMN_HIDDEN);
|
|
1633
1689
|
}
|
|
1634
1690
|
else {
|
|
1635
1691
|
modified.classList.remove(MODIFIED_COLUMN_HIDDEN);
|
|
1636
1692
|
}
|
|
1693
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('file_size')) {
|
|
1694
|
+
fileSize.classList.add(FILE_SIZE_COLUMN_HIDDEN);
|
|
1695
|
+
}
|
|
1696
|
+
else {
|
|
1697
|
+
fileSize.classList.remove(FILE_SIZE_COLUMN_HIDDEN);
|
|
1698
|
+
}
|
|
1637
1699
|
return node;
|
|
1638
1700
|
}
|
|
1639
1701
|
/**
|
|
@@ -1681,7 +1743,6 @@ export class DirListing extends Widget {
|
|
|
1681
1743
|
*
|
|
1682
1744
|
*/
|
|
1683
1745
|
updateItemNode(node, model, fileType, translator, hiddenColumns, selected) {
|
|
1684
|
-
var _a, _b;
|
|
1685
1746
|
if (selected) {
|
|
1686
1747
|
node.classList.add(SELECTED_CLASS);
|
|
1687
1748
|
}
|
|
@@ -1693,8 +1754,9 @@ export class DirListing extends Widget {
|
|
|
1693
1754
|
const iconContainer = DOMUtils.findElement(node, ITEM_ICON_CLASS);
|
|
1694
1755
|
const text = DOMUtils.findElement(node, ITEM_TEXT_CLASS);
|
|
1695
1756
|
const modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS);
|
|
1757
|
+
const fileSize = DOMUtils.findElement(node, ITEM_FILE_SIZE_CLASS);
|
|
1696
1758
|
const checkboxWrapper = DOMUtils.findElement(node, CHECKBOX_WRAPPER_CLASS);
|
|
1697
|
-
const showFileCheckboxes = !(
|
|
1759
|
+
const showFileCheckboxes = !(hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('is_selected'));
|
|
1698
1760
|
if (checkboxWrapper && !showFileCheckboxes) {
|
|
1699
1761
|
node.removeChild(checkboxWrapper);
|
|
1700
1762
|
}
|
|
@@ -1702,12 +1764,18 @@ export class DirListing extends Widget {
|
|
|
1702
1764
|
const checkboxWrapper = this.createCheckboxWrapperNode();
|
|
1703
1765
|
node.insertBefore(checkboxWrapper, iconContainer);
|
|
1704
1766
|
}
|
|
1705
|
-
if (
|
|
1767
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('last_modified')) {
|
|
1706
1768
|
modified.classList.add(MODIFIED_COLUMN_HIDDEN);
|
|
1707
1769
|
}
|
|
1708
1770
|
else {
|
|
1709
1771
|
modified.classList.remove(MODIFIED_COLUMN_HIDDEN);
|
|
1710
1772
|
}
|
|
1773
|
+
if (hiddenColumns === null || hiddenColumns === void 0 ? void 0 : hiddenColumns.has('file_size')) {
|
|
1774
|
+
fileSize.classList.add(FILE_SIZE_COLUMN_HIDDEN);
|
|
1775
|
+
}
|
|
1776
|
+
else {
|
|
1777
|
+
fileSize.classList.remove(FILE_SIZE_COLUMN_HIDDEN);
|
|
1778
|
+
}
|
|
1711
1779
|
// render the file item's icon
|
|
1712
1780
|
LabIcon.resolveElement({
|
|
1713
1781
|
icon,
|
|
@@ -1719,8 +1787,13 @@ export class DirListing extends Widget {
|
|
|
1719
1787
|
let hoverText = trans.__('Name: %1', model.name);
|
|
1720
1788
|
// add file size to pop up if its available
|
|
1721
1789
|
if (model.size !== null && model.size !== undefined) {
|
|
1790
|
+
const fileSizeText = Private.formatFileSize(model.size, 1, 1024);
|
|
1791
|
+
fileSize.textContent = fileSizeText;
|
|
1722
1792
|
hoverText += trans.__('\nSize: %1', Private.formatFileSize(model.size, 1, 1024));
|
|
1723
1793
|
}
|
|
1794
|
+
else {
|
|
1795
|
+
fileSize.textContent = '';
|
|
1796
|
+
}
|
|
1724
1797
|
if (model.path) {
|
|
1725
1798
|
const dirname = PathExt.dirname(model.path);
|
|
1726
1799
|
if (dirname) {
|
|
@@ -1927,6 +2000,15 @@ var Private;
|
|
|
1927
2000
|
return t1 - t2 || (valA - valB) * reverse;
|
|
1928
2001
|
});
|
|
1929
2002
|
}
|
|
2003
|
+
else if (state.key === 'file_size') {
|
|
2004
|
+
// Sort by size (grouping directories first)
|
|
2005
|
+
copy.sort((a, b) => {
|
|
2006
|
+
var _a, _b;
|
|
2007
|
+
const t1 = a.type === 'directory' ? 0 : 1;
|
|
2008
|
+
const t2 = b.type === 'directory' ? 0 : 1;
|
|
2009
|
+
return t1 - t2 || (((_a = a.size) !== null && _a !== void 0 ? _a : 0) - ((_b = b.size) !== null && _b !== void 0 ? _b : 0)) * reverse;
|
|
2010
|
+
});
|
|
2011
|
+
}
|
|
1930
2012
|
else {
|
|
1931
2013
|
// Sort by name (grouping directories first)
|
|
1932
2014
|
copy.sort((a, b) => {
|
|
@@ -1952,10 +2034,10 @@ var Private;
|
|
|
1952
2034
|
function formatFileSize(bytes, decimalPoint, k) {
|
|
1953
2035
|
// https://www.codexworld.com/how-to/convert-file-size-bytes-kb-mb-gb-javascript/
|
|
1954
2036
|
if (bytes === 0) {
|
|
1955
|
-
return '0
|
|
2037
|
+
return '0 B';
|
|
1956
2038
|
}
|
|
1957
2039
|
const dm = decimalPoint || 2;
|
|
1958
|
-
const sizes = ['
|
|
2040
|
+
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
1959
2041
|
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
1960
2042
|
if (i >= 0 && i < sizes.length) {
|
|
1961
2043
|
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|