mosaic-headless 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +3 -3
- package/README.ko.md +96 -0
- package/README.md +13 -4
- package/README.zh-TW.md +3 -3
- package/SKILL.md +3 -3
- package/assets/templates/platforms/claude-ai.json +1 -1
- package/assets/templates/platforms/claude-code.json +1 -1
- package/assets/templates/platforms/codex-cli.json +1 -1
- package/assets/templates/platforms/copilot.json +1 -1
- package/assets/templates/platforms/gemini-cli.json +1 -1
- package/bin/check-release.mjs +9 -2
- package/data/animatable-properties.csv +23 -23
- package/data/condition-comparators.csv +13 -13
- package/data/condition-subjects.csv +60 -60
- package/data/db-columns.csv +207 -207
- package/data/default-children.csv +11 -11
- package/data/dynamic-variables.csv +75 -75
- package/data/element-classes.csv +152 -152
- package/data/evaluator-functions.csv +20 -20
- package/data/interaction-types.csv +13 -13
- package/data/node-properties.csv +182 -182
- package/data/node-property-verification.csv +182 -182
- package/data/node-types.csv +123 -123
- package/data/node-verification.csv +123 -123
- package/data/placement-rules.csv +123 -123
- package/data/pluggables.csv +208 -208
- package/data/property-verification.csv +171 -171
- package/data/rest-routes.csv +115 -115
- package/data/rwd-verification.csv +577 -570
- package/data/style-properties.csv +99 -99
- package/data/style-states.csv +54 -54
- package/data/style-value-shapes.csv +23 -23
- package/data/style-verification.csv +99 -99
- package/package.json +59 -59
- package/references/failure-modes.md +22 -0
- package/sites/_moksa.py +72 -26
- package/sites/moksa.json +9071 -8684
- package/tools/verify_rwd.py +14 -1
- package/README.zh-CN.md +0 -87
- package/tools/build_all.py +0 -55
- package/tools/build_report.py +0 -221
package/README.ja.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[Mosaic Pro](https://mosaicbuilder.com)(Nextend)のサイトを、データモデルを直接書いて
|
|
4
4
|
構築・変更する — ビジュアルエディタも DOM も使わない。
|
|
5
5
|
|
|
6
|
-
*他の言語:[English](README.md) · [繁體中文](README.zh-TW.md) · [
|
|
6
|
+
*他の言語:[English](README.md) · [繁體中文](README.zh-TW.md) · [한국어](README.ko.md)*
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -45,7 +45,7 @@ URL に対応するテンプレなし HTTP 406、未ログインには空の b
|
|
|
45
45
|
| **ノードタイプ** | 122 / 122。1 ドキュメントにつき 1 タイプで commit → 描画 → 断言 → 削除。70 RENDERED、30 COMMITTED、15 COMMIT_5xx、7 BROKE_PAGE |
|
|
46
46
|
| **スタイルプロパティ** | 98 / 98 を実ページに書き、コンパイル済み CSS と照合:58 COMPILED、18 ABSENT、21 SKIPPED |
|
|
47
47
|
| **ノードプロパティ** | 181 / 181 を、各プロパティ自身の validator chain から導いた値で再測定:35 APPLIED、42 NO_EFFECT、55 NO_HOST、47 SKIPPED |
|
|
48
|
-
| **レスポンシブ** | 2 サイト計
|
|
48
|
+
| **レスポンシブ** | 2 サイト計 576 件の `_t`/`_m` 宣言を、サイトが実際に配信したスタイルシートに対して 1 件ずつ断言 — 全件検証済み |
|
|
49
49
|
| **テーマの書き出し/読み込み** | 往復検証済み:テーマ全体を書き出し、コピーとして読み込み、そのコピーがバイト単位で同一のページを配信 |
|
|
50
50
|
| **実測** | REST ルート 114、element class 151、条件サブジェクト 59、23 テーブル / 206 カラム |
|
|
51
51
|
|
|
@@ -77,7 +77,7 @@ wp eval-file tools/theme_import.php theme.json "名前" rebind activate
|
|
|
77
77
|
|
|
78
78
|
`sites/_moksa.py` が完全な実例:実在するスタジオのトップページ — マストヘッド、仕様ブロック、
|
|
79
79
|
サービス、9 行の実績テーブル、プロセス、技術スタック、プロダクト、推薦の声、連絡先 —
|
|
80
|
-
**
|
|
80
|
+
**618 ノードをすべてテーブル経由で commit**。名前付き view timeline で作った、スクロールに
|
|
81
81
|
追随する条項インデックスも含め、JavaScript は一切使っていない。
|
|
82
82
|
|
|
83
83
|
## どこから読むか
|
package/README.ko.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# mosaic-headless
|
|
2
|
+
|
|
3
|
+
[Mosaic Pro](https://mosaicbuilder.com)(Nextend) 사이트를 데이터 모델에 직접 써서
|
|
4
|
+
구축하고 수정한다 — 비주얼 에디터도, DOM도 쓰지 않는다.
|
|
5
|
+
|
|
6
|
+
*다른 언어: [English](README.md) · [繁體中文](README.zh-TW.md) · [日本語](README.ja.md)*
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Mosaic은 페이지를 **23개의 커스텀 테이블**에 보관한다. `post_content`도 아니고
|
|
11
|
+
`postmeta`도 아니다. 요소 하나당 한 행, 트리 구조는 `parentID` 컬럼, 형제 순서는
|
|
12
|
+
fractional-index 문자열이다. 에디터는 이 모델의 한 클라이언트일 뿐이다.
|
|
13
|
+
포맷 그 자체가 아니며, 반드시 쓸 필요도 없다.
|
|
14
|
+
|
|
15
|
+
이 skill은 그 모델의 지도이며, **소스를 읽은 것이 아니라 실제 설치본을 상대로
|
|
16
|
+
측정한 것**이다.
|
|
17
|
+
|
|
18
|
+
## 모든 것에 우선하는 단 하나의 규칙
|
|
19
|
+
|
|
20
|
+
**노드 타입, 속성 이름, 열거값, 스타일 키, Free/Pro 판단을 기억으로 쓰지 말 것.
|
|
21
|
+
`data/`에서 찾아볼 것.**
|
|
22
|
+
|
|
23
|
+
그리고 페이지를 확인한다. Mosaic의 실패 방식은 네 가지이고,
|
|
24
|
+
**그중 HTTP 상태 코드가 바뀌는 것은 하나뿐이다**:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
검증기의 정상적인 거부 HTTP 200 + body에 exceptions 배열
|
|
28
|
+
commit 중 PHP fatal HTTP 500 (122개 타입 중 15개, 맨 div 안에서도 발생)
|
|
29
|
+
구조적으로 잘못된 노드 HTTP 200, 커밋됨, DB에 행도 있음. 그리고
|
|
30
|
+
공개 페이지 전체가 54바이트 에러 문자열이 된다
|
|
31
|
+
값의 "모양"이 틀림 HTTP 200, 저장됨. 다만 CSS 규칙이 존재하지 않는다
|
|
32
|
+
URL에 맞는 템플릿 없음 HTTP 406, 로그인하지 않은 사용자에게는 빈 body
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**commit 성공은 페이지가 동작한다는 증거가 아니다.**
|
|
36
|
+
|
|
37
|
+
## 무엇을, 어떻게 검증했는가
|
|
38
|
+
|
|
39
|
+
전부 실제 설치본에서 실행 — WordPress 7.1, WooCommerce 11.1, Mosaic Pro 1.0.7,
|
|
40
|
+
**라이선스 없음**: 라이선스가 제한하는 것은 테마 라이브러리와 업데이트이지
|
|
41
|
+
노드 팩토리가 아니므로 Pro 타입도 등록되고 렌더링된다.
|
|
42
|
+
|
|
43
|
+
| 항목 | 결과 |
|
|
44
|
+
|---|---|
|
|
45
|
+
| **노드 타입** | 122 / 122. 문서 하나당 타입 하나로 commit → 렌더 → 단언 → 삭제. 70 RENDERED, 30 COMMITTED, 15 COMMIT_5xx, 7 BROKE_PAGE |
|
|
46
|
+
| **스타일 속성** | 98 / 98을 실제 페이지에 쓰고 컴파일된 CSS와 대조: 58 COMPILED, 18 ABSENT, 21 SKIPPED |
|
|
47
|
+
| **노드 속성** | 181 / 181을 각 속성 자신의 validator chain에서 도출한 값으로 재측정: 35 APPLIED, 42 NO_EFFECT, 55 NO_HOST, 47 SKIPPED |
|
|
48
|
+
| **반응형** | 두 사이트 합쳐 576개의 `_t`/`_m` 선언을, 사이트가 실제로 내보낸 스타일시트에 대해 하나씩 단언 — 전부 검증됨 |
|
|
49
|
+
| **테마 내보내기/가져오기** | 왕복 검증: 테마 전체를 내보내 사본으로 가져왔고, 사본이 바이트 단위로 동일한 페이지를 제공 |
|
|
50
|
+
| **실측** | REST 라우트 114개, element class 151개, 조건 주체 59개, 23개 테이블 / 206개 컬럼 |
|
|
51
|
+
|
|
52
|
+
`SKIPPED`, `NO_HOST`, `INCONCLUSIVE`를 합격률에 섞는 일은 결코 없다.
|
|
53
|
+
**자신의 사각지대를 성공으로 세는 스윕이야말로 이 skill이 반대하는 것이다.**
|
|
54
|
+
|
|
55
|
+
### 쓰기 시작하기 전에 알아둘 가치가 있는 두 가지 결과
|
|
56
|
+
|
|
57
|
+
**`group`을 가진 속성은 단독으로 설정하면 동작하지 않는다.** 양방향 모두 정확하다:
|
|
58
|
+
group이 없는 78개는 58 COMPILED / 0 ABSENT, group이 있는 20개는 전부 0 COMPILED.
|
|
59
|
+
즉 `borderLeftWidth`, `outlineColor`, `gridColumnStart`는 서로 다른 세 개의 기벽이
|
|
60
|
+
아니라 **하나의 규칙의 세 가지 사례**다. 그룹 형태를 쓰거나(`border`는
|
|
61
|
+
`{width, style, color}`를 받는다) `customStyles`로 내려간다.
|
|
62
|
+
|
|
63
|
+
**브레이크포인트 오버라이드는 속성을 "바꿀" 수는 있어도 "없앨" 수는 없다.**
|
|
64
|
+
좁은 화면의 `customStyles`가 단지 테두리를 쓰지 않았을 뿐이라면 넓은 화면의 테두리는
|
|
65
|
+
살아남아, 한 칼럼으로 접힌 레이아웃 한가운데에 선을 긋는다.
|
|
66
|
+
**`border-left:0`이라고 명시적으로 말해야 한다.**
|
|
67
|
+
|
|
68
|
+
## 도구
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
wp eval-file tools/bootstrap_probe_theme.php # 라이선스 없이 쓰는 작업용 테마
|
|
72
|
+
python tools/build_site.py --config c.json --site sites/moksa.json
|
|
73
|
+
python tools/verify_rwd.py --config c.json --site sites/moksa.json --csv rwd.csv
|
|
74
|
+
python tools/copy_styles.py --config c.json --from a --to-prefix b- --only "&._m"
|
|
75
|
+
wp eval-file tools/theme_export.php active > theme.json
|
|
76
|
+
wp eval-file tools/theme_import.php theme.json "이름" rebind activate
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
`sites/_moksa.py`가 완전한 예제다. 실재하는 스튜디오의 홈페이지 — 머리기사, 사양 블록,
|
|
80
|
+
서비스, 9행짜리 작업 테이블, 프로세스, 기술 스택, 제품, 고객 추천사, 연락처 —
|
|
81
|
+
**618개의 노드를 전부 테이블을 통해 commit**했고, 이름 붙인 view timeline으로 만든
|
|
82
|
+
스크롤 추적 조항 인덱스까지 JavaScript는 한 줄도 쓰지 않았다.
|
|
83
|
+
|
|
84
|
+
## 어디부터 읽을 것인가
|
|
85
|
+
|
|
86
|
+
1. `references/data-model.md` — 페이지가 실제로 어디에 있는가.
|
|
87
|
+
2. `references/write-protocol.md` — checkout / check / commit.
|
|
88
|
+
3. `references/failure-modes.md` — Mosaic이 깨지는 방식, 전부 실측. **쓰기 전에 읽을 것.**
|
|
89
|
+
4. `references/responsive.md` — state / breakpoint / property 축.
|
|
90
|
+
5. `references/styling.md` — 스타일 값이 CSS가 되기까지.
|
|
91
|
+
6. `references/design-system.md` — element class와 디자인 토큰.
|
|
92
|
+
|
|
93
|
+
## 라이선스
|
|
94
|
+
|
|
95
|
+
MIT. Mosaic Pro 자체는 라이선스가 있는 서드파티 소프트웨어이며 이 repo에
|
|
96
|
+
**포함되어 있지 않다**.
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Build and modify [Mosaic Pro](https://mosaicbuilder.com) (Nextend) sites by writing
|
|
4
4
|
the data model directly — no visual editor, no DOM.
|
|
5
5
|
|
|
6
|
-
*Read this in [繁體中文](README.zh-TW.md) · [
|
|
6
|
+
*Read this in [繁體中文](README.zh-TW.md) · [日本語](README.ja.md) · [한국어](README.ko.md)*
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -45,7 +45,7 @@ factories, so Pro types register and render regardless.
|
|
|
45
45
|
| **node types** | 122 / 122 swept one per document, committed → rendered → asserted → deleted: 70 RENDERED, 30 COMMITTED, 15 COMMIT_5xx, 7 BROKE_PAGE |
|
|
46
46
|
| **style properties** | 98 / 98 written to a live page and checked against the compiled CSS: 58 COMPILED, 18 ABSENT, 21 SKIPPED |
|
|
47
47
|
| **node properties** | 181 / 181 re-probed with a value shaped by each property's own validator chain: 35 APPLIED, 42 NO_EFFECT, 55 NO_HOST, 47 SKIPPED |
|
|
48
|
-
| **responsive** |
|
|
48
|
+
| **responsive** | 576 `_t`/`_m` declarations across two sites asserted against the stylesheet the site actually served — all verified |
|
|
49
49
|
| **theme export/import** | round-tripped: a full theme exported, re-imported as a copy, and the copy served byte-identical pages |
|
|
50
50
|
| **measured live** | 114 REST routes, 151 element classes, 59 condition subjects, 23 tables / 206 columns |
|
|
51
51
|
|
|
@@ -77,7 +77,7 @@ wp eval-file tools/theme_import.php theme.json "Name" rebind activate
|
|
|
77
77
|
|
|
78
78
|
`sites/_moksa.py` is the worked example: a real studio homepage — masthead, spec
|
|
79
79
|
block, services, a nine-row work table, process, stack, products, testimonials,
|
|
80
|
-
contact —
|
|
80
|
+
contact — 618 nodes committed entirely through the tables, with a scroll-tracking
|
|
81
81
|
clause index built on named view timelines and no JavaScript.
|
|
82
82
|
|
|
83
83
|
## Where to start
|
|
@@ -126,7 +126,16 @@ wrong rather than the things that are easy to check:
|
|
|
126
126
|
or not. Listing `sites/` once put a real client's generator and content into the
|
|
127
127
|
tarball — gitignored, and about to be published anyway.
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
Publishing runs on npm trusted publishing (OIDC): npm trusts this repository's
|
|
130
|
+
`release.yml` directly, so there is no token in the repository's secrets and
|
|
131
|
+
nothing to rotate. Provenance is attached automatically.
|
|
132
|
+
|
|
133
|
+
One-time setup, on npmjs.com under the package's Settings → Trusted Publisher:
|
|
134
|
+
publisher `GitHub Actions`, organisation `Moksa1123`, repository
|
|
135
|
+
`mosaic-headless`, workflow filename `release.yml`, environment name left
|
|
136
|
+
**empty** — the workflow declares no environment, and a value here that the run
|
|
137
|
+
does not match is refused. The connection cannot be edited afterwards, only
|
|
138
|
+
deleted and recreated.
|
|
130
139
|
|
|
131
140
|
## Licence
|
|
132
141
|
|
package/README.zh-TW.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
直接寫入資料模型來建置與修改 [Mosaic Pro](https://mosaicbuilder.com)(Nextend)網站——
|
|
4
4
|
不開視覺編輯器,不碰 DOM。
|
|
5
5
|
|
|
6
|
-
*其他語言:[English](README.md) · [
|
|
6
|
+
*其他語言:[English](README.md) · [日本語](README.ja.md) · [한국어](README.ko.md)*
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
@@ -40,7 +40,7 @@ commit 時 PHP fatal HTTP 500 (122 種型別裡有 15 種,光放在 div
|
|
|
40
40
|
| **節點型別** | 122 / 122,一份文件一種型別:寫入 → 渲染 → 斷言 → 刪除。70 RENDERED、30 COMMITTED、15 COMMIT_5xx、7 BROKE_PAGE |
|
|
41
41
|
| **樣式屬性** | 98 / 98 寫進真實頁面並對照編譯後的 CSS:58 COMPILED、18 ABSENT、21 SKIPPED |
|
|
42
42
|
| **節點屬性** | 181 / 181,用每個屬性自己的 validator chain 推導出的值重測:35 APPLIED、42 NO_EFFECT、55 NO_HOST、47 SKIPPED |
|
|
43
|
-
| **響應式** | 兩個站共
|
|
43
|
+
| **響應式** | 兩個站共 576 條 `_t`/`_m` 宣告,對照網站實際送出的樣式表逐條斷言——全數通過 |
|
|
44
44
|
| **主題匯出/匯入** | 完整來回驗證:匯出整個主題、以副本身分匯入,副本送出的頁面逐位元組相同 |
|
|
45
45
|
| **線上量測** | 114 條 REST 路由、151 個 element class、59 個條件主體、23 張表 / 206 個欄位 |
|
|
46
46
|
|
|
@@ -70,7 +70,7 @@ wp eval-file tools/theme_import.php theme.json "名稱" rebind activate
|
|
|
70
70
|
```
|
|
71
71
|
|
|
72
72
|
`sites/_moksa.py` 是完整範例:一個真實工作室的首頁——刊頭、規格區塊、服務、九列作品表格、
|
|
73
|
-
流程、技術堆疊、產品、客戶見證、聯絡——**
|
|
73
|
+
流程、技術堆疊、產品、客戶見證、聯絡——**618 個節點全部透過資料表寫入**,
|
|
74
74
|
還有一個用具名 view timeline 做的、會跟著捲動的條款索引,完全沒有 JavaScript。
|
|
75
75
|
|
|
76
76
|
## 從哪裡開始讀
|
package/SKILL.md
CHANGED
|
@@ -4,7 +4,7 @@ description: |
|
|
|
4
4
|
Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 properties, 98 style properties with 20 structured value shapes pinned down, 53 style states, 151 element classes, 74 dynamic variables, 12 interaction triggers, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, the design-token and element-class layers verified against compiled CSS, the @VAR() dynamic language verified against rendered output, and nine designed pages built through the tables themselves.
|
|
5
5
|
license: "MIT"
|
|
6
6
|
author: "moksa (https://moksaweb.com)"
|
|
7
|
-
version: "1.2.
|
|
7
|
+
version: "1.2.1"
|
|
8
8
|
---
|
|
9
9
|
|
|
10
10
|
# Headless Mosaic
|
|
@@ -105,7 +105,7 @@ PROPERTIES 170 probes over the declared property surface, each value asserted
|
|
|
105
105
|
against the delivered markup and the compiled CSS separately.
|
|
106
106
|
data/property-verification.csv
|
|
107
107
|
|
|
108
|
-
RWD
|
|
108
|
+
RWD 576 responsive declarations across two sites asserted against the
|
|
109
109
|
stylesheet the site actually served - each `_t`/`_m` property matched
|
|
110
110
|
to its element's generated class inside that breakpoint's own media
|
|
111
111
|
query. All verified; the checker is itself checked against a poisoned
|
|
@@ -228,7 +228,7 @@ so the pattern is in the data, not just in this paragraph.
|
|
|
228
228
|
| `data/property-verification.csv` | 170 | **probed live** — per-property effect on markup vs CSS, with unprovable enums marked INCONCLUSIVE |
|
|
229
229
|
| `data/node-property-verification.csv` | 181 | **swept live** — each property probed with a value shaped by its own validator chain, on a type that declares it |
|
|
230
230
|
| `data/style-verification.csv` | 98 | **swept live** — every style property written to a page and checked against the compiled CSS, with its group beside the result |
|
|
231
|
-
| `data/rwd-verification.csv` |
|
|
231
|
+
| `data/rwd-verification.csv` | 576 | **checked live** - every `_t`/`_m` declaration vs the served stylesheet, with status per row |
|
|
232
232
|
| `data/element-classes.csv` | 151 | **live** — the built-in class metas; their IDs are what an `elementClass` record must use |
|
|
233
233
|
| `data/dynamic-variables.csv` | 74 | source — every `@VAR('ns/name')` expression, by namespace |
|
|
234
234
|
| `data/evaluator-functions.csv` | 19 | source — the `@` functions with their arity |
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"description": "Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 node properties, 98 style properties, 53 style states, 151 element classes, 74 dynamic variables, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, every style and node property swept against the compiled CSS and markup, and 569 responsive declarations checked against the stylesheet the site actually served.",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "moksa (https://moksaweb.com)",
|
|
23
|
-
"version": "1.2.
|
|
23
|
+
"version": "1.2.1"
|
|
24
24
|
},
|
|
25
25
|
"loaderBehaviour": "Upload via Settings -> Skills -> Upload. Claude.ai parses SKILL.md frontmatter and surfaces the skill in your library. The extraction tool (extract-block-schema.php) needs a live WP-CLI connection and won't run in the sandbox; use it from a local terminal against your own site instead.",
|
|
26
26
|
"uploadSteps": [
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"description": "Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 node properties, 98 style properties, 53 style states, 151 element classes, 74 dynamic variables, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, every style and node property swept against the compiled CSS and markup, and 569 responsive declarations checked against the stylesheet the site actually served.",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "moksa (https://moksaweb.com)",
|
|
23
|
-
"version": "1.2.
|
|
23
|
+
"version": "1.2.1"
|
|
24
24
|
},
|
|
25
25
|
"loaderBehaviour": "Auto-loads on session start when SKILL.md frontmatter parses successfully.",
|
|
26
26
|
"verified": true,
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"description": "Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 node properties, 98 style properties, 53 style states, 151 element classes, 74 dynamic variables, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, every style and node property swept against the compiled CSS and markup, and 569 responsive declarations checked against the stylesheet the site actually served.",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "moksa (https://moksaweb.com)",
|
|
23
|
-
"version": "1.2.
|
|
23
|
+
"version": "1.2.1"
|
|
24
24
|
},
|
|
25
25
|
"loaderBehaviour": "Confirmed (2026-07-11): Codex CLI natively supports the SKILL.md spec. Place SKILL.md under .codex/skills/<name>/ (project) or ~/.codex/skills/<name>/ (personal) and Codex loads the name+description at session start, then the full body on demand. A parallel, broader convention .agents/skills/ (searched from cwd up to repo root, then ~/.agents/skills/) also exists across multiple tools - if your Codex CLI version prioritizes that path instead, mirror the same SKILL.md there.",
|
|
26
26
|
"verified": true,
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"description": "Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 node properties, 98 style properties, 53 style states, 151 element classes, 74 dynamic variables, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, every style and node property swept against the compiled CSS and markup, and 569 responsive declarations checked against the stylesheet the site actually served.",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "moksa (https://moksaweb.com)",
|
|
23
|
-
"version": "1.2.
|
|
23
|
+
"version": "1.2.1"
|
|
24
24
|
},
|
|
25
25
|
"loaderBehaviour": "CHANGED as of 2026-07-11: GitHub Copilot added a proper '.github/skills/' Agent Skills directory (December 2025), alongside the older single-file .github/copilot-instructions.md convention. This config targets the new skills-directory form. If your Copilot version predates this (pre Dec 2025), use the instructions-append fallback instead (see fallback below).",
|
|
26
26
|
"fallback": {
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"description": "Build and modify Mosaic Pro (Nextend) sites by writing the underlying data model directly - no visual editor, no DOM. Query the real surface (122 node types, 181 node properties, 98 style properties, 53 style states, 151 element classes, 74 dynamic variables, 114 REST routes, 23 tables) instead of guessing, with every node type placed on a live site one at a time and asserted against the delivered HTML, every style and node property swept against the compiled CSS and markup, and 569 responsive declarations checked against the stylesheet the site actually served.",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"author": "moksa (https://moksaweb.com)",
|
|
23
|
-
"version": "1.2.
|
|
23
|
+
"version": "1.2.1"
|
|
24
24
|
},
|
|
25
25
|
"loaderBehaviour": "CHANGED as of 2026-07-11: Gemini CLI now natively supports the same SKILL.md standard as Claude Code and Codex CLI - the same directory-based skill works unmodified. Gemini CLI discovers skills in this precedence order: built-in, extension skills, ~/.gemini/skills/ (personal), .gemini/skills/ (project, shared via version control). At session start Gemini injects each discovered skill's name+description into the system prompt and calls activate_skill when a task matches.",
|
|
26
26
|
"verified": true,
|
package/bin/check-release.mjs
CHANGED
|
@@ -78,7 +78,7 @@ const counts = {
|
|
|
78
78
|
"data/node-verification.csv": 122,
|
|
79
79
|
"data/style-verification.csv": 98,
|
|
80
80
|
"data/node-property-verification.csv": 181,
|
|
81
|
-
"data/rwd-verification.csv":
|
|
81
|
+
"data/rwd-verification.csv": 576,
|
|
82
82
|
};
|
|
83
83
|
for (const [file, expected] of Object.entries(counts)) {
|
|
84
84
|
if (!fs.existsSync(path.join(ROOT, file))) { fail(`${file} missing`); continue; }
|
|
@@ -113,7 +113,14 @@ try {
|
|
|
113
113
|
if (packed) {
|
|
114
114
|
let files = [];
|
|
115
115
|
try {
|
|
116
|
-
|
|
116
|
+
// npm 11 returns an array of packed packages; npm 12 returns an object keyed
|
|
117
|
+
// by package name. Reading only the array shape against npm 12 yields zero
|
|
118
|
+
// files, and a leak check over zero files passes - which is the blind spot
|
|
119
|
+
// scored as a success that this whole file exists to prevent. The
|
|
120
|
+
// `files.length === 0` assertion below is the backstop that caught it.
|
|
121
|
+
const parsed = JSON.parse(packed);
|
|
122
|
+
const packs = Array.isArray(parsed) ? parsed : Object.values(parsed);
|
|
123
|
+
files = (packs[0]?.files || []).map((f) => f.path.split("\\").join("/"));
|
|
117
124
|
} catch { fail("could not parse `npm pack --json` output"); }
|
|
118
125
|
|
|
119
126
|
const forbidden = [
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
property,kind,animates_via
|
|
2
|
-
transform,Transform,(the CSS property)
|
|
3
|
-
translateX,Move,--mosaic-translate-x
|
|
4
|
-
translateY,Move,--mosaic-translate-y
|
|
5
|
-
translateZ,Move,--mosaic-translate-z
|
|
6
|
-
scale,Scale,--mosaic-scale
|
|
7
|
-
scaleX,Scale,--mosaic-scale-x
|
|
8
|
-
scaleY,Scale,--mosaic-scale-y
|
|
9
|
-
scaleZ,Scale,--mosaic-scale-z
|
|
10
|
-
rotateX,Rotate,--mosaic-rotate-x
|
|
11
|
-
rotateY,Rotate,--mosaic-rotate-y
|
|
12
|
-
rotateZ,Rotate,--mosaic-rotate-z
|
|
13
|
-
opacity,Opacity,(the CSS property)
|
|
14
|
-
color,Color,(the CSS property)
|
|
15
|
-
backgroundColor,Color,(the CSS property)
|
|
16
|
-
borderColor,Color,(the CSS property)
|
|
17
|
-
boxShadow,BoxShadow,(the CSS property)
|
|
18
|
-
textShadow,TextShadow,(the CSS property)
|
|
19
|
-
width,Size,(the CSS property)
|
|
20
|
-
height,Size,(the CSS property)
|
|
21
|
-
filter,Filter,(the CSS property)
|
|
22
|
-
backdropFilter,Filter,(the CSS property)
|
|
23
|
-
transformOrigin,TransformOrigin,(the CSS property)
|
|
1
|
+
property,kind,animates_via
|
|
2
|
+
transform,Transform,(the CSS property)
|
|
3
|
+
translateX,Move,--mosaic-translate-x
|
|
4
|
+
translateY,Move,--mosaic-translate-y
|
|
5
|
+
translateZ,Move,--mosaic-translate-z
|
|
6
|
+
scale,Scale,--mosaic-scale
|
|
7
|
+
scaleX,Scale,--mosaic-scale-x
|
|
8
|
+
scaleY,Scale,--mosaic-scale-y
|
|
9
|
+
scaleZ,Scale,--mosaic-scale-z
|
|
10
|
+
rotateX,Rotate,--mosaic-rotate-x
|
|
11
|
+
rotateY,Rotate,--mosaic-rotate-y
|
|
12
|
+
rotateZ,Rotate,--mosaic-rotate-z
|
|
13
|
+
opacity,Opacity,(the CSS property)
|
|
14
|
+
color,Color,(the CSS property)
|
|
15
|
+
backgroundColor,Color,(the CSS property)
|
|
16
|
+
borderColor,Color,(the CSS property)
|
|
17
|
+
boxShadow,BoxShadow,(the CSS property)
|
|
18
|
+
textShadow,TextShadow,(the CSS property)
|
|
19
|
+
width,Size,(the CSS property)
|
|
20
|
+
height,Size,(the CSS property)
|
|
21
|
+
filter,Filter,(the CSS property)
|
|
22
|
+
backdropFilter,Filter,(the CSS property)
|
|
23
|
+
transformOrigin,TransformOrigin,(the CSS property)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
context,rule_type,comparator,label,operators,settings_fields,field_types,supports_dynamic
|
|
2
|
-
element,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,yes
|
|
3
|
-
element,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,yes
|
|
4
|
-
element,serverCondition,date,Date,after|before,value,dateTime,yes
|
|
5
|
-
formAction,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,yes
|
|
6
|
-
formAction,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,yes
|
|
7
|
-
formAction,serverCondition,date,Date,after|before,value,dateTime,yes
|
|
8
|
-
interaction,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,no
|
|
9
|
-
interaction,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
10
|
-
interaction,browserCondition,text,Text,equals|not-equals|contains|not-contains|starts-with,value,text,no
|
|
11
|
-
interaction,browserCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
12
|
-
template,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,no
|
|
13
|
-
template,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
1
|
+
context,rule_type,comparator,label,operators,settings_fields,field_types,supports_dynamic
|
|
2
|
+
element,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,yes
|
|
3
|
+
element,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,yes
|
|
4
|
+
element,serverCondition,date,Date,after|before,value,dateTime,yes
|
|
5
|
+
formAction,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,yes
|
|
6
|
+
formAction,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,yes
|
|
7
|
+
formAction,serverCondition,date,Date,after|before,value,dateTime,yes
|
|
8
|
+
interaction,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,no
|
|
9
|
+
interaction,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
10
|
+
interaction,browserCondition,text,Text,equals|not-equals|contains|not-contains|starts-with,value,text,no
|
|
11
|
+
interaction,browserCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
12
|
+
template,serverCondition,text,Text,equals|not-equals|contains|not-contains|starts-with|regexp,value,text,no
|
|
13
|
+
template,serverCondition,number,Number,equals|not-equals|greater-than|greater-than-or-equal|less-than|less-than-or-equal,value,number,no
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
context,rule_type,id,label,group,group_label,settings_fields,field_types,default_comparator,default_operator
|
|
2
|
-
element,serverCondition,variable,Variable,editor,Editor,dynamicCode,dynamicCode,text,equals
|
|
3
|
-
element,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
4
|
-
element,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
5
|
-
element,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
6
|
-
element,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
7
|
-
element,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
8
|
-
element,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
9
|
-
element,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
10
|
-
element,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
11
|
-
element,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
12
|
-
element,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
13
|
-
element,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
14
|
-
element,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
15
|
-
element,serverCondition,postMetaPost,Post meta,post,Posts,name,ajaxList,text,equals
|
|
16
|
-
element,serverCondition,postMetaPage,Post meta,page,Pages,name,ajaxList,text,equals
|
|
17
|
-
element,serverCondition,postMetaAttachment,Post meta,attachment,Media,name,ajaxList,text,equals
|
|
18
|
-
element,serverCondition,postMetaProduct,Post meta,product,Products,name,ajaxList,text,equals
|
|
19
|
-
element,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|
|
20
|
-
template,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
21
|
-
template,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
22
|
-
template,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
23
|
-
template,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
24
|
-
template,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
25
|
-
template,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
26
|
-
template,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
27
|
-
template,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
28
|
-
template,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
29
|
-
template,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
30
|
-
template,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
31
|
-
template,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
32
|
-
template,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|
|
33
|
-
interaction,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
34
|
-
interaction,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
35
|
-
interaction,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
36
|
-
interaction,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
37
|
-
interaction,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
38
|
-
interaction,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
39
|
-
interaction,browserCondition,breakpoint,Breakpoint,core,Core,,,,
|
|
40
|
-
interaction,browserCondition,reducedMotion,Motion,core,Core,,,,
|
|
41
|
-
interaction,browserCondition,localStorage,Local storage,browserStorage,Browser storage,name,text,text,equals
|
|
42
|
-
interaction,browserCondition,httpCookie,Cookie,browserStorage,Browser storage,name,text,text,equals
|
|
43
|
-
formAction,serverCondition,variable,Variable,editor,Editor,dynamicCode,dynamicCode,text,equals
|
|
44
|
-
formAction,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
45
|
-
formAction,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
46
|
-
formAction,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
47
|
-
formAction,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
48
|
-
formAction,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
49
|
-
formAction,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
50
|
-
formAction,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
51
|
-
formAction,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
52
|
-
formAction,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
53
|
-
formAction,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
54
|
-
formAction,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
55
|
-
formAction,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
56
|
-
formAction,serverCondition,postMetaPost,Post meta,post,Posts,name,ajaxList,text,equals
|
|
57
|
-
formAction,serverCondition,postMetaPage,Post meta,page,Pages,name,ajaxList,text,equals
|
|
58
|
-
formAction,serverCondition,postMetaAttachment,Post meta,attachment,Media,name,ajaxList,text,equals
|
|
59
|
-
formAction,serverCondition,postMetaProduct,Post meta,product,Products,name,ajaxList,text,equals
|
|
60
|
-
formAction,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|
|
1
|
+
context,rule_type,id,label,group,group_label,settings_fields,field_types,default_comparator,default_operator
|
|
2
|
+
element,serverCondition,variable,Variable,editor,Editor,dynamicCode,dynamicCode,text,equals
|
|
3
|
+
element,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
4
|
+
element,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
5
|
+
element,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
6
|
+
element,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
7
|
+
element,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
8
|
+
element,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
9
|
+
element,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
10
|
+
element,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
11
|
+
element,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
12
|
+
element,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
13
|
+
element,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
14
|
+
element,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
15
|
+
element,serverCondition,postMetaPost,Post meta,post,Posts,name,ajaxList,text,equals
|
|
16
|
+
element,serverCondition,postMetaPage,Post meta,page,Pages,name,ajaxList,text,equals
|
|
17
|
+
element,serverCondition,postMetaAttachment,Post meta,attachment,Media,name,ajaxList,text,equals
|
|
18
|
+
element,serverCondition,postMetaProduct,Post meta,product,Products,name,ajaxList,text,equals
|
|
19
|
+
element,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|
|
20
|
+
template,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
21
|
+
template,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
22
|
+
template,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
23
|
+
template,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
24
|
+
template,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
25
|
+
template,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
26
|
+
template,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
27
|
+
template,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
28
|
+
template,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
29
|
+
template,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
30
|
+
template,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
31
|
+
template,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
32
|
+
template,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|
|
33
|
+
interaction,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
34
|
+
interaction,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
35
|
+
interaction,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
36
|
+
interaction,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
37
|
+
interaction,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
38
|
+
interaction,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
39
|
+
interaction,browserCondition,breakpoint,Breakpoint,core,Core,,,,
|
|
40
|
+
interaction,browserCondition,reducedMotion,Motion,core,Core,,,,
|
|
41
|
+
interaction,browserCondition,localStorage,Local storage,browserStorage,Browser storage,name,text,text,equals
|
|
42
|
+
interaction,browserCondition,httpCookie,Cookie,browserStorage,Browser storage,name,text,text,equals
|
|
43
|
+
formAction,serverCondition,variable,Variable,editor,Editor,dynamicCode,dynamicCode,text,equals
|
|
44
|
+
formAction,serverCondition,httpGet,Query parameter,http,HTTP,name,text,text,equals
|
|
45
|
+
formAction,serverCondition,userLoggedIn,Logged-in status,currentUser,Current user,,,,
|
|
46
|
+
formAction,serverCondition,userRole,User role,currentUser,Current user,,,,
|
|
47
|
+
formAction,serverCondition,userCapability,User capability,currentUser,Current user,,,,
|
|
48
|
+
formAction,serverCondition,userFields,User fields,currentUser,Current user,field,ajaxList,text,equals
|
|
49
|
+
formAction,serverCondition,userMeta,User meta,currentUser,Current user,meta,ajaxList,text,equals
|
|
50
|
+
formAction,serverCondition,postCategory,Categories,post,Posts,,,,
|
|
51
|
+
formAction,serverCondition,postPostTag,Tags,post,Posts,,,,
|
|
52
|
+
formAction,serverCondition,postPostFormat,Formats,post,Posts,,,,
|
|
53
|
+
formAction,serverCondition,postProductBrand,Product brands,product,Products,,,,
|
|
54
|
+
formAction,serverCondition,postProductCat,Product categories,product,Products,,,,
|
|
55
|
+
formAction,serverCondition,postProductTag,Product tags,product,Products,,,,
|
|
56
|
+
formAction,serverCondition,postMetaPost,Post meta,post,Posts,name,ajaxList,text,equals
|
|
57
|
+
formAction,serverCondition,postMetaPage,Post meta,page,Pages,name,ajaxList,text,equals
|
|
58
|
+
formAction,serverCondition,postMetaAttachment,Post meta,attachment,Media,name,ajaxList,text,equals
|
|
59
|
+
formAction,serverCondition,postMetaProduct,Post meta,product,Products,name,ajaxList,text,equals
|
|
60
|
+
formAction,serverCondition,httpCookie,Cookie,http,HTTP,name,text,text,equals
|