Skip to content

Commit 964bb2c

Browse files
committedDec 15, 2022
feat(zebra-stripes): add className option. #433
1 parent 5a3ad69 commit 964bb2c

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed
 

‎extensions/zebra-stripes/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export declare type ZebraStripesOptions = {
7878
* @example `[1,[2,6], 10]`
7979
*/
8080
lineNumber?: (number | number[])[] | null;
81+
/** @default `cm-zebra-stripe` */
82+
className?: string;
8183
};
8284
export declare function zebraStripes(options?: ZebraStripesOptions): Extension;
8385
```

‎extensions/zebra-stripes/src/index.ts

+16-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const stepSize = Facet.define({
1414
},
1515
});
1616

17-
const stripe = Decoration.line({
17+
let stripe = Decoration.line({
1818
attributes: { class: 'cm-zebra-stripe' },
1919
});
2020

@@ -57,10 +57,10 @@ const showStripes = ViewPlugin.fromClass(
5757
},
5858
);
5959

60-
const baseTheme = (opt: Pick<Partial<ZebraStripesOptions>, 'lightColor' | 'darkColor'> = {}) => {
60+
const baseTheme = (opt: Pick<Partial<ZebraStripesOptions>, 'lightColor' | 'darkColor' | 'className'> = {}) => {
6161
return EditorView.baseTheme({
62-
'&light .cm-zebra-stripe': { backgroundColor: opt.lightColor || '#eef6ff' },
63-
'&dark .cm-zebra-stripe': { backgroundColor: opt.darkColor || '#3a404d' },
62+
[`&light .${opt.className}`]: { backgroundColor: opt.lightColor || '#eef6ff' },
63+
[`&dark .${opt.className}`]: { backgroundColor: opt.darkColor || '#3a404d' },
6464
});
6565
};
6666

@@ -72,13 +72,18 @@ export type ZebraStripesOptions = {
7272
* @example `[1,[2,6], 10]`
7373
*/
7474
lineNumber?: (number | number[])[] | null;
75+
/** @default `cm-zebra-stripe` */
76+
className?: string;
7577
};
7678

7779
const range = (start: number, stop: number, step: number) =>
7880
Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step);
7981

8082
export function zebraStripes(options: ZebraStripesOptions = {}): Extension {
81-
const zebraStripeTheme = baseTheme({ lightColor: options.lightColor, darkColor: options.darkColor });
83+
const { className = 'cm-zebra-stripe' } = options;
84+
stripe = Decoration.line({
85+
attributes: { class: className },
86+
});
8287
if (options.lineNumber && Array.isArray(options.lineNumber)) {
8388
options.step = null;
8489
options.lineNumber = options.lineNumber.map((item) => {
@@ -90,10 +95,14 @@ export function zebraStripes(options: ZebraStripesOptions = {}): Extension {
9095
} else {
9196
options.lineNumber = null;
9297
}
93-
return [
98+
const extensions = [
9499
options.lineNumber === null ? [] : lineNumber.of(options.lineNumber || []),
95100
options.step === null ? [] : stepSize.of(options.step || 2),
96101
showStripes,
97-
zebraStripeTheme,
98102
];
103+
if (className) {
104+
const zebraStripeTheme = baseTheme({ lightColor: options.lightColor, darkColor: options.darkColor, className });
105+
extensions.push(zebraStripeTheme);
106+
}
107+
return extensions;
99108
}

0 commit comments

Comments
 (0)
Please sign in to comment.