Skip to content

Commit

Permalink
fix: word-wrap bug (anuraghazra#1378)
Browse files Browse the repository at this point in the history
* Fixed word-wrap bug

* ci(workflow): add 'npm' cache for actions/setup-node in .github/workflows (anuraghazra#1382)

* Revert "ci(workflow): add 'npm' cache for actions/setup-node in .github/workflows (anuraghazra#1382)"

This reverts commit 2723f00.

* chore: remove action cache

* chore: minor change

Co-authored-by: Markus Tyrkkö <[email protected]>
Co-authored-by: Oscar Dominguez <[email protected]>
Co-authored-by: Anurag <[email protected]>
  • Loading branch information
4 people authored and lencx committed May 16, 2022
1 parent 3ddf732 commit 4275f07
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/cards/repo-card.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ const renderRepoCard = (repo, options = {}) => {
}).join("");

const card = new Card({
defaultTitle: header,
defaultTitle: header.length > 35 ? `${header.slice(0, 35)}...` : header,
titlePrefixIcon: icons.contribs,
width: 400,
height,
Expand Down
20 changes: 15 additions & 5 deletions src/common/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,12 +220,22 @@ function getCardColors({
* @param {number} maxLines
* @returns {string[]}
*/
function wrapTextMultiline(text, width = 60, maxLines = 3) {
const wrapped = wrap(encodeHTML(text), { width })
.split("\n") // Split wrapped lines to get an array of lines
.map((line) => line.trim()); // Remove leading and trailing whitespace of each line
function wrapTextMultiline(text, width = 59, maxLines = 3) {
const fullWidthComma = ",";
const encoded = encodeHTML(text);
const isChinese = encoded.includes(fullWidthComma);

const lines = wrapped.slice(0, maxLines); // Only consider maxLines lines
let wrapped = [];

if (isChinese) {
wrapped = encoded.split(fullWidthComma); // Chinese full punctuation
} else {
wrapped = wrap(encoded, {
width,
}).split("\n"); // Split wrapped lines to get an array of lines
}

const lines = wrapped.map((line) => line.trim()).slice(0, maxLines); // Only consider maxLines lines

// Add "..." to the last line if the text exceeds maxLines
if (wrapped.length > maxLines) {
Expand Down
11 changes: 11 additions & 0 deletions tests/renderRepoCard.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ describe("Test renderRepoCard", () => {
);
});

it("should trim header", () => {
document.body.innerHTML = renderRepoCard({
...data_repo.repository,
name: "some-really-long-repo-name-for-test-purposes",
});

expect(document.getElementsByClassName("header")[0].textContent).toBe(
"some-really-long-repo-name-for-test...",
);
});

it("should trim description", () => {
document.body.innerHTML = renderRepoCard({
...data_repo.repository,
Expand Down
7 changes: 7 additions & 0 deletions tests/utils.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,11 @@ describe("wrapTextMultiline", () => {
);
expect(multiLineText).toEqual(["Hello", "world long..."]);
});
it("should wrap chinese by punctuation", () => {
let multiLineText = wrapTextMultiline(
"专门为刚开始刷题的同学准备的算法基地,没有最细只有更细,立志用动画将晦涩难懂的算法说的通俗易懂!",
);
expect(multiLineText.length).toEqual(3);
expect(multiLineText[0].length).toEqual(18 * 8); // &#xxxxx; x 8
});
});

0 comments on commit 4275f07

Please sign in to comment.