Browse Source

feat(directives/ellipsis): add ellipsis directive (#2688)

pull/2696/head
kissGoodBye 4 years ago
committed by GitHub
parent
commit
122db78e84
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      src/directives/ellipsis.ts
  2. 2
      src/directives/index.ts

42
src/directives/ellipsis.ts

@ -0,0 +1,42 @@
import type { CSSProperties, DirectiveBinding, ObjectDirective, App } from 'vue';
interface IValue {
width?: number;
line?: number;
}
interface IOptions {
[key: string]: CSSProperties;
}
const cssProperties: IOptions = {
single: {
overflow: 'hidden',
textOverflow: 'ellipsis',
whiteSpace: 'nowrap',
},
multiple: {
display: '-webkit-box',
overflow: 'hidden',
wordBreak: 'break-all',
},
};
const Ellipsis: ObjectDirective = {
mounted(el: HTMLElement, binding: DirectiveBinding<Array<IValue>>) {
const { value = [100, 1], arg = 'single' } = binding;
const [width, line] = value;
Object.entries(cssProperties[arg]).forEach(([key, value]) => {
el.style[key] = value;
});
el.style.width = `${width}px`;
if (arg === 'multiple') {
el.style.webkitLineClamp = `${line}`;
el.style.webkitBoxOrient = 'vertical';
}
},
};
export function setupEllipsisDirective(app: App) {
app.directive('ellipsis', Ellipsis);
}
export default Ellipsis;

2
src/directives/index.ts

@ -4,8 +4,10 @@
import type { App } from 'vue';
import { setupPermissionDirective } from './permission';
import { setupLoadingDirective } from './loading';
import { setupEllipsisDirective } from './ellipsis';
export function setupGlobDirectives(app: App) {
setupPermissionDirective(app);
setupLoadingDirective(app);
setupEllipsisDirective(app);
}

Loading…
Cancel
Save