Skip to content

Commit 873b2b7

Browse files
authored
Merge pull request #1527 from processing/bug/sidebar-name-overflow
[#1526] Add ellipsis to sidebar file names
2 parents df99edb + 763ee14 commit 873b2b7

File tree

4 files changed

+82
-7
lines changed

4 files changed

+82
-7
lines changed

client/modules/IDE/components/FileNode.jsx

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,61 @@ import FolderRightIcon from '../../../images/triangle-arrow-right.svg';
1010
import FolderDownIcon from '../../../images/triangle-arrow-down.svg';
1111
import FileIcon from '../../../images/file.svg';
1212

13+
function parseFileName(name) {
14+
const nameArray = name.split('.');
15+
if (nameArray.length > 1) {
16+
const extension = `.${nameArray[nameArray.length - 1]}`;
17+
const baseName = nameArray.slice(0, -1).join('');
18+
const firstLetter = baseName[0];
19+
const lastLetter = baseName[baseName.length - 1];
20+
const middleText = baseName.slice(1, -1);
21+
return {
22+
baseName,
23+
firstLetter,
24+
lastLetter,
25+
middleText,
26+
extension
27+
};
28+
}
29+
const firstLetter = name[0];
30+
const lastLetter = name[name.length - 1];
31+
const middleText = name.slice(1, -1);
32+
return {
33+
baseName: name,
34+
firstLetter,
35+
lastLetter,
36+
middleText
37+
};
38+
}
39+
40+
function FileName({ name }) {
41+
const {
42+
baseName,
43+
firstLetter,
44+
lastLetter,
45+
middleText,
46+
extension
47+
} = parseFileName(name);
48+
return (
49+
<span className="sidebar__file-item-name-text">
50+
<span>{firstLetter}</span>
51+
{baseName.length > 2 &&
52+
<span className="sidebar__file-item-name--ellipsis">{middleText}</span>
53+
}
54+
{baseName.length > 1 &&
55+
<span>{lastLetter}</span>
56+
}
57+
{extension &&
58+
<span>{extension}</span>
59+
}
60+
</span>
61+
);
62+
}
63+
64+
FileName.propTypes = {
65+
name: PropTypes.string.isRequired
66+
};
67+
1368
export class FileNode extends React.Component {
1469
constructor(props) {
1570
super(props);
@@ -206,11 +261,12 @@ export class FileNode extends React.Component {
206261
</div>
207262
}
208263
<button
209-
aria-label="Name"
264+
aria-label={this.state.updatedName}
210265
className="sidebar__file-item-name"
211266
onClick={this.handleFileClick}
267+
data-testid="file-name"
212268
>
213-
{this.state.updatedName}
269+
<FileName name={this.state.updatedName} />
214270
</button>
215271
<input
216272
data-testid="input"

client/modules/IDE/components/FileNode.test.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ describe('<FileNode />', () => {
1313
};
1414

1515
const expectFileNameToBe = async (expectedName) => {
16-
const name = screen.getByLabelText(/Name/i);
16+
const name = screen.getByTestId('file-name');
1717
await waitFor(() => within(name).queryByText(expectedName));
1818
};
1919

client/modules/IDE/pages/IDEView.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ class IDEView extends React.Component {
254254
onChange={size => this.setState({ sidebarSize: size })}
255255
onDragFinished={this._handleSidebarPaneOnDragFinished}
256256
allowResize={this.props.ide.sidebarIsExpanded}
257-
minSize={20}
257+
minSize={125}
258258
>
259259
<Sidebar
260260
files={this.props.files}

client/styles/components/_sidebar.scss

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,28 @@
110110
}
111111
}
112112

113+
.sidebar__file-item-name--ellipsis {
114+
overflow-x: hidden;
115+
white-space: nowrap;
116+
text-overflow: ellipsis;
117+
min-width: #{15 / $base-font-size}rem;
118+
}
119+
120+
.sidebar__file-item-name-text {
121+
display: flex;
122+
width: 100%;
123+
overflow: hidden;
124+
min-width: #{50 / $base-font-size}rem;
125+
white-space: nowrap;
126+
text-align: left;
127+
}
128+
113129
.sidebar__file-item-name {
114130
padding: #{4 / $base-font-size}rem 0;
131+
padding-right: #{25 / $base-font-size}rem;
132+
font-family: Inconsolata, monospace;
133+
font-size: #{14 / $base-font-size}rem;
134+
overflow: hidden;
115135
.sidebar__file-item--editing & {
116136
display: none;
117137
}
@@ -174,6 +194,8 @@
174194
padding: 0;
175195
border: 0;
176196
width: calc(100% - #{63 / $base-font-size}rem);
197+
font-family: Inconsolata, monospace;
198+
font-size: #{14 / $base-font-size}rem;
177199
.sidebar__file-item--editing & {
178200
display: inline-block;
179201
}
@@ -254,9 +276,6 @@
254276
fill: getThemifyVariable('secondary-text-color');
255277
}
256278
}
257-
& svg {
258-
height: #{10 / $base-font-size}rem;
259-
}
260279
background-color: transparent;
261280
border: none;
262281
}

0 commit comments

Comments
 (0)