Skip to content

Commit 4e7b71c

Browse files
committed
🚑 📖 💪
1 parent 2792155 commit 4e7b71c

5 files changed

Lines changed: 50 additions & 16 deletions

File tree

web/README.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,32 @@
11
# @gaubee/web
22

33
该项目搜罗了一些与 DOM-API 相关的封装
4+
5+
## API
6+
7+
- **`createAdoptedStyleSheets`** 可以获得一个更加易用的 adoptedStyleSheets(用于管理样式表)
8+
直接改变这个数组的元素,可以直接让样式生效,另外,在数组的基础上,额外增加了一些快捷操作的方法:
9+
- 扩展 Array-Like 的方法
10+
- `remove: (item: CSSStyleSheet) => void`
11+
- `toggle: (item: CSSStyleSheet, enable?: boolean) => void`
12+
- `replace: (oldItem: CSSStyleSheet | null | undefined, newItem: CSSStyleSheet) => void`
13+
- 扩展 Map-like 的方法
14+
- `has: (key: unknown) => boolean`
15+
- `set: (key: unknown, item: CSSStyleSheet) => void`
16+
- `delete: (key: unknown) => void`
17+
- `get: (key: unknown) => CSSStyleSheet | undefined`
18+
- **`new CssSheetArray`** 可以获得一个更加易用的 CSSStyleSheet 控制器
19+
- 扩展属性
20+
- `owner: AdoptedStyleSheets | null` 可以附加到某个样式表上,或者移除
21+
- `readonly styleSheet: CSSStyleSheet` 获得 CSSStyleSheet 对象本身(请勿直接用它的 API 进行修改)
22+
- `readonly size: number` 获得 CSSRule 的数量
23+
- 扩展 Array-Like 方法
24+
- `addRule: (cssText: string, index?: number) => CSSRule | null`
25+
- `removeRule: (index: number) => boolean`
26+
- `getRule: (index: number) => CSSRule | null`
27+
- `[Symbol.iterator]`
28+
- 扩展 Map-like 的方法
29+
- `keys: () => MapIterator<unknown>`
30+
- `hasRule: (key: unknown) => boolean`
31+
- `setRule: (key: unknown, cssText: string, index?: number) => CSSRule | null`
32+
- `deleteRule: (key: unknown) => boolean`

web/deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@gaubee/web",
3-
"version": "0.6.0",
3+
"version": "0.6.2",
44
"exports": {
55
".": "./src/mod.ts"
66
},

web/src/adopted-style-sheets.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { map_delete_and_get, map_get_or_put } from "@gaubee/util";
22
import { func_remember } from "@gaubee/util";
33

4-
export const assMapWM = /*@__PURE__*/ new WeakMap<CSSStyleSheet[], Map<string, CSSStyleSheet>>();
4+
export const assMapWM = /*@__PURE__*/ new WeakMap<CSSStyleSheet[], Map<unknown, CSSStyleSheet>>();
55

66
export type AdoptedStyleSheets = (CSSStyleSheet[]) & {
77
// 扩展数组
@@ -10,10 +10,10 @@ export type AdoptedStyleSheets = (CSSStyleSheet[]) & {
1010
replace: (oldItem: CSSStyleSheet | null | undefined, newItem: CSSStyleSheet) => void;
1111

1212
// 扩展Map-like的操作
13-
has: (name: string) => boolean;
14-
set: (name: string, item: CSSStyleSheet) => void;
15-
delete: (name: string) => void;
16-
get: (name: string) => CSSStyleSheet | undefined;
13+
has: (key: unknown) => boolean;
14+
set: (key: unknown, item: CSSStyleSheet) => void;
15+
delete: (key: unknown) => void;
16+
get: (key: unknown) => CSSStyleSheet | undefined;
1717
};
1818
/**
1919
* 一个 adoptedStyleSheets 的垫片实现
@@ -53,25 +53,25 @@ export const createAdoptedStyleSheets = (
5353
};
5454

5555
const getMap = func_remember(() => map_get_or_put(assMapWM, root.adoptedStyleSheets, () => new Map()));
56-
const map_has = (name: string) => getMap().has(name);
57-
const map_set = (name: string, item: CSSStyleSheet) => {
56+
const map_has = (key: unknown) => getMap().has(key);
57+
const map_set = (key: unknown, item: CSSStyleSheet) => {
5858
const map = getMap();
59-
const oldItem = map.get(name);
59+
const oldItem = map.get(key);
6060
if (oldItem !== item) {
6161
replace(oldItem, item);
62-
map.set(name, item);
62+
map.set(key, item);
6363
}
6464
};
65-
const map_delete = (name: string) => {
65+
const map_delete = (key: unknown) => {
6666
const map = getMap();
67-
const oldItem = map_delete_and_get(map, name);
67+
const oldItem = map_delete_and_get(map, key);
6868
if (oldItem != null) {
6969
remove(oldItem);
7070
return true;
7171
}
7272
return false;
7373
};
74-
const map_get = (name: string) => getMap().get(name);
74+
const map_get = (key: unknown) => getMap().get(key);
7575
const toggle = (item: CSSStyleSheet, enable?: boolean) => {
7676
const hasItem = root.adoptedStyleSheets.includes(item);
7777
if (enable === false) {

web/src/css-sheet-array.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ export class CssSheetArray {
4343
}
4444

4545
#css = new CSSStyleSheet();
46+
get unsafeStyleSheet() {
47+
return this.#css;
48+
}
4649
/// 一个数组对象,用来提供 CSSRule 的索引
4750
#ruleList: CSSRule[] = [];
4851
get size() {
@@ -72,20 +75,21 @@ export class CssSheetArray {
7275
if (typeof ruleOrIndex === "number") {
7376
const rule = this.#ruleList[index = ruleOrIndex];
7477
if (rule == null) {
75-
return;
78+
return false;
7679
}
7780
} else {
7881
index = this.#ruleList.indexOf(ruleOrIndex);
7982
if (index === -1) {
80-
return;
83+
return false;
8184
}
8285
}
8386

8487
this.#css.deleteRule(index);
8588
this.#ruleList.splice(index, 1);
89+
return true;
8690
}
8791
getRule(index: number) {
88-
return this.#ruleList[index];
92+
return this.#ruleList.at(index);
8993
}
9094
[Symbol.iterator]() {
9195
return this.#ruleList[Symbol.iterator]();

web/src/mod.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from "./adopted-style-sheets.ts";
22
export * from "./css-sheet-map.ts";
3+
export * from "./css-sheet-array.ts";

0 commit comments

Comments
 (0)