Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 17 additions & 7 deletions src/Example.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState } from 'react';
import Clamp from './lib';
import React, { useState } from "react";
import Clamp from "./lib";

const initialText = `Lorem ipsum dolor sit amet consectetur adipisicing elit.
Illum perspiciatis ea consequuntur ipsum deleniti placeat
Expand All @@ -13,6 +13,7 @@ perferendis laboriosam deserunt nobis, suscipit autem atque?`;
function Example() {
const [text, setText] = useState(initialText);
const [lines, setLines] = useState(2);
const [maxLines, setMaxLines] = useState(undefined);

return (
<div>
Expand All @@ -22,15 +23,24 @@ function Example() {
value={text}
cols={4}
rows={4}
onChange={ev => setText(ev.target.value)}
style={{ width: '100%', height: '150px' }}
onChange={(ev) => setText(ev.target.value)}
style={{ width: "100%", height: "150px" }}
/>
</div>
<div>
<label htmlFor="">Visible Lines</label>
<input
type="text"
value={lines}
onChange={ev => setLines(ev.target.value)}
onChange={(ev) => setLines(ev.target.value)}
/>
</div>
<div>
<label htmlFor="">Max Lines (leave empty by default)</label>
<input
type="text"
value={maxLines}
onChange={(ev) => setMaxLines(ev.target.value)}
/>
</div>

Expand All @@ -46,9 +56,9 @@ function Example() {
</span>
)}
lines={lines}
maxLines={8}
maxLines={maxLines}
withToggle
onShowMore={show => console.log(show)}
onShowMore={(show) => console.log(show)}
>
<p>{text}</p>
</Clamp>
Expand Down
22 changes: 11 additions & 11 deletions src/lib/clamp.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import React, { useState, Fragment, useEffect } from 'react';
import isCssEllipsisApplied from './utils/isCssEllipsisApplied';
import TruncatedElement from './truncatedElement';
import React, { useState, Fragment, useEffect } from "react";
import isCssEllipsisApplied from "./utils/isCssEllipsisApplied";
import TruncatedElement from "./truncatedElement";

const defaultShowMoreElement = ({ toggle }) => (
<button type="button" onClick={toggle}>
Expand All @@ -17,41 +17,41 @@ const defaultShowLessElement = ({ toggle }) => (
const Clamp = ({
children,
lines = 2,
maxLines = 8,
maxLines = undefined,
withTooltip = true,
withToggle = false,
showMoreElement = defaultShowMoreElement,
showLessElement = defaultShowLessElement,
onShowMore = () => {}
onShowMore = () => {},
}) => {
const [sLines, setLines] = useState(lines);
const [isExpanded, setIsExpanded] = useState(false);
const [showMore, setShowMore] = useState(false);

const handleToggleShowMore = show => {
const handleToggleShowMore = (show) => {
const newLines = show ? maxLines : lines;

setShowMore(showMore => !showMore);
setIsExpanded(isExpanded => !isExpanded);
setShowMore((showMore) => !showMore);
setIsExpanded((isExpanded) => !isExpanded);
setLines(newLines);

onShowMore(show);
};

const handleConfigElement = elem => {
const handleConfigElement = (elem) => {
if (!elem) return;

if (isCssEllipsisApplied(elem)) {
if (withTooltip) {
const title = elem.textContent;
elem.setAttribute('title', title);
elem.setAttribute("title", title);
}

if (withToggle && !showMore && !isExpanded) {
setShowMore(true);
}
} else {
elem.removeAttribute('title');
elem.removeAttribute("title");
setShowMore(false);
}
};
Expand Down
4 changes: 2 additions & 2 deletions src/lib/truncatedElement.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import React, { cloneElement, useMemo } from "react";

const Tag = "span";

const TruncatedElement = ({ children, lines, getRef }) => {
const TruncatedElement = ({ children, lines = undefined, getRef }) => {
const getStyles = useMemo(() => {
return {
overflow: "hidden",
display: "-webkit-box",
WebkitBoxOrient: "vertical",
WebkitLineClamp: parseInt(lines),
...(lines && { WebkitLineClamp: parseInt(lines) }),
};
}, [lines]);

Expand Down
2 changes: 1 addition & 1 deletion stats.html
Original file line number Diff line number Diff line change
Expand Up @@ -2638,7 +2638,7 @@
</script>
<script>
const chartParameters = {};
const data = {"version":1,"tree":{"name":"index.esm.js","children":[{"name":"utils","children":[{"name":"isCssEllipsisApplied.js","uid":"82b1-1"}]},{"name":"truncatedElement.js","uid":"82b1-2"},{"name":"clamp.js","uid":"82b1-3"},{"name":"index.js","uid":"82b1-4"},{"name":"\u0000rollupPluginBabelHelpers.js","uid":"82b1-0"}]},"nodes":{"82b1-0":{"renderedLength":2857,"id":"\u0000rollupPluginBabelHelpers.js"},"82b1-1":{"renderedLength":115,"id":"utils/isCssEllipsisApplied.js"},"82b1-2":{"renderedLength":932,"id":"truncatedElement.js"},"82b1-3":{"renderedLength":2517,"id":"clamp.js"},"82b1-4":{"renderedLength":0,"isEntry":true,"id":"index.js"},"82b1-5":{"renderedLength":0,"isExternal":true,"id":"react"}},"links":[{"source":"82b1-4","target":"82b1-3"},{"source":"82b1-3","target":"82b1-0"},{"source":"82b1-3","target":"82b1-5"},{"source":"82b1-3","target":"82b1-1"},{"source":"82b1-3","target":"82b1-2"},{"source":"82b1-2","target":"82b1-0"},{"source":"82b1-2","target":"82b1-5"}],"env":{"rollup":"2.4.0","rollup-plugin-visualizer":"4.0.4"},"options":{"gzip":false,"brotli":false}};
const data = {"version":1,"tree":{"name":"index.esm.js","children":[{"name":"utils","children":[{"name":"isCssEllipsisApplied.js","uid":"fbd6-1"}]},{"name":"truncatedElement.js","uid":"fbd6-2"},{"name":"clamp.js","uid":"fbd6-3"},{"name":"index.js","uid":"fbd6-4"},{"name":"\u0000rollupPluginBabelHelpers.js","uid":"fbd6-0"}]},"nodes":{"fbd6-0":{"renderedLength":2857,"id":"\u0000rollupPluginBabelHelpers.js"},"fbd6-1":{"renderedLength":115,"id":"utils/isCssEllipsisApplied.js"},"fbd6-2":{"renderedLength":967,"id":"truncatedElement.js"},"fbd6-3":{"renderedLength":3079,"id":"clamp.js"},"fbd6-4":{"renderedLength":0,"isEntry":true,"id":"index.js"},"fbd6-5":{"renderedLength":0,"isExternal":true,"id":"react"}},"links":[{"source":"fbd6-4","target":"fbd6-3"},{"source":"fbd6-3","target":"fbd6-0"},{"source":"fbd6-3","target":"fbd6-5"},{"source":"fbd6-3","target":"fbd6-1"},{"source":"fbd6-3","target":"fbd6-2"},{"source":"fbd6-2","target":"fbd6-0"},{"source":"fbd6-2","target":"fbd6-5"}],"env":{"rollup":"2.4.0","rollup-plugin-visualizer":"4.0.4"},"options":{"gzip":false,"brotli":false}};

document.addEventListener('DOMContentLoaded', () => {
const width = chartParameters.width || window.innerWidth;
Expand Down