diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 6664c9b..aebb238 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -9,7 +9,7 @@ jobs: steps: - name: Checkout project - uses: actions/checkout@v4 + uses: actions/checkout@v6 with: ref: ${{ github.head_ref }} fetch-depth: 0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df8250c..1cf57a0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,7 +37,7 @@ jobs: access_token: ${{ github.token }} - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Install Rust run: | @@ -70,7 +70,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Get Current Date id: date diff --git a/src/SUMMARY.md b/src/SUMMARY.md index e3a7f1c..2f0cd8a 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -1,12 +1,12 @@ # Summary -- [نیکاس](index.md) -- [نمونه های مشابه](similar.md) -- [شروع به کار](getting-started/index.md) - - [نیازمندی ها](getting-started/requirements.md) - - [نصب](getting-started/install.md) - - [اجرا](getting-started/run.md) -- [تنظیمات](config/index.md) - - [سرور](config/server.md) - - [کلاینت](config/client.md) - - [داکر](config/docker.md) +- [نیکاس](index.md) +- [نمونه های مشابه](similar.md) +- [شروع به کار](getting-started/index.md) + - [نیازمندی ها](getting-started/requirements.md) + - [نصب](getting-started/install.md) + - [اجرا](getting-started/run.md) +- [تنظیمات](config/index.md) + - [سرور](config/server.md) + - [کلاینت](config/client.md) + - [داکر](config/docker.md) diff --git a/src/config/client.md b/src/config/client.md index a302b35..4aa080f 100644 --- a/src/config/client.md +++ b/src/config/client.md @@ -121,9 +121,9 @@ or برای مثال اگر مقدار این گزینه را برابر `"3,3-"` قرار دهید باعث می‎شود حالات زیر اتفاق بیوفتد : -- ایجاد کلاس `nikas-vote-level-0` برای نظرات با امتیاز کمتر از `منفی 3` -- ایجاد کلاس `nikas-vote-level-1` برای نظرات با امتیاز بین `منفی 3` و `دو` -- ایجاد کلاس `nikas-vote-level-2` برای نظرات با امتیاز `دو` و بیشتر +- ایجاد کلاس `nikas-vote-level-0` برای نظرات با امتیاز کمتر از `منفی 3` +- ایجاد کلاس `nikas-vote-level-1` برای نظرات با امتیاز بین `منفی 3` و `دو` +- ایجاد کلاس `nikas-vote-level-2` برای نظرات با امتیاز `دو` و بیشتر می‎توانید از این کلاس ها برای ظاهرسازی مناسب نظرات استفاده کنید. برای مثال به ازای امتیاز برای آن ها از آیکون ستاره استفاده کنید. @@ -137,8 +137,8 @@ or با استفاده از این گزینه می‎توانید قالب پیشفرض نیکاس را انتخاب کنید. دو مقدار معتبر وجود دارد : -- `light` : قالب روشن -- `dark` : قالب تیره +- `light` : قالب روشن +- `dark` : قالب تیره > در صورتی که مقدار وارد شده معتبر نباشد ٬ قالب روشن استفاده خواهد شد. diff --git a/src/config/index.md b/src/config/index.md index 6617eee..fa0bbd7 100644 --- a/src/config/index.md +++ b/src/config/index.md @@ -2,9 +2,9 @@ در این بخش تنظیمات نیکاس را به صورت **سرور** و **کلاینت** بررسی می‎کنیم. -- [سرور](server.md) -- [کلاینت](client.md) +- [سرور](server.md) +- [کلاینت](client.md) همچنین به بررسی تنظیمات لازم برای Docker می‎پردازیم -- [داکر](docker.md) +- [داکر](docker.md) diff --git a/src/config/server.md b/src/config/server.md index d32386b..95215ad 100644 --- a/src/config/server.md +++ b/src/config/server.md @@ -28,14 +28,14 @@ env NIKAS_SETTINGS=path/to/nikas.cfg nikas حال به بررسی تنظیمات مختلف سرور می‎پردازیم : -- [General](#general) -- [Moderation](#moderation) -- [Server](#server) -- [SMTP](#smtp) -- [Guard](#guard) -- [Hash](#hash) -- [RSS](#rss) -- [Admin](#admin) +- [General](#general) +- [Moderation](#moderation) +- [Server](#server) +- [SMTP](#smtp) +- [Guard](#guard) +- [Hash](#hash) +- [RSS](#rss) +- [Admin](#admin) ## General @@ -85,8 +85,8 @@ host = سیستم اعلام دریافت نظر برای نظرات جدید : -- **stdout** : این مورد به صورت پیشفرض فعال بوده و نظرات جدید در قالب خروجی عادی در ترمینال نمایش داده می‎شوند -- **smtp** : اعلان از طریق ایمیل برای شما ارسال خواهد شد. توجه داشته باشید که در صورت استفاده از این گزینه باید تنظیمات [SMTP](#smtp) را نیز انجام دهید. +- **stdout** : این مورد به صورت پیشفرض فعال بوده و نظرات جدید در قالب خروجی عادی در ترمینال نمایش داده می‎شوند +- **smtp** : اعلان از طریق ایمیل برای شما ارسال خواهد شد. توجه داشته باشید که در صورت استفاده از این گزینه باید تنظیمات [SMTP](#smtp) را نیز انجام دهید. ### reply-notifications @@ -350,9 +350,9 @@ password = در نهایت روند اعتبارسنجی به کلی تغییر یافت و از روش های جایگزین برای این مورد استفاده شد. از آنجایی که در نیکاس جهت استفاده از پنل مدیریت نیاز به تعریف حساب کاربری خاصی نداریم ، پس مسلما یک کلمه عبور ساده جهت احراز هویت کافی است. یکی از اولین راه ها استفاده از `SHA-256` خواهد بود که در سال های اخیر مشکلاتی رو نیز به همراه داشته : -- [CWE-327](https://cwe.mitre.org/data/definitions/327.html) -- [CWE-328](https://cwe.mitre.org/data/definitions/328.html) -- [CWE-916](https://cwe.mitre.org/data/definitions/916.html) +- [CWE-327](https://cwe.mitre.org/data/definitions/327.html) +- [CWE-328](https://cwe.mitre.org/data/definitions/328.html) +- [CWE-916](https://cwe.mitre.org/data/definitions/916.html) از این رو `SHA-256` به کلی کنار گذاشته شد و به سراغ [Argon2](https://en.wikipedia.org/wiki/Argon2) رفتیم. یک الگوریتم KDF که در امر رمزنگاری بسیار بهینه تر عمل می‎کند. این کتابخانه در نسخه [1.1.1](https://github.com/Nikas-Project/Server/releases/tag/1.1.1) به نیکاس اضافه شد و هم اکنون در دسترس است. diff --git a/src/getting-started/index.md b/src/getting-started/index.md index 4b2ec53..18621f3 100644 --- a/src/getting-started/index.md +++ b/src/getting-started/index.md @@ -2,6 +2,6 @@ در این بخش به بررسی نیازمندی های سخت افزاری و نرم افزاری می پردازیم و نیکاس را نصب می کنیم : -- [نیازمندی ها](requirements.md) -- [نصب](install.md) -- [اجرا](run.md) +- [نیازمندی ها](requirements.md) +- [نصب](install.md) +- [اجرا](run.md) diff --git a/src/getting-started/install.md b/src/getting-started/install.md index 9210338..ae708e9 100644 --- a/src/getting-started/install.md +++ b/src/getting-started/install.md @@ -2,10 +2,10 @@ راه های مختلفی برای نصب نیکاس وجود داره : -- [Python Package](#python-package) -- [Source](#source) -- [Docker](#docker) -- [Kubernetes](#kubernetes) +- [Python Package](#python-package) +- [Source](#source) +- [Docker](#docker) +- [Kubernetes](#kubernetes) قبل از شروع به نصب ، ابتدا صفحه [پیش نیازها](requirements.md) را مطالعه کنید. @@ -93,8 +93,8 @@ docker run -d --rm --name nikas -p 127.0.0.1:8080:8080 -v /opt/nikas:/config -v از آنجایی که برای سرور نیکاس ایمیج داکری در اختیار دارید ٬ استقرار آن روی کلاستر Kubernetes نیز به راحتی صورت می‎گیرد. قبل از شروع به دو نکته توجه داشته باشید: -- جهت اعمال کانفیگ های مختلف باید از ConfigMap استفاده کنید. -- جهت ذخیره سازی دیتابیس باید از PersistentVolumeClaim استفاده کنید. +- جهت اعمال کانفیگ های مختلف باید از ConfigMap استفاده کنید. +- جهت ذخیره سازی دیتابیس باید از PersistentVolumeClaim استفاده کنید. فایل Deployment نمونه در [مخزن نیکاس موجود است](https://github.com/Nikas-Project/Server/blob/master/kubernetes/deployment.yml). تنظیمات مورد نظر خودتان را اعمال کرده و نیکاس را مستقر کنید: @@ -104,21 +104,21 @@ kubectl apply -f nikas-deployment.yaml تنظیماتی که باید اعمال کنید شامل این موارد است: -- `image` : نام و تگ ایمیج داکری نیکاس -- `resources` : مشخصات منابع مورد نیاز برای اجرای نیکاس -- `PersistentVolumeClaim` : حجم مورد نیاز برای ذخیره سازی دیتابیس -- `ConfigMap` : کانفیگ های مورد نیاز برای اجرای نیکاس -- `Route` : اگر از OpenShift استفاده می‎کنید ٬ این بخش را جهت معرفی دامنه خود تنظیم نمایید. در غیر اینصورت این بخش را حذف کرده و از Ingress Controller مناسب استفاده نمایید. +- `image` : نام و تگ ایمیج داکری نیکاس +- `resources` : مشخصات منابع مورد نیاز برای اجرای نیکاس +- `PersistentVolumeClaim` : حجم مورد نیاز برای ذخیره سازی دیتابیس +- `ConfigMap` : کانفیگ های مورد نیاز برای اجرای نیکاس +- `Route` : اگر از OpenShift استفاده می‎کنید ٬ این بخش را جهت معرفی دامنه خود تنظیم نمایید. در غیر اینصورت این بخش را حذف کرده و از Ingress Controller مناسب استفاده نمایید. ### استقرار در کانتینر ابری ابرآروان جهت استقرار نیکاس در کانتینر ابری ابرآروان ابتدا مراحل زیر را انجام دهید: -- ایجاد یک پروژه جدید ( یا استفاده از پروژه فعلی ) -- ایجاد یک کلید دسترسی با مراجعه به تنظیمات / کلیدهای API ( [راهنما](https://www.arvancloud.com/help/fa/article/360034038654--%da%86%da%af%d9%88%d9%86%d9%87-API-Key-%db%8c%d8%a7-%da%a9%d9%84%db%8c%d8%af-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87%e2%80%8c%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d8%af%d8%9f) ) -- تعریف یک زیردامنه برای نیکاس ( مثلا `nikas.example.com` ) و ثبت رکورد CNAME با مقدار زیر: - - ‍`nikas.example.com` → `default-gateway.ir-thr-at1.arvan.run.` -- دریافت [CLI](https://docs.arvancloud.com/fa/developer-tools/cli/) ابرآروان +- ایجاد یک پروژه جدید ( یا استفاده از پروژه فعلی ) +- ایجاد یک کلید دسترسی با مراجعه به تنظیمات / کلیدهای API ( [راهنما](https://www.arvancloud.com/help/fa/article/360034038654--%da%86%da%af%d9%88%d9%86%d9%87-API-Key-%db%8c%d8%a7-%da%a9%d9%84%db%8c%d8%af-%d8%af%d8%b3%d8%aa%d8%b1%d8%b3%db%8c-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87%e2%80%8c%d9%86%d9%88%db%8c%d8%b3%db%8c-%d8%a8%d8%b3%d8%a7%d8%b2%db%8c%d8%af%d8%9f) ) +- تعریف یک زیردامنه برای نیکاس ( مثلا `nikas.example.com` ) و ثبت رکورد CNAME با مقدار زیر: + - ‍`nikas.example.com` → `default-gateway.ir-thr-at1.arvan.run.` +- دریافت [CLI](https://docs.arvancloud.com/fa/developer-tools/cli/) ابرآروان پس از انجام مراحل بالا می‎توانید نیکاس را مستقر کنید: diff --git a/src/getting-started/requirements.md b/src/getting-started/requirements.md index 6bb7d2e..acd4b39 100644 --- a/src/getting-started/requirements.md +++ b/src/getting-started/requirements.md @@ -38,15 +38,15 @@ sudo yum install python-setuptools python-virtualenv python-devel نیازمندی های اصلی نیکاس : -- Python 3.7+ (+ devel headers) -- SQLite 3.3.8 or later +- Python 3.7+ (+ devel headers) +- SQLite 3.3.8 or later در صورتی که تمایل به کامپایل و اجرای نیکاس از سورس را دارید ، باید لیست زیر را نصب داشته باشید : -- [Make](https://www.gnu.org/software/make/) -- C compiler -- [NodeJS](https://nodejs.org/en/download/) -- [NPM](https://npmjs.org/) +- [Make](https://www.gnu.org/software/make/) +- C compiler +- [NodeJS](https://nodejs.org/en/download/) +- [NPM](https://npmjs.org/) > ❕ متاسفانه به دلیل برخی کتابخانه های استفاده شده در نیکاس امکان استفاده از NodeJS نسخه ۱۶ به بالا وجود ندارد. حتما از نسخه ۱۴ استفاده کنید. diff --git a/src/getting-started/run.md b/src/getting-started/run.md index d2d33d9..4162428 100644 --- a/src/getting-started/run.md +++ b/src/getting-started/run.md @@ -33,9 +33,9 @@ password = secret_token در اینجا چنین مواردی را تعریف کرده ایم : -- نام دیتابیس `example.db` -- آدرس وب سایتی که نظرات در آن مدیریت می شوند ( وبلاگ شما ) : `https://arash-hatami.ir` -- Host و Port مربوطه برای اجرای نیکاس : `localhost` - `1234` -- پنل مدیریت فعال بوده و رمز ورود آن `secret_token` ( این مورد رمز عبور خام و اصلی نیست ، بعدا در موردش صحبت می کنیم ) +- نام دیتابیس `example.db` +- آدرس وب سایتی که نظرات در آن مدیریت می شوند ( وبلاگ شما ) : `https://arash-hatami.ir` +- Host و Port مربوطه برای اجرای نیکاس : `localhost` - `1234` +- پنل مدیریت فعال بوده و رمز ورود آن `secret_token` ( این مورد رمز عبور خام و اصلی نیست ، بعدا در موردش صحبت می کنیم ) جهت مشاهده اطلاعات بیشتر در مورد تنظیم سرور نیکاس به این صفحه بروید : [تنظیمات سرور](../config/server.md) diff --git a/src/index.md b/src/index.md index ff5c3cd..982f420 100644 --- a/src/index.md +++ b/src/index.md @@ -14,9 +14,9 @@ در حال حاضر راه های زیادی برای رفع این مشکل وجود داره ولی با مسائل زیر مواجه خواهید شد : -- تحریم / فیلتر -- عدم پشتیبانی از زبان فارسی -- سنگین بودن کتابخانه -- ... +- تحریم / فیلتر +- عدم پشتیبانی از زبان فارسی +- سنگین بودن کتابخانه +- ... نیکاس اینجا است تا مشکلات وبلاگ ها و سایت های پارسی زبان رو حل کنه 😀 diff --git a/src/similar.md b/src/similar.md index c7a12b4..99c8a18 100644 --- a/src/similar.md +++ b/src/similar.md @@ -28,8 +28,8 @@ نمونه های بسیار زیاد دیگری هم وجود داره. رایگان ، غیر رایگان ، متن باز و ... در نیکاس ویژگی های اصلی و مفید هرکدام از اون ها وجود داره : -- متن باز -- سبک و کم حجم -- طراحی UI مدرن تر -- راحتی در استفاده -- ... +- متن باز +- سبک و کم حجم +- طراحی UI مدرن تر +- راحتی در استفاده +- ... diff --git a/theme/css/general.css b/theme/css/general.css index 97edde5..22469f0 100644 --- a/theme/css/general.css +++ b/theme/css/general.css @@ -27,8 +27,9 @@ body { code { direction: ltr; - font-family: "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, - "DejaVu Sans Mono", monospace, monospace !important; + font-family: + "Source Code Pro", Consolas, "Ubuntu Mono", Menlo, "DejaVu Sans Mono", + monospace, monospace !important; font-size: 0.875em; /* please adjust the ace font size accordingly in editor.js */ } diff --git a/theme/highlight.js b/theme/highlight.js index 3f95a2d..690a947 100644 --- a/theme/highlight.js +++ b/theme/highlight.js @@ -25,7 +25,7 @@ var hljs = (function () { } class n { constructor(e) { - void 0 === e.data && (e.data = {}), (this.data = e.data); + (void 0 === e.data && (e.data = {}), (this.data = e.data)); } ignoreMatch() { this.ignore = !0; @@ -88,11 +88,11 @@ var hljs = (function () { ? e : n : "start" === n[0].event - ? e - : n + ? e + : n : e.length - ? e - : n; + ? e + : n; } function c(e) { s += @@ -120,12 +120,12 @@ var hljs = (function () { ) { o.reverse().forEach(u); do { - d(g.splice(0, 1)[0]), (g = l()); + (d(g.splice(0, 1)[0]), (g = l())); } while (g === e && g.length && g[0].offset === i); o.reverse().forEach(c); } else - "start" === g[0].event ? o.push(g[0].node) : o.pop(), - d(g.splice(0, 1)[0]); + ("start" === g[0].event ? o.push(g[0].node) : o.pop(), + d(g.splice(0, 1)[0])); } return s + t(r.substr(i)); }, @@ -134,9 +134,9 @@ var hljs = (function () { o = (e) => !!e.kind; class l { constructor(e, n) { - (this.buffer = ""), + ((this.buffer = ""), (this.classPrefix = n.classPrefix), - e.walk(this); + e.walk(this)); } addText(e) { this.buffer += t(e); @@ -144,7 +144,7 @@ var hljs = (function () { openNode(e) { if (!o(e)) return; let n = e.kind; - e.sublanguage || (n = `${this.classPrefix}${n}`), this.span(n); + (e.sublanguage || (n = `${this.classPrefix}${n}`), this.span(n)); } closeNode(e) { o(e) && (this.buffer += s); @@ -158,7 +158,8 @@ var hljs = (function () { } class c { constructor() { - (this.rootNode = { children: [] }), (this.stack = [this.rootNode]); + ((this.rootNode = { children: [] }), + (this.stack = [this.rootNode])); } get top() { return this.stack[this.stack.length - 1]; @@ -171,7 +172,7 @@ var hljs = (function () { } openNode(e) { const n = { kind: e, children: [] }; - this.add(n), this.stack.push(n); + (this.add(n), this.stack.push(n)); } closeNode() { if (this.stack.length > 1) return this.stack.pop(); @@ -208,7 +209,7 @@ var hljs = (function () { } class u extends c { constructor(e) { - super(), (this.options = e); + (super(), (this.options = e)); } addKeyword(e, n) { "" !== e && (this.openNode(n), this.addText(e), this.closeNode()); @@ -218,7 +219,7 @@ var hljs = (function () { } addSublanguage(e, n) { const t = e.root; - (t.kind = n), (t.sublanguage = !0), this.add(t); + ((t.kind = n), (t.sublanguage = !0), this.add(t)); } toHTML() { return new l(this, this.options).value(); @@ -369,10 +370,10 @@ var hljs = (function () { return n ? +n : (function (e) { - return N.includes(e.toLowerCase()); - })(e) - ? 0 - : 1; + return N.includes(e.toLowerCase()); + })(e) + ? 0 + : 1; } const R = t, y = r, @@ -404,7 +405,7 @@ var hljs = (function () { var a = { code: n, language: e }; S("before:highlight", a); var i = a.result ? a.result : m(a.language, a.code, t, r); - return (i.code = a.code), S("after:highlight", i), i; + return ((i.code = a.code), S("after:highlight", i), i); } function m(e, t, a, s) { var o = t; @@ -416,20 +417,20 @@ var hljs = (function () { ); } function u() { - null != y.subLanguage + (null != y.subLanguage ? (function () { if ("" !== A) { var e = null; if ("string" == typeof y.subLanguage) { if (!i[y.subLanguage]) return void O.addText(A); - (e = m( + ((e = m( y.subLanguage, A, !0, k[y.subLanguage], )), - (k[y.subLanguage] = e.top); + (k[y.subLanguage] = e.top)); } else e = v( A, @@ -437,8 +438,8 @@ var hljs = (function () { ? y.subLanguage : null, ); - y.relevance > 0 && (I += e.relevance), - O.addSublanguage(e.emitter, e.language); + (y.relevance > 0 && (I += e.relevance), + O.addSublanguage(e.emitter, e.language)); } })() : (function () { @@ -452,17 +453,17 @@ var hljs = (function () { const r = c(y, n); if (r) { const [e, a] = r; - O.addText(t), + (O.addText(t), (t = ""), (I += a), - O.addKeyword(n[0], e); + O.addKeyword(n[0], e)); } else t += n[0]; - (e = y.keywordPatternRe.lastIndex), - (n = y.keywordPatternRe.exec(A)); + ((e = y.keywordPatternRe.lastIndex), + (n = y.keywordPatternRe.exec(A))); } - (t += A.substr(e)), O.addText(t); + ((t += A.substr(e)), O.addText(t)); })(), - (A = ""); + (A = "")); } function h(e) { return ( @@ -478,7 +479,7 @@ var hljs = (function () { var b = {}; function x(t, r) { var i = r && r[0]; - if (((A += t), null == i)) return u(), 0; + if (((A += t), null == i)) return (u(), 0); if ( "begin" === b.type && "end" === r.type && @@ -537,7 +538,8 @@ var hljs = (function () { if (i) { if (t["on:end"]) { const e = new n(t); - t["on:end"](r, e), e.ignore && (i = !1); + (t["on:end"](r, e), + e.ignore && (i = !1)); } if (i) { for (; t.endsParent && t.parent; ) @@ -555,9 +557,9 @@ var hljs = (function () { u(), i.excludeEnd && (A = t)); do { - y.className && O.closeNode(), + (y.className && O.closeNode(), y.skip || y.subLanguage || (I += y.relevance), - (y = y.parent); + (y = y.parent)); } while (y !== a.parent); return ( a.starts && @@ -573,13 +575,13 @@ var hljs = (function () { throw Error( "potential infinite loop, way more iterations than matches", ); - return (A += i), i.length; + return ((A += i), i.length); } var E = T(e); if (!E) throw ( - (console.error(g.replace("{}", e)), - Error('Unknown language: "' + e + '"')) + console.error(g.replace("{}", e)), + Error('Unknown language: "' + e + '"') ); var _ = (function (e) { function n(n, t) { @@ -592,13 +594,13 @@ var hljs = (function () { } class t { constructor() { - (this.matchIndexes = {}), + ((this.matchIndexes = {}), (this.regexes = []), (this.matchAt = 1), - (this.position = 0); + (this.position = 0)); } addRule(e, n) { - (n.position = this.position++), + ((n.position = this.position++), (this.matchIndexes[this.matchAt] = n), this.regexes.push([n, e]), (this.matchAt += @@ -607,13 +609,13 @@ var hljs = (function () { RegExp(e.toString() + "|").exec("") .length - 1 ); - })(e) + 1); + })(e) + 1)); } compile() { 0 === this.regexes.length && (this.exec = () => null); const e = this.regexes.map((e) => e[1]); - (this.matcherRe = n( + ((this.matcherRe = n( (function (e, n = "|") { for ( var t = @@ -636,14 +638,14 @@ var hljs = (function () { a += o; break; } - (a += o.substring(0, l.index)), + ((a += o.substring(0, l.index)), (o = o.substring( l.index + l[0].length, )), "\\" === l[0][0] && l[1] ? (a += "\\" + (+l[1] + s)) : ((a += l[0]), - "(" === l[0] && r++); + "(" === l[0] && r++)); } a += ")"; } @@ -651,7 +653,7 @@ var hljs = (function () { })(e), !0, )), - (this.lastIndex = 0); + (this.lastIndex = 0)); } exec(e) { this.matcherRe.lastIndex = this.lastIndex; @@ -661,16 +663,16 @@ var hljs = (function () { (e, n) => n > 0 && void 0 !== e, ), r = this.matchIndexes[t]; - return n.splice(0, t), Object.assign(n, r); + return (n.splice(0, t), Object.assign(n, r)); } } class a { constructor() { - (this.rules = []), + ((this.rules = []), (this.multiRegexes = []), (this.count = 0), (this.lastIndex = 0), - (this.regexIndex = 0); + (this.regexIndex = 0)); } getMatcher(e) { if (this.multiRegexes[e]) @@ -689,8 +691,8 @@ var hljs = (function () { this.regexIndex = 0; } addRule(e, n) { - this.rules.push([e, n]), - "begin" === n.type && this.count++; + (this.rules.push([e, n]), + "begin" === n.type && this.count++); } exec(e) { const n = this.getMatcher(this.regexIndex); @@ -717,9 +719,9 @@ var hljs = (function () { return (function t(s, o) { const l = s; if (s.compiled) return l; - (s.compiled = !0), + ((s.compiled = !0), (s.__beforeBegin = null), - (s.keywords = s.keywords || s.beginKeywords); + (s.keywords = s.keywords || s.beginKeywords)); let c = null; if ( ("object" == typeof s.keywords && @@ -739,11 +741,11 @@ var hljs = (function () { t ); function r(e, r) { - n && (r = r.toLowerCase()), + (n && (r = r.toLowerCase()), r.split(" ").forEach(function (n) { var r = n.split("|"); t[r[0]] = [e, w(r[0], r[1])]; - }); + })); } })(s.keywords, e.case_insensitive)), s.lexemes && c) @@ -798,20 +800,20 @@ var hljs = (function () { e.cached_variants ? e.cached_variants : (function e(n) { - return ( - !!n && - (n.endsWithParent || - e(n.starts)) - ); - })(e) - ? r(e, { - starts: e.starts - ? r(e.starts) - : null, - }) - : Object.isFrozen(e) - ? r(e) - : e + return ( + !!n && + (n.endsWithParent || + e(n.starts)) + ); + })(e) + ? r(e, { + starts: e.starts + ? r(e.starts) + : null, + }) + : Object.isFrozen(e) + ? r(e) + : e ); })("self" === e ? s : e); }), @@ -860,11 +862,11 @@ var hljs = (function () { L = !1; try { for (y.matcher.considerAll(); ; ) { - B++, + (B++, L ? (L = !1) : ((y.matcher.lastIndex = S), - y.matcher.considerAll()); + y.matcher.considerAll())); const e = y.matcher.exec(o); if (!e) break; const n = x(o.substring(S, e.index), e); @@ -921,7 +923,7 @@ var hljs = (function () { illegal: !1, top: h, }; - return n.emitter.addText(e), n; + return (n.emitter.addText(e), n); })(e), r = t; return ( @@ -930,9 +932,9 @@ var hljs = (function () { .filter(I) .forEach(function (n) { var a = m(n, e, !1); - (a.language = n), + ((a.language = n), a.relevance > r.relevance && (r = a), - a.relevance > t.relevance && ((r = t), (t = a)); + a.relevance > t.relevance && ((r = t), (t = a))); }), r.language && (t.second_best = r), t @@ -946,8 +948,8 @@ var hljs = (function () { ? "
" : e : f.tabReplace - ? e.replace(/\t/g, f.tabReplace) - : e, + ? e.replace(/\t/g, f.tabReplace) + : e, ) : e; } @@ -972,21 +974,21 @@ var hljs = (function () { return n.split(/\s+/).find((e) => p(e) || T(e)); })(e); if (p(t)) return; - S("before:highlightBlock", { block: e, language: t }), + (S("before:highlightBlock", { block: e, language: t }), f.useBR ? ((n = document.createElement("div")).innerHTML = e.innerHTML .replace(/\n/g, "") .replace(//g, "\n")) - : (n = e); + : (n = e)); const r = n.textContent, a = t ? b(t, r, !0) : v(r), i = k(n); if (i.length) { const e = document.createElement("div"); - (e.innerHTML = a.value), (a.value = O(i, k(e), r)); + ((e.innerHTML = a.value), (a.value = O(i, k(e), r))); } - (a.value = x(a.value)), + ((a.value = x(a.value)), S("after:highlightBlock", { block: e, result: a }), (e.innerHTML = a.value), (e.className = (function (e, n, t) { @@ -1008,7 +1010,7 @@ var hljs = (function () { language: a.second_best.language, re: a.second_best.relevance, relavance: a.second_best.relevance, - }); + })); } const N = () => { if (!N.called) { @@ -1018,13 +1020,13 @@ var hljs = (function () { } }; function T(e) { - return (e = (e || "").toLowerCase()), i[e] || i[s[e]]; + return ((e = (e || "").toLowerCase()), i[e] || i[s[e]]); } function A(e, { languageName: n }) { - "string" == typeof e && (e = [e]), + ("string" == typeof e && (e = [e]), e.forEach((e) => { s[e] = n; - }); + })); } function I(e) { var n = T(e); @@ -1036,7 +1038,7 @@ var hljs = (function () { e[t] && e[t](n); }); } - Object.assign(t, { + (Object.assign(t, { highlight: b, highlightAuto: v, fixMarkup: x, @@ -1063,12 +1065,12 @@ var hljs = (function () { !l) ) throw n; - console.error(n), (r = h); + (console.error(n), (r = h)); } - r.name || (r.name = e), + (r.name || (r.name = e), (i[e] = r), (r.rawDefinition = n.bind(null, t)), - r.aliases && A(r.aliases, { languageName: e }); + r.aliases && A(r.aliases, { languageName: e })); }, listLanguages: function () { return Object.keys(i); @@ -1097,9 +1099,9 @@ var hljs = (function () { (t.safeMode = function () { l = !0; }), - (t.versionString = "10.1.1"); + (t.versionString = "10.1.1")); for (const n in _) "object" == typeof _[n] && e(_[n]); - return Object.assign(t, _), t; + return (Object.assign(t, _), t); })({}); })(); "object" == typeof exports && @@ -1399,7 +1401,7 @@ hljs.registerLanguage( r, ], }); - (l.contains = [ + ((l.contains = [ o, c, s, @@ -1416,7 +1418,7 @@ hljs.registerLanguage( e.QUOTE_STRING_MODE, a, e.inherit(e.C_BLOCK_COMMENT_MODE, { illegal: /\n/ }), - ]); + ])); var d = { variants: [ o, @@ -2810,7 +2812,7 @@ hljs.registerLanguage( relevance: 0, }, ].concat(r); - (c.contains = d), (b.contains = d); + ((c.contains = d), (b.contains = d)); var g = [ { begin: /^\s*=>/, starts: { end: "$", contains: d } }, { @@ -4862,7 +4864,7 @@ hljs.registerLanguage( "use strict"; return function (e) { var n = e.getLanguage("c-like").rawDefinition(); - return (n.name = "C"), (n.aliases = ["c", "h"]), n; + return ((n.name = "C"), (n.aliases = ["c", "h"]), n); }; })(), ); @@ -4992,7 +4994,7 @@ hljs.registerLanguage( { begin: /_(?!_)/, end: /_/, relevance: 0 }, ], }; - i.contains.push(s), s.contains.push(i); + (i.contains.push(s), s.contains.push(i)); var c = [e, a]; return ( (i.contains = i.contains.concat(c)),