fix: linter
Deploy banu-front / deploy (push) Successful in 1m28s

This commit is contained in:
sajjadtalkhabi
2026-05-28 15:52:48 +03:30
parent 3f3c66a02d
commit 9660e3fe8f
41 changed files with 1669 additions and 1087 deletions
+7 -1
View File
@@ -6,7 +6,13 @@ module.exports = {
es2021: true, es2021: true,
}, },
plugins: ['prettier', 'unicorn', 'import', 'waterfall'], plugins: ['prettier', 'unicorn', 'import', 'waterfall'],
ignorePatterns: ['node_modules/', 'dist/', 'build/', '*.min.js', 'src/components/icons/icon-names.d.ts'], ignorePatterns: [
'node_modules/',
'dist/',
'build/',
'*.min.js',
'src/components/icons/icon-names.d.ts',
],
parserOptions: { parserOptions: {
ecmaVersion: 2021, ecmaVersion: 2021,
sourceType: 'module', sourceType: 'module',
+2 -2
View File
@@ -11,9 +11,9 @@ jobs:
env: env:
IMAGE: banu-front IMAGE: banu-front
CONTAINER: banu-front CONTAINER: banu-front
PORT: "8080" PORT: '8080'
VITE_API_BASE_URL: http://109.122.252.86/api VITE_API_BASE_URL: http://109.122.252.86/api
VITE_USE_MOCKS: "false" VITE_USE_MOCKS: 'false'
steps: steps:
- name: Clone repository at current commit - name: Clone repository at current commit
run: | run: |
+3 -3
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env sh #!/usr/bin/env sh
# Use the locally-installed lint-staged so this works under environments . "$(dirname -- "$0")/_/husky.sh"
# where npm/npx is broken (e.g. GitHub Desktop's bundled git env).
# exec ./node_modules/.bin/lint-staged npx lint-staged
+4 -4
View File
@@ -1,4 +1,4 @@
{ {
"*.{js,vue}": "eslint --fix", "*.{js,vue}": "eslint --fix",
"*.scss": "prettier --write" "*.scss": "prettier --write"
} }
-1
View File
@@ -1,4 +1,3 @@
{ {
"recommendations": [ "recommendations": [
"esbenp.prettier-vscode", "esbenp.prettier-vscode",
+399 -570
View File
File diff suppressed because it is too large Load Diff
+17 -11
View File
@@ -3,6 +3,7 @@
Source of truth: the Postman collection covering Terms, Courses, Sessions, Exams, Homeworks, Media (2026-05). This doc lists every place where backend and FE disagree on shape, plus FE-side concepts the backend doc has no slot for. Each item needs a product/design call before we wire it up. Source of truth: the Postman collection covering Terms, Courses, Sessions, Exams, Homeworks, Media (2026-05). This doc lists every place where backend and FE disagree on shape, plus FE-side concepts the backend doc has no slot for. Each item needs a product/design call before we wire it up.
Conventions in the rest of this doc: Conventions in the rest of this doc:
- **B → FE** means the backend exposes a field/endpoint that the FE doesn't surface yet. - **B → FE** means the backend exposes a field/endpoint that the FE doesn't surface yet.
- **FE → B** means the FE shows/sends a field the backend doc doesn't accept. - **FE → B** means the FE shows/sends a field the backend doc doesn't accept.
- **shape diff** means both sides handle the concept but in different shapes (enum values, nesting, naming). - **shape diff** means both sides handle the concept but in different shapes (enum values, nesting, naming).
@@ -14,7 +15,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `GET /terms?per_page&active_only` | `getTermsList` | aligned | | `GET /terms?per_page&active_only` | `getTermsList` | aligned |
| `GET /terms/:id` | `showTerm` | aligned | | `GET /terms/:id` | `showTerm` | aligned |
| `POST /terms` | `addNewTerm` | aligned | | `POST /terms` | `addNewTerm` | aligned |
@@ -28,7 +29,7 @@ Conventions in the rest of this doc:
### Fields ### Fields
| Backend → FE | FE has it as | Notes | | Backend → FE | FE has it as | Notes |
|---|---|---| | --- | --- | --- |
| `starts_at`, `ends_at` (ISO datetime) | `startDate`, `endDate` | Naming diff; we send `starts_at`/`ends_at` in the mock already — confirm the FE form should rename or keep an adapter. | | `starts_at`, `ends_at` (ISO datetime) | `startDate`, `endDate` | Naming diff; we send `starts_at`/`ends_at` in the mock already — confirm the FE form should rename or keep an adapter. |
| `cover_url` (read) + `cover_media_id` (write) | `coverUrl` / `coverMediaId` | aligned in shape, just camelCase. | | `cover_url` (read) + `cover_media_id` (write) | `coverUrl` / `coverMediaId` | aligned in shape, just camelCase. |
| `created_at` | `createdAt` | aligned. | | `created_at` | `createdAt` | aligned. |
@@ -36,6 +37,7 @@ Conventions in the rest of this doc:
| `description` | `description` | aligned. | | `description` | `description` | aligned. |
**FE → B** (need decision): **FE → B** (need decision):
- `studentsCount`, `coursesCount` — computed UI counts. Backend response doesn't include them. Either compute client-side or ask backend for `?include=counts`. - `studentsCount`, `coursesCount` — computed UI counts. Backend response doesn't include them. Either compute client-side or ask backend for `?include=counts`.
- `image` (UI alias of cover) — FE keeps this for a fallback. Backend response only has `cover_url`. - `image` (UI alias of cover) — FE keeps this for a fallback. Backend response only has `cover_url`.
@@ -46,7 +48,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `GET /courses?term_id&per_page` | `getCoursesList` | aligned (drop `/admin/` prefix in `endpoints.js`). | | `GET /courses?term_id&per_page` | `getCoursesList` | aligned (drop `/admin/` prefix in `endpoints.js`). |
| `GET /courses/:id` | `showCourse` | aligned. Backend response includes nested `term` and `teacher` — FE already reads `course.term` / `course.teacher`, good. | | `GET /courses/:id` | `showCourse` | aligned. Backend response includes nested `term` and `teacher` — FE already reads `course.term` / `course.teacher`, good. |
| `POST /courses` | `addNewCourse` | aligned. Backend currently requires `term_id` (422 example), but per user instruction the standalone (template-tab) flow must allow `term_id: null`. **Decide:** ask backend to make `term_id` nullable, or refuse to submit until a term is picked. | | `POST /courses` | `addNewCourse` | aligned. Backend currently requires `term_id` (422 example), but per user instruction the standalone (template-tab) flow must allow `term_id: null`. **Decide:** ask backend to make `term_id` nullable, or refuse to submit until a term is picked. |
@@ -59,7 +61,7 @@ Conventions in the rest of this doc:
### Fields ### Fields
| Backend ↔ FE | Notes | | Backend ↔ FE | Notes |
|---|---| | --- | --- |
| `term_id``termId` | aligned. Nullable in CourseFormPage, required in AddOfferedCourseModal — schema reflects this. | | `term_id``termId` | aligned. Nullable in CourseFormPage, required in AddOfferedCourseModal — schema reflects this. |
| `teacher_id``teacherId` | aligned. | | `teacher_id``teacherId` | aligned. |
| `capacity``capacity` | aligned. | | `capacity``capacity` | aligned. |
@@ -69,6 +71,7 @@ Conventions in the rest of this doc:
| Nested `term`, `teacher` on show response | FE already reads. | | Nested `term`, `teacher` on show response | FE already reads. |
**FE → B** (need decision): **FE → B** (need decision):
- `sessionsCount` — number-of-sessions field on the create form. Backend has nothing. Either compute server-side from related sessions, or drop the field. - `sessionsCount` — number-of-sessions field on the create form. Backend has nothing. Either compute server-side from related sessions, or drop the field.
- `prerequisites` (array of { courseId, course }) — backend has no prerequisite relation. Drop or ask backend for it. - `prerequisites` (array of { courseId, course }) — backend has no prerequisite relation. Drop or ask backend for it.
- `contentType` (video/voice/text) + `contentMediaId` — single course-level content file. Backend treats files only as session media. Decide whether course-level content should move to "intro session" or stay a course concept. - `contentType` (video/voice/text) + `contentMediaId` — single course-level content file. Backend treats files only as session media. Decide whether course-level content should move to "intro session" or stay a course concept.
@@ -81,7 +84,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `GET /sessions?course_id&per_page` | `getSessionsList` | aligned. | | `GET /sessions?course_id&per_page` | `getSessionsList` | aligned. |
| `GET /sessions/:id` | `showSession` | aligned. | | `GET /sessions/:id` | `showSession` | aligned. |
| `POST /sessions` | `addNewSession` | aligned. | | `POST /sessions` | `addNewSession` | aligned. |
@@ -93,7 +96,7 @@ Conventions in the rest of this doc:
### Fields — biggest gap of all five resources ### Fields — biggest gap of all five resources
| Backend | FE today | Notes | | Backend | FE today | Notes |
|---|---|---| | --- | --- | --- |
| `type` enum: `online \| offline \| content` | `sessionType` enum: `in_person`, `online`, `video`, `audio`, `text`, `slide`, `pdf` | **Shape diff.** FE has 7 values; backend has 3. There's an existing `SESSION_TYPE_TO_SPEC` mapper in `services/mock/fixtures/admin-sessions.js`. Decide whether the FE keeps the richer 7-value enum (and we map down to backend's 3) or collapses. | | `type` enum: `online \| offline \| content` | `sessionType` enum: `in_person`, `online`, `video`, `audio`, `text`, `slide`, `pdf` | **Shape diff.** FE has 7 values; backend has 3. There's an existing `SESSION_TYPE_TO_SPEC` mapper in `services/mock/fixtures/admin-sessions.js`. Decide whether the FE keeps the richer 7-value enum (and we map down to backend's 3) or collapses. |
| `starts_at`, `location`, `link` | All three live **inside** `form.sessionConfig.*` plus also derived to top-level `startsAt` / `location` / `link` in the mock | **Structural diff.** Backend wants flat fields; FE form nests them under `sessionConfig` keyed by `sessionType`. The mock derives top-level from `sessionConfig.*` for show payloads. Decide whether the FE form should flatten the schema to match backend or keep the conditional-by-type config UI. | | `starts_at`, `location`, `link` | All three live **inside** `form.sessionConfig.*` plus also derived to top-level `startsAt` / `location` / `link` in the mock | **Structural diff.** Backend wants flat fields; FE form nests them under `sessionConfig` keyed by `sessionType`. The mock derives top-level from `sessionConfig.*` for show payloads. Decide whether the FE form should flatten the schema to match backend or keep the conditional-by-type config UI. |
| `media_ids[]` (write) / `media[]` (read with `collection_name`, `file_name`, `mime_type`, `file_size`, `url`, `download_url`) | `materials[]` with `{ fileId, isRequired, type, title, order }` | **Shape diff.** Backend's media rows are typed by upload-purpose (video/voice/pdf/slide/attachment); FE has its own `type` enum. Decide which shape the FE keeps. | | `media_ids[]` (write) / `media[]` (read with `collection_name`, `file_name`, `mime_type`, `file_size`, `url`, `download_url`) | `materials[]` with `{ fileId, isRequired, type, title, order }` | **Shape diff.** Backend's media rows are typed by upload-purpose (video/voice/pdf/slide/attachment); FE has its own `type` enum. Decide which shape the FE keeps. |
@@ -108,7 +111,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `GET /exams/:id` (with questions+options) | `showExam` | aligned. | | `GET /exams/:id` (with questions+options) | `showExam` | aligned. |
| `POST /exams` | `addNewExam` | aligned. | | `POST /exams` | `addNewExam` | aligned. |
| `PATCH /exams/:id` | `updateExam` | aligned. | | `PATCH /exams/:id` | `updateExam` | aligned. |
@@ -122,7 +125,7 @@ Conventions in the rest of this doc:
### Fields ### Fields
| Backend ↔ FE | Notes | | Backend ↔ FE | Notes |
|---|---| | --- | --- | --- |
| `session_id``sessionId` | aligned. | | `session_id``sessionId` | aligned. |
| `title``title` | aligned. | | `title``title` | aligned. |
| `description``description` | aligned. | | `description``description` | aligned. |
@@ -131,6 +134,7 @@ Conventions in the rest of this doc:
| Backend question shape: `{ question_text, position, options: [{ option_text, is_correct }] }` | FE: `{ title, score, correctAnswerId, answers: [{ id, title }] }` | **Shape diff.** Backend hides `is_correct` from public reads (only on add). FE concept of `score` (per-question weighting) has no backend slot. Decide: keep FE scoring (ask backend to store) or drop. | | Backend question shape: `{ question_text, position, options: [{ option_text, is_correct }] }` | FE: `{ title, score, correctAnswerId, answers: [{ id, title }] }` | **Shape diff.** Backend hides `is_correct` from public reads (only on add). FE concept of `score` (per-question weighting) has no backend slot. Decide: keep FE scoring (ask backend to store) or drop. |
**FE → B** (need decision): **FE → B** (need decision):
- `durationMinutes` — no backend slot. - `durationMinutes` — no backend slot.
- `randomize` — no backend slot. - `randomize` — no backend slot.
- `endDate` / `startDate` — exam validity window, no backend slot. - `endDate` / `startDate` — exam validity window, no backend slot.
@@ -143,7 +147,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `POST /homeworks` | `addNewAssignment` | aligned (URL renamed to `/homeworks`; FE key name kept). | | `POST /homeworks` | `addNewAssignment` | aligned (URL renamed to `/homeworks`; FE key name kept). |
| `PATCH /homeworks/:id` | `updateAssignment` | aligned. | | `PATCH /homeworks/:id` | `updateAssignment` | aligned. |
| `DELETE /homeworks/:id` | `deleteAssignment` | aligned. | | `DELETE /homeworks/:id` | `deleteAssignment` | aligned. |
@@ -155,7 +159,7 @@ Conventions in the rest of this doc:
### Fields ### Fields
| Backend ↔ FE | Notes | | Backend ↔ FE | Notes |
|---|---| | --- | --- | --- |
| `session_id``sessionId` | aligned. | | `session_id``sessionId` | aligned. |
| `title`, `description` | aligned. | | `title`, `description` | aligned. |
| `deadline` (single datetime) | FE: `startDate` + `endDate` + computed `durationDays` | **Shape diff.** Backend has one deadline; FE has a window. Decide: drop start/end and use single deadline, or ask backend to add a window. | | `deadline` (single datetime) | FE: `startDate` + `endDate` + computed `durationDays` | **Shape diff.** Backend has one deadline; FE has a window. Decide: drop start/end and use single deadline, or ask backend to add a window. |
@@ -166,6 +170,7 @@ Conventions in the rest of this doc:
| Submission `reviewed_at` (read) | — | Backend provides; FE doesn't surface. | | Submission `reviewed_at` (read) | — | Backend provides; FE doesn't surface. |
**FE → B** (need decision): **FE → B** (need decision):
- `priority` enum (`mandatory \| optional`) — no backend slot. - `priority` enum (`mandatory \| optional`) — no backend slot.
- `submissionsCount` — derived count, no backend slot. - `submissionsCount` — derived count, no backend slot.
@@ -176,7 +181,7 @@ Conventions in the rest of this doc:
### Endpoints ### Endpoints
| Backend | FE today | Status | | Backend | FE today | Status |
|---|---|---| | --- | --- | --- |
| `POST /media` (multipart with `purpose` + `file`) | `uploadMedia` | aligned URL & method. | | `POST /media` (multipart with `purpose` + `file`) | `uploadMedia` | aligned URL & method. |
| `GET /media/:id/download` | — | **Backend → FE.** Add as `downloadMedia`. | | `GET /media/:id/download` | — | **Backend → FE.** Add as `downloadMedia`. |
| `DELETE /media/:id` | — | **Backend → FE.** Add as `deleteMedia`. | | `DELETE /media/:id` | — | **Backend → FE.** Add as `deleteMedia`. |
@@ -194,6 +199,7 @@ Conventions in the rest of this doc:
### Snake_case vs camelCase ### Snake_case vs camelCase
Backend wire format is snake_case throughout. FE today reads camelCase (e.g., the mock returns `coverUrl`, `isActive`). When the real backend lands, the FE will either need: Backend wire format is snake_case throughout. FE today reads camelCase (e.g., the mock returns `coverUrl`, `isActive`). When the real backend lands, the FE will either need:
- a HTTP-layer transformer (camelize on response, snake_case on request), or - a HTTP-layer transformer (camelize on response, snake_case on request), or
- camelCase field aliases on the backend serializer. - camelCase field aliases on the backend serializer.
+1 -1
View File
@@ -1,4 +1,4 @@
<!doctype html> <!DOCTYPE html>
<html lang="fa" dir="rtl"> <html lang="fa" dir="rtl">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
+672
View File
@@ -34,6 +34,7 @@
"eslint-plugin-unicorn": "^55.0.0", "eslint-plugin-unicorn": "^55.0.0",
"eslint-plugin-vue": "^9.15.1", "eslint-plugin-vue": "^9.15.1",
"eslint-plugin-waterfall": "^1.0.1", "eslint-plugin-waterfall": "^1.0.1",
"lint-staged": "^15.5.2",
"postcss-html": "^1.8.0", "postcss-html": "^1.8.0",
"prettier": "2.8.8", "prettier": "2.8.8",
"sass": "^1.83.0", "sass": "^1.83.0",
@@ -1927,6 +1928,22 @@
"url": "https://github.com/sponsors/epoberezkin" "url": "https://github.com/sponsors/epoberezkin"
} }
}, },
"node_modules/ansi-escapes": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz",
"integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==",
"dev": true,
"license": "MIT",
"dependencies": {
"environment": "^1.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": { "node_modules/ansi-regex": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -2432,6 +2449,136 @@
"node": ">=0.8.0" "node": ">=0.8.0"
} }
}, },
"node_modules/cli-cursor": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
"integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
"dev": true,
"license": "MIT",
"dependencies": {
"restore-cursor": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-truncate": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz",
"integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^5.0.0",
"string-width": "^7.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-truncate/node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/cli-truncate/node_modules/ansi-styles": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/cli-truncate/node_modules/emoji-regex": {
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
"dev": true,
"license": "MIT"
},
"node_modules/cli-truncate/node_modules/is-fullwidth-code-point": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
"integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-truncate/node_modules/slice-ansi": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
"integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.0.0",
"is-fullwidth-code-point": "^4.0.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/cli-truncate/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^10.3.0",
"get-east-asian-width": "^1.0.0",
"strip-ansi": "^7.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/cli-truncate/node_modules/strip-ansi": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -2459,6 +2606,13 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/colorette": {
"version": "2.0.20",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
"integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true,
"license": "MIT"
},
"node_modules/combined-stream": { "node_modules/combined-stream": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2950,6 +3104,19 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/environment": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz",
"integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/error-ex": { "node_modules/error-ex": {
"version": "1.3.4", "version": "1.3.4",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
@@ -3597,6 +3764,37 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/eventemitter3": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz",
"integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==",
"dev": true,
"license": "MIT"
},
"node_modules/execa": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
"integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^8.0.1",
"human-signals": "^5.0.0",
"is-stream": "^3.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^5.1.0",
"onetime": "^6.0.0",
"signal-exit": "^4.1.0",
"strip-final-newline": "^3.0.0"
},
"engines": {
"node": ">=16.17"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/fast-deep-equal": { "node_modules/fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -3898,6 +4096,19 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/get-east-asian-width": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-intrinsic": { "node_modules/get-intrinsic": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -3935,6 +4146,19 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/get-stream": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
"integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-symbol-description": { "node_modules/get-symbol-description": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
@@ -4265,6 +4489,16 @@
"entities": "^4.4.0" "entities": "^4.4.0"
} }
}, },
"node_modules/human-signals": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
"integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=16.17.0"
}
},
"node_modules/husky": { "node_modules/husky": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/husky/-/husky-8.0.0.tgz", "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.0.tgz",
@@ -4721,6 +4955,19 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/is-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
"integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-string": { "node_modules/is-string": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
@@ -4965,6 +5212,19 @@
"node": ">= 0.8.0" "node": ">= 0.8.0"
} }
}, },
"node_modules/lilconfig": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
"integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/lines-and-columns": { "node_modules/lines-and-columns": {
"version": "1.2.4", "version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
@@ -4972,6 +5232,75 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/lint-staged": {
"version": "15.5.2",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz",
"integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^5.4.1",
"commander": "^13.1.0",
"debug": "^4.4.0",
"execa": "^8.0.1",
"lilconfig": "^3.1.3",
"listr2": "^8.2.5",
"micromatch": "^4.0.8",
"pidtree": "^0.6.0",
"string-argv": "^0.3.2",
"yaml": "^2.7.0"
},
"bin": {
"lint-staged": "bin/lint-staged.js"
},
"engines": {
"node": ">=18.12.0"
},
"funding": {
"url": "https://opencollective.com/lint-staged"
}
},
"node_modules/lint-staged/node_modules/chalk": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
"integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/lint-staged/node_modules/commander": {
"version": "13.1.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",
"integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
}
},
"node_modules/listr2": {
"version": "8.3.3",
"resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz",
"integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"cli-truncate": "^4.0.0",
"colorette": "^2.0.20",
"eventemitter3": "^5.0.1",
"log-update": "^6.1.0",
"rfdc": "^1.4.1",
"wrap-ansi": "^9.0.0"
},
"engines": {
"node": ">=18.0.0"
}
},
"node_modules/locate-path": { "node_modules/locate-path": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5008,6 +5337,101 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/log-update": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz",
"integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-escapes": "^7.0.0",
"cli-cursor": "^5.0.0",
"slice-ansi": "^7.1.0",
"strip-ansi": "^7.1.0",
"wrap-ansi": "^9.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/log-update/node_modules/ansi-styles": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/log-update/node_modules/is-fullwidth-code-point": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz",
"integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-east-asian-width": "^1.3.1"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/strip-ansi": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/magic-string": { "node_modules/magic-string": {
"version": "0.30.21", "version": "0.30.21",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
@@ -5057,6 +5481,13 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
"license": "MIT"
},
"node_modules/merge2": { "node_modules/merge2": {
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -5115,6 +5546,32 @@
"node": ">= 0.6" "node": ">= 0.6"
} }
}, },
"node_modules/mimic-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/mimic-function": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
"integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/min-indent": { "node_modules/min-indent": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -5307,6 +5764,35 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/npm-run-path": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^4.0.0"
},
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/npm-run-path/node_modules/path-key": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
"integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/nth-check": { "node_modules/nth-check": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -5442,6 +5928,22 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"node_modules/onetime": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
"integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"mimic-fn": "^4.0.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/optionator": { "node_modules/optionator": {
"version": "0.9.4", "version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
@@ -5623,6 +6125,19 @@
"url": "https://github.com/sponsors/jonschlinkert" "url": "https://github.com/sponsors/jonschlinkert"
} }
}, },
"node_modules/pidtree": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz",
"integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==",
"dev": true,
"license": "MIT",
"bin": {
"pidtree": "bin/pidtree.js"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/pinia": { "node_modules/pinia": {
"version": "3.0.4", "version": "3.0.4",
"resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz",
@@ -6151,6 +6666,39 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/restore-cursor": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
"integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
"dev": true,
"license": "MIT",
"dependencies": {
"onetime": "^7.0.0",
"signal-exit": "^4.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/restore-cursor/node_modules/onetime": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
"integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"mimic-function": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/reusify": { "node_modules/reusify": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
@@ -6606,6 +7154,16 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/string-argv": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
"integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.6.19"
}
},
"node_modules/string-width": { "node_modules/string-width": {
"version": "4.2.3", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -6703,6 +7261,19 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/strip-final-newline": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
"integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/strip-indent": { "node_modules/strip-indent": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
@@ -7830,6 +8401,91 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/wrap-ansi": {
"version": "9.0.2",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
"integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"string-width": "^7.0.0",
"strip-ansi": "^7.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrap-ansi/node_modules/ansi-regex": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/wrap-ansi/node_modules/emoji-regex": {
"version": "10.6.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
"integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
"dev": true,
"license": "MIT"
},
"node_modules/wrap-ansi/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^10.3.0",
"get-east-asian-width": "^1.0.0",
"strip-ansi": "^7.1.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/wrap-ansi/node_modules/strip-ansi": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/wrappy": { "node_modules/wrappy": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -7860,6 +8516,22 @@
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/yaml": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz",
"integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==",
"dev": true,
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
"node": ">= 14.6"
},
"funding": {
"url": "https://github.com/sponsors/eemeli"
}
},
"node_modules/yocto-queue": { "node_modules/yocto-queue": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+1
View File
@@ -42,6 +42,7 @@
"eslint-plugin-unicorn": "^55.0.0", "eslint-plugin-unicorn": "^55.0.0",
"eslint-plugin-vue": "^9.15.1", "eslint-plugin-vue": "^9.15.1",
"eslint-plugin-waterfall": "^1.0.1", "eslint-plugin-waterfall": "^1.0.1",
"lint-staged": "^15.5.2",
"postcss-html": "^1.8.0", "postcss-html": "^1.8.0",
"prettier": "2.8.8", "prettier": "2.8.8",
"sass": "^1.83.0", "sass": "^1.83.0",
+3 -3
View File
@@ -8,14 +8,14 @@
import { storeToRefs } from 'pinia' import { storeToRefs } from 'pinia'
import { computed, watch } from 'vue' import { computed, watch } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { useModalStore } from '@/store/modal'
import { useAuthStore } from '@/store/auth' import { useAuthStore } from '@/store/auth'
import { useGetMeQuery } from '@/services/query/auth' import { useModalStore } from '@/store/modal'
import { tokenService } from '@/services/api/token-service'
import AdminLayout from '@/layouts/AdminLayout.vue' import AdminLayout from '@/layouts/AdminLayout.vue'
import { useGetMeQuery } from '@/services/query/auth'
import PublicLayout from '@/layouts/PublicLayout.vue' import PublicLayout from '@/layouts/PublicLayout.vue'
import StudentLayout from '@/layouts/StudentLayout.vue' import StudentLayout from '@/layouts/StudentLayout.vue'
import ConfirmModal from '@/components/ConfirmModal.vue' import ConfirmModal from '@/components/ConfirmModal.vue'
import { tokenService } from '@/services/api/token-service'
import { VueQueryDevtools } from '@tanstack/vue-query-devtools' import { VueQueryDevtools } from '@tanstack/vue-query-devtools'
const route = useRoute() const route = useRoute()
+3 -5
View File
@@ -47,7 +47,7 @@ const customer = (init) => {
init.placeholder = props.placeholder init.placeholder = props.placeholder
// Paste pictures and automatically process base64 // Paste pictures and automatically process base64
init.urlconverter_callback = (url, node, onSave, name) => { init.urlconverter_callback = (url, node, _onSave, _name) => {
if (node === 'img' && url.startsWith('blob:')) { if (node === 'img' && url.startsWith('blob:')) {
tinymce.activeEditor && tinymce.activeEditor.uploadImages() tinymce.activeEditor && tinymce.activeEditor.uploadImages()
} }
@@ -73,7 +73,7 @@ onMounted(() => {
// Listen for text changes and pass them to the outside world // Listen for text changes and pass them to the outside world
watch( watch(
() => state.contentValue, () => state.contentValue,
(n) => { () => {
debounce(() => { debounce(() => {
emit('update:modelValue', state.contentValue) emit('update:modelValue', state.contentValue)
}) })
@@ -112,7 +112,5 @@ const imgUploadFn = async (blobInfo, success, failure) => {
return failure(`HTTP Error: ${response.status}`) return failure(`HTTP Error: ${response.status}`)
} }
const { myInit, contentValue, timeout } = toRefs(state) const { myInit, contentValue } = toRefs(state)
</script> </script>
<style></style>
+2 -2
View File
@@ -54,8 +54,8 @@ const onToggle = () => {
} }
&--selected .checkbox-field__box { &--selected .checkbox-field__box {
background: #999999; background: #999;
border-color: #999999; border-color: #999;
} }
&__box { &__box {
+1 -1
View File
@@ -122,7 +122,7 @@ onBeforeUnmount(revokePreview)
align-items: center; align-items: center;
gap: 0.75rem; gap: 0.75rem;
padding: 1rem; padding: 1rem;
background: #eeeeee; background: #eee;
border-radius: 1.5rem; border-radius: 1.5rem;
min-height: 18rem; min-height: 18rem;
justify-content: space-between; justify-content: space-between;
@@ -142,9 +142,13 @@ const sessionListFilters = computed(() => ({
courseId: form.value.courseId || undefined, courseId: form.value.courseId || undefined,
})) }))
const sessionPagination = ref({ page: 1, perPage: 10 }) const sessionPagination = ref({ page: 1, perPage: 10 })
const { data: sessionsResponse } = useAdminSessionsListQuery(sessionListFilters, sessionPagination, { const { data: sessionsResponse } = useAdminSessionsListQuery(
enabled: () => !!form.value.courseId, sessionListFilters,
}) sessionPagination,
{
enabled: () => !!form.value.courseId,
}
)
const sessionOptions = computed(() => sessionsResponse.value?.data ?? []) const sessionOptions = computed(() => sessionsResponse.value?.data ?? [])
const searchTerms = useDebounce((q) => { const searchTerms = useDebounce((q) => {
@@ -142,14 +142,13 @@ import BaseButton from '@/components/BaseButton.vue'
import SvgIcon from '@/components/icons/SvgIcon.vue' import SvgIcon from '@/components/icons/SvgIcon.vue'
import TextField from '@/components/form/TextField.vue' import TextField from '@/components/form/TextField.vue'
import SelectField from '@/components/form/SelectField.vue' import SelectField from '@/components/form/SelectField.vue'
import LineTitleBlock from '@/components/LineTitleBlock.vue'
import FileUploader from '@/components/form/FileUploader.vue' import FileUploader from '@/components/form/FileUploader.vue'
import { objectToFormData } from '@/utils/object-to-formdata' import { objectToFormData } from '@/utils/object-to-formdata'
import { useUploadMediaMutation } from '@/services/query/auth' import { useUploadMediaMutation } from '@/services/query/auth'
import TextareaField from '@/components/form/TextareaField.vue' import TextareaField from '@/components/form/TextareaField.vue'
import DatePickerField from '@/components/form/DatePickerField.vue' import DatePickerField from '@/components/form/DatePickerField.vue'
import { assignmentSchema } from '@/features/admin/assignments/schema'
import { useAdminTermsListQuery } from '@/services/query/admin-terms' import { useAdminTermsListQuery } from '@/services/query/admin-terms'
import { assignmentSchema } from '@/features/admin/assignments/schema'
import { useAdminCoursesListQuery } from '@/services/query/admin-courses' import { useAdminCoursesListQuery } from '@/services/query/admin-courses'
import { useAdminSessionsListQuery } from '@/services/query/admin-sessions' import { useAdminSessionsListQuery } from '@/services/query/admin-sessions'
import { import {
@@ -41,7 +41,7 @@
<LineInfoBlock title="توضیحات" :desc="assignment.description" /> <LineInfoBlock title="توضیحات" :desc="assignment.description" />
</div> </div>
<div v-if="attachmentItems.length" class="assignment-details__attachments"> <div v-if="attachmentItems.length > 0" class="assignment-details__attachments">
<LineTitleBlock title="فایل‌های تکلیف" title-en="Attachments" /> <LineTitleBlock title="فایل‌های تکلیف" title-en="Attachments" />
<ul class="assignment-details__attachments-list"> <ul class="assignment-details__attachments-list">
<li v-for="file in attachmentItems" :key="file.id"> <li v-for="file in attachmentItems" :key="file.id">
@@ -77,7 +77,6 @@ import SvgIcon from '@/components/icons/SvgIcon.vue'
import NoItems from '@/components/blocks/NoItems.vue' import NoItems from '@/components/blocks/NoItems.vue'
import { formatJalaaliDate } from '@/utils/date-utils' import { formatJalaaliDate } from '@/utils/date-utils'
import { usePagination } from '@/composables/usePagination' import { usePagination } from '@/composables/usePagination'
import LineTitleBlock from '@/components/LineTitleBlock.vue'
import PaginationBlock from '@/components/blocks/PaginationBlock.vue' import PaginationBlock from '@/components/blocks/PaginationBlock.vue'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue' import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
import { useAdminAssignmentSubmissionsQuery } from '@/services/query/admin-assignments' import { useAdminAssignmentSubmissionsQuery } from '@/services/query/admin-assignments'
@@ -82,7 +82,6 @@ import BaseButton from '@/components/BaseButton.vue'
import SvgIcon from '@/components/icons/SvgIcon.vue' import SvgIcon from '@/components/icons/SvgIcon.vue'
import NoItems from '@/components/blocks/NoItems.vue' import NoItems from '@/components/blocks/NoItems.vue'
import CircleButton from '@/components/CircleButton.vue' import CircleButton from '@/components/CircleButton.vue'
import LineTitleBlock from '@/components/LineTitleBlock.vue'
import { adminCoursesKeys } from '@/services/query/admin-courses' import { adminCoursesKeys } from '@/services/query/admin-courses'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue' import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
import { import {
@@ -142,9 +142,13 @@ const sessionListFilters = computed(() => ({
courseId: form.value.courseId || undefined, courseId: form.value.courseId || undefined,
})) }))
const sessionPagination = ref({ page: 1, perPage: 10 }) const sessionPagination = ref({ page: 1, perPage: 10 })
const { data: sessionsResponse } = useAdminSessionsListQuery(sessionListFilters, sessionPagination, { const { data: sessionsResponse } = useAdminSessionsListQuery(
enabled: () => !!form.value.courseId, sessionListFilters,
}) sessionPagination,
{
enabled: () => !!form.value.courseId,
}
)
const sessionOptions = computed(() => sessionsResponse.value?.data ?? []) const sessionOptions = computed(() => sessionsResponse.value?.data ?? [])
const searchTerms = useDebounce((q) => { const searchTerms = useDebounce((q) => {
@@ -259,8 +259,7 @@ const answerStateClass = (answerId, question) => {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
column-gap: 1.25rem; gap: 0.5rem 1.25rem;
row-gap: 0.5rem;
color: #8e8e8e; color: #8e8e8e;
} }
@@ -336,8 +335,7 @@ const answerStateClass = (answerId, question) => {
&__answers { &__answers {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
column-gap: 3rem; gap: 1.25rem 3rem;
row-gap: 1.25rem;
} }
&__answer { &__answer {
@@ -125,7 +125,7 @@ const onSubmit = (close) => {
} }
&__divider { &__divider {
border-block-end: 1px solid #dddddd; border-block-end: 1px solid #ddd;
margin-block: 0.5rem; margin-block: 0.5rem;
} }
@@ -80,7 +80,7 @@ const onSendMessage = (data) => {
} }
&__divider { &__divider {
border-block-end: 1px solid #dddddd; border-block-end: 1px solid #ddd;
margin-block: 0.5rem; margin-block: 0.5rem;
} }
@@ -90,7 +90,6 @@ import SvgIcon from '@/components/icons/SvgIcon.vue'
import NoItems from '@/components/blocks/NoItems.vue' import NoItems from '@/components/blocks/NoItems.vue'
import SelectField from '@/components/form/SelectField.vue' import SelectField from '@/components/form/SelectField.vue'
import { usePagination } from '@/composables/usePagination' import { usePagination } from '@/composables/usePagination'
import LineTitleBlock from '@/components/LineTitleBlock.vue'
import PaginationBlock from '@/components/blocks/PaginationBlock.vue' import PaginationBlock from '@/components/blocks/PaginationBlock.vue'
import { useAdminTermsListQuery } from '@/services/query/admin-terms' import { useAdminTermsListQuery } from '@/services/query/admin-terms'
import { useAdminCoursesListQuery } from '@/services/query/admin-courses' import { useAdminCoursesListQuery } from '@/services/query/admin-courses'
@@ -125,9 +125,7 @@ const contentType = computed(() => collectionToContentType(contentMedia.value?.c
const contentTypeLabel = computed(() => COURSE_CONTENT_TYPE[contentType.value] || '—') const contentTypeLabel = computed(() => COURSE_CONTENT_TYPE[contentType.value] || '—')
const mediaUrl = computed( const mediaUrl = computed(() => contentMedia.value?.url || contentMedia.value?.downloadUrl || '')
() => contentMedia.value?.url || contentMedia.value?.downloadUrl || ''
)
const mediaFileName = computed(() => contentMedia.value?.fileName || 'فایل پیوست') const mediaFileName = computed(() => contentMedia.value?.fileName || 'فایل پیوست')
</script> </script>
@@ -247,7 +247,6 @@ import {
SEMINARY_LEVEL, SEMINARY_LEVEL,
SESSION_CANCELLATION_RESPONSE, SESSION_CANCELLATION_RESPONSE,
UNIVERSITY_LEVEL, UNIVERSITY_LEVEL,
USER_STATUS,
VERIFICATION_MEDIA_TYPE, VERIFICATION_MEDIA_TYPE,
} from '@/enums' } from '@/enums'
@@ -111,11 +111,11 @@ import TextareaField from '@/components/form/TextareaField.vue'
import { useSaveRegisterDataMutation } from '@/services/query/auth' import { useSaveRegisterDataMutation } from '@/services/query/auth'
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue' import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
import { educationalInformationSchema } from '@/features/auth/schema/student-register' import { educationalInformationSchema } from '@/features/auth/schema/student-register'
import { EDUCATION_STATUS, SEMINARY_LEVEL, STUDENT_REGISTRATION, UNIVERSITY_LEVEL } from '@/enums'
import { import {
toKeyValueList, toKeyValueList,
useStudentRegistrationStore, useStudentRegistrationStore,
} from '@/features/auth/store/student-registration' } from '@/features/auth/store/student-registration'
import { EDUCATION_STATUS, SEMINARY_LEVEL, STUDENT_REGISTRATION, UNIVERSITY_LEVEL } from '@/enums'
const store = useStudentRegistrationStore() const store = useStudentRegistrationStore()
@@ -113,8 +113,8 @@ import SelectField from '@/components/form/SelectField.vue'
import LineTitleBlock from '@/components/LineTitleBlock.vue' import LineTitleBlock from '@/components/LineTitleBlock.vue'
import { computed, onBeforeUnmount, onMounted, ref } from 'vue' import { computed, onBeforeUnmount, onMounted, ref } from 'vue'
import TextareaField from '@/components/form/TextareaField.vue' import TextareaField from '@/components/form/TextareaField.vue'
import { PROPAGATION_PLATFORM, STUDENT_REGISTRATION } from '@/enums'
import { useSaveRegisterDataMutation } from '@/services/query/auth' import { useSaveRegisterDataMutation } from '@/services/query/auth'
import { PROPAGATION_PLATFORM, STUDENT_REGISTRATION } from '@/enums'
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue' import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
import { professionalInformationSchema } from '@/features/auth/schema/student-register' import { professionalInformationSchema } from '@/features/auth/schema/student-register'
import { import {
@@ -37,11 +37,12 @@
</template> </template>
<script setup> <script setup>
import { computed, ref } from 'vue'
import { toast } from 'vue3-toastify' import { toast } from 'vue3-toastify'
import useYup from '@/composables/useYup' import useYup from '@/composables/useYup'
import { computed, ref } from 'vue'
import { STUDENT_REGISTRATION } from '@/enums' import { STUDENT_REGISTRATION } from '@/enums'
import LineTitleBlock from '@/components/LineTitleBlock.vue' import LineTitleBlock from '@/components/LineTitleBlock.vue'
import { useSaveRegisterDataMutation } from '@/services/query/auth'
import StepActions from '@/features/auth/components/studentRegister/StepActions.vue' import StepActions from '@/features/auth/components/studentRegister/StepActions.vue'
import { skillAssessmentPart7Schema } from '@/features/auth/schema/student-register' import { skillAssessmentPart7Schema } from '@/features/auth/schema/student-register'
import MediaRecorder from '@/features/auth/components/studentRegister/MediaRecorder.vue' import MediaRecorder from '@/features/auth/components/studentRegister/MediaRecorder.vue'
@@ -49,7 +50,6 @@ import {
toKeyValueList, toKeyValueList,
useStudentRegistrationStore, useStudentRegistrationStore,
} from '@/features/auth/store/student-registration' } from '@/features/auth/store/student-registration'
import { useSaveRegisterDataMutation } from '@/services/query/auth'
const store = useStudentRegistrationStore() const store = useStudentRegistrationStore()
@@ -251,7 +251,7 @@ export const useStudentRegistrationStore = defineStore('studentRegistration', ()
Object.entries(flat).forEach(([key, value]) => { Object.entries(flat).forEach(([key, value]) => {
const section = FIELD_TO_SECTION[key] const section = FIELD_TO_SECTION[key]
if (!section) return if (!section) return
buckets[section] = { ...(buckets[section] || {}), [key]: value } buckets[section] = { ...buckets[section], [key]: value }
}) })
Object.entries(buckets).forEach(([section, patch]) => { Object.entries(buckets).forEach(([section, patch]) => {
const target = sectionRefs[section] const target = sectionRefs[section]
@@ -35,12 +35,12 @@
import { computed } from 'vue' import { computed } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import SvgIcon from '@/components/icons/SvgIcon.vue' import SvgIcon from '@/components/icons/SvgIcon.vue'
import { useStudentExamQuery } from '@/services/query/student-exams'
import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue' import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue' import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
import SimpleTitleIconBlock from '@/components/blocks/SimpleTitleIconBlock.vue' import SimpleTitleIconBlock from '@/components/blocks/SimpleTitleIconBlock.vue'
import StudentExamSummary from '@/features/student/exams/components/StudentExamSummary.vue' import StudentExamSummary from '@/features/student/exams/components/StudentExamSummary.vue'
import StudentExamAttemptItem from '@/features/student/exams/components/StudentExamAttemptItem.vue' import StudentExamAttemptItem from '@/features/student/exams/components/StudentExamAttemptItem.vue'
import { useStudentExamQuery } from '@/services/query/student-exams'
const route = useRoute() const route = useRoute()
const router = useRouter() const router = useRouter()
@@ -108,10 +108,10 @@ import BaseButton from '@/components/BaseButton.vue'
import NoItems from '@/components/blocks/NoItems.vue' import NoItems from '@/components/blocks/NoItems.vue'
import TabsBlock from '@/components/blocks/TabsBlock.vue' import TabsBlock from '@/components/blocks/TabsBlock.vue'
import { objectToFormData } from '@/utils/object-to-formdata' import { objectToFormData } from '@/utils/object-to-formdata'
import { useUploadMediaMutation } from '@/services/query/auth'
import VoiceRecorder from '@/components/form/VoiceRecorder.vue' import VoiceRecorder from '@/components/form/VoiceRecorder.vue'
import ImageUploader from '@/components/form/ImageUploader.vue' import ImageUploader from '@/components/form/ImageUploader.vue'
import VideoPlayerBlock from '@/components/blocks/VideoPlayerBlock.vue' import VideoPlayerBlock from '@/components/blocks/VideoPlayerBlock.vue'
import { useUploadMediaMutation } from '@/services/query/auth'
import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue' import BoxedIconTitleBlock from '@/components/blocks/BoxedIconTitleBlock.vue'
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue' import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
import { import {
@@ -5,10 +5,7 @@
</div> </div>
<div class="student-term-summary__info"> <div class="student-term-summary__info">
<div <div class="student-term-summary__status" :class="`student-term-summary__status--${status}`">
class="student-term-summary__status"
:class="`student-term-summary__status--${status}`"
>
<span class="student-term-summary__status-label">وضعیت دوره :</span> <span class="student-term-summary__status-label">وضعیت دوره :</span>
<span class="student-term-summary__status-value">{{ statusLabel }}</span> <span class="student-term-summary__status-value">{{ statusLabel }}</span>
</div> </div>
+31 -35
View File
@@ -1,35 +1,31 @@
// //tinymce // //tinymce
// import tinymce from "tinymce/tinymce"; // import tinymce from "tinymce/tinymce";
import "tinymce/tinymce"; import 'tinymce/tinymce'
import "tinymce/themes/silver"; import 'tinymce/plugins/link'
import "tinymce/icons/default"; import 'tinymce/plugins/code'
import "tinymce/skins/ui/oxide/skin.css"; import 'tinymce/themes/silver'
// Vue.use(tinymce); import 'tinymce/icons/default'
// skin css /lightgray/skin.min.css import 'tinymce/plugins/lists'
import "tinymce/skins/ui/oxide/content.min.css"; import 'tinymce/plugins/paste'
import "tinymce/skins/ui/oxide/skin.min.css"; import 'tinymce/plugins/print'
// //plugins import 'tinymce/plugins/image'
import "tinymce/plugins/textcolor"; import 'tinymce/plugins/table'
import "tinymce/plugins/colorpicker"; import 'tinymce/plugins/media'
import "tinymce/plugins/advlist"; import 'tinymce/plugins/anchor'
import "tinymce/plugins/autolink"; import 'tinymce/plugins/advlist'
import "tinymce/plugins/lists"; import 'tinymce/plugins/preview'
import "tinymce/plugins/paste"; import 'tinymce/plugins/charmap'
import "tinymce/plugins/link"; import 'tinymce/plugins/autolink'
import "tinymce/plugins/preview"; import 'tinymce/plugins/textcolor'
import "tinymce/plugins/anchor"; import 'tinymce/plugins/wordcount'
import "tinymce/plugins/charmap"; import 'tinymce/plugins/fullscreen'
import "tinymce/plugins/print"; import 'tinymce/plugins/colorpicker'
import "tinymce/plugins/image"; import 'tinymce/plugins/visualblocks'
import "tinymce/plugins/searchreplace"; import '@/styles/plugins/tinymce.css'
import "tinymce/plugins/directionality"; import 'tinymce/plugins/searchreplace'
import "tinymce/plugins/wordcount"; import '@/plugins/tinymce/langs/fa_IR'
// import "tinymce/plugins/help"; import 'tinymce/plugins/directionality'
import "tinymce/plugins/table"; import 'tinymce/plugins/insertdatetime'
import "tinymce/plugins/media"; import 'tinymce/skins/ui/oxide/skin.css'
import "tinymce/plugins/insertdatetime"; import 'tinymce/skins/ui/oxide/skin.min.css'
import "tinymce/plugins/fullscreen"; import 'tinymce/skins/ui/oxide/content.min.css'
import "tinymce/plugins/code";
import "tinymce/plugins/visualblocks";
import "@/plugins/tinymce/langs/fa_IR";
import "@/styles/plugins/tinymce.css";
+472 -392
View File
@@ -1,392 +1,472 @@
import tinymce from "tinymce/tinymce"; import tinymce from 'tinymce/tinymce'
tinymce.addI18n('fa_IR',{ tinymce.addI18n('fa_IR', {
"Redo": "\u0628\u0627\u0632\u0627\u0646\u062c\u0627\u0645", Redo: '\u0628\u0627\u0632\u0627\u0646\u062C\u0627\u0645',
"Undo": "\u0648\u0627\u06af\u0631\u062f", Undo: '\u0648\u0627\u06AF\u0631\u062F',
"Cut": "\u0628\u0631\u0634", Cut: '\u0628\u0631\u0634',
"Copy": "\u06a9\u067e\u06cc", Copy: '\u06A9\u067E\u06CC',
"Paste": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646", Paste: '\u0686\u0633\u0628\u0627\u0646\u062F\u0646',
"Select all": "\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647", 'Select all': '\u0627\u0646\u062A\u062E\u0627\u0628 \u0647\u0645\u0647',
"New document": "\u0633\u0646\u062f \u062c\u062f\u06cc\u062f", 'New document': '\u0633\u0646\u062F \u062C\u062F\u06CC\u062F',
"Ok": "\u062a\u0623\u06cc\u06cc\u062f", Ok: '\u062A\u0623\u06CC\u06CC\u062F',
"Cancel": "\u0644\u063a\u0648", Cancel: '\u0644\u063A\u0648',
"Visual aids": "\u06a9\u0645\u06a9\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc", 'Visual aids': '\u06A9\u0645\u06A9\u200C\u0647\u0627\u06CC \u0628\u0635\u0631\u06CC',
"Bold": "\u067e\u0631\u0631\u0646\u06af", Bold: '\u067E\u0631\u0631\u0646\u06AF',
"Italic": "\u06a9\u062c", Italic: '\u06A9\u062C',
"Underline": "\u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631", Underline: '\u0632\u06CC\u0631 \u062E\u0637 \u062F\u0627\u0631',
"Strikethrough": "\u062e\u0637 \u0632\u062f\u0646", Strikethrough: '\u062E\u0637 \u0632\u062F\u0646',
"Superscript": "\u0628\u0627\u0644\u0627\u0646\u06af\u0627\u0634\u062a", Superscript: '\u0628\u0627\u0644\u0627\u0646\u06AF\u0627\u0634\u062A',
"Subscript": "\u0632\u06cc\u0631\u0646\u06af\u0627\u0634\u062a", Subscript: '\u0632\u06CC\u0631\u0646\u06AF\u0627\u0634\u062A',
"Clear formatting": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", 'Clear formatting':
"Align left": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0686\u067e", '\u067E\u0627\u06A9 \u06A9\u0631\u062F\u0646 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC',
"Align center": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0648\u0633\u0637", 'Align left': '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC \u0627\u0632 \u0686\u067E',
"Align right": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u0627\u0632 \u0631\u0627\u0633\u062a", 'Align center':
"Justify": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc \u062f\u0648\u0637\u0631\u0641\u0647", '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC \u0627\u0632 \u0648\u0633\u0637',
"Bullet list": "\u0641\u0647\u0631\u0633\u062a \u0646\u0634\u0627\u0646\u0647\u200c\u062f\u0627\u0631", 'Align right':
"Numbered list": "\u0641\u0647\u0631\u0633\u062a \u0634\u0645\u0627\u0631\u0647\u200c\u062f\u0627\u0631", '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC \u0627\u0632 \u0631\u0627\u0633\u062A',
"Decrease indent": "\u06a9\u0627\u0647\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", Justify: '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC \u062F\u0648\u0637\u0631\u0641\u0647',
"Increase indent": "\u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc", 'Bullet list':
"Close": "\u0628\u0633\u062a\u0646", '\u0641\u0647\u0631\u0633\u062A \u0646\u0634\u0627\u0646\u0647\u200C\u062F\u0627\u0631',
"Formats": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0647\u0627", 'Numbered list':
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0633\u062a\u0642\u06cc\u0645 \u0628\u0647 \u06a9\u0644\u06cc\u067e\u200c\u0628\u0648\u0631\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc Ctrl+X\/C\/V \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.", '\u0641\u0647\u0631\u0633\u062A \u0634\u0645\u0627\u0631\u0647\u200C\u062F\u0627\u0631',
"Headers": "\u0633\u0631\u0628\u0631\u06af\u200c\u0647\u0627", 'Decrease indent': '\u06A9\u0627\u0647\u0634 \u062A\u0648\u0631\u0641\u062A\u06AF\u06CC',
"Header 1": "\u0633\u0631\u0628\u0631\u06af 1", 'Increase indent':
"Header 2": "\u0633\u0631\u0628\u0631\u06af 2", '\u0627\u0641\u0632\u0627\u06CC\u0634 \u062A\u0648\u0631\u0641\u062A\u06AF\u06CC',
"Header 3": "\u0633\u0631\u0628\u0631\u06af 3", Close: '\u0628\u0633\u062A\u0646',
"Header 4": "\u0633\u0631\u0628\u0631\u06af 4", Formats: '\u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC\u200C\u0647\u0627',
"Header 5": "\u0633\u0631\u0628\u0631\u06af 5", "Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.":
"Header 6": "\u0633\u0631\u0628\u0631\u06af 6", '\u0645\u0631\u0648\u0631\u06AF\u0631 \u0634\u0645\u0627 \u0627\u0632 \u062F\u0633\u062A\u0631\u0633\u06CC \u0645\u0633\u062A\u0642\u06CC\u0645 \u0628\u0647 \u06A9\u0644\u06CC\u067E\u200C\u0628\u0648\u0631\u062F \u067E\u0634\u062A\u06CC\u0628\u0627\u0646\u06CC \u0646\u0645\u06CC\u200C\u06A9\u0646\u062F\u060C \u0644\u0637\u0641\u0627\u064B \u0627\u0632 \u0645\u06CC\u0627\u0646\u0628\u0631\u0647\u0627\u06CC Ctrl+X/C/V \u0635\u0641\u062D\u0647 \u06A9\u0644\u06CC\u062F \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u06A9\u0646\u06CC\u062F.',
"Headings": "\u0633\u0631\u0641\u0635\u0644\u200c\u0647\u0627", Headers: '\u0633\u0631\u0628\u0631\u06AF\u200C\u0647\u0627',
"Heading 1": "\u0633\u0631\u0641\u0635\u0644\u200c 1", 'Header 1': '\u0633\u0631\u0628\u0631\u06AF 1',
"Heading 2": "\u0633\u0631\u0641\u0635\u0644 2", 'Header 2': '\u0633\u0631\u0628\u0631\u06AF 2',
"Heading 3": "\u0633\u0631\u0641\u0635\u0644 3", 'Header 3': '\u0633\u0631\u0628\u0631\u06AF 3',
"Heading 4": "\u0633\u0631\u0641\u0635\u0644 4", 'Header 4': '\u0633\u0631\u0628\u0631\u06AF 4',
"Heading 5": "\u0633\u0631\u0641\u0635\u0644 5", 'Header 5': '\u0633\u0631\u0628\u0631\u06AF 5',
"Heading 6": "\u0633\u0631\u0641\u0635\u0644 6", 'Header 6': '\u0633\u0631\u0628\u0631\u06AF 6',
"Preformatted": "\u0627\u0632 \u067e\u06cc\u0634 \u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc\u200c\u0634\u062f\u0647", Headings: '\u0633\u0631\u0641\u0635\u0644\u200C\u0647\u0627',
"Div": "\u0628\u062e\u0634", 'Heading 1': '\u0633\u0631\u0641\u0635\u0644\u200C 1',
"Pre": "\u067e\u06cc\u0634", 'Heading 2': '\u0633\u0631\u0641\u0635\u0644 2',
"Code": "\u06a9\u062f", 'Heading 3': '\u0633\u0631\u0641\u0635\u0644 3',
"Paragraph": "\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641", 'Heading 4': '\u0633\u0631\u0641\u0635\u0644 4',
"Blockquote": "\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06a9\u06cc", 'Heading 5': '\u0633\u0631\u0641\u0635\u0644 5',
"Inline": "\u0647\u0645\u200c\u0631\u0627\u0633\u062a\u0627", 'Heading 6': '\u0633\u0631\u0641\u0635\u0644 6',
"Blocks": "\u0628\u0644\u0648\u06a9\u200c\u0647\u0627", Preformatted:
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0627\u0645\u06a9\u0627\u0646 \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u062f\u0631 \u062d\u0627\u0644\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062a\u0646\u0638\u06cc\u0645 \u06af\u0634\u062a\u0647. \u062a\u0627 \u0632\u0645\u0627\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0648\u0631\u062f \u0686\u0633\u0628\u0627\u0646\u062f\u0646\u060c \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062a\u0646 \u062e\u0627\u0644\u0635 \u062e\u0648\u0627\u0647\u062f \u0686\u0633\u0628\u06cc\u062f.", '\u0627\u0632 \u067E\u06CC\u0634 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC\u200C\u0634\u062F\u0647',
"Fonts": "\u0641\u0648\u0646\u062a\u200c\u200c\u0647\u0627", Div: '\u0628\u062E\u0634',
"Font Sizes": "\u0627\u0646\u062f\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062a", Pre: '\u067E\u06CC\u0634',
"Class": "\u0637\u0628\u0642\u0647", Code: '\u06A9\u062F',
"Browse for an image": "\u06af\u0634\u062a\u0646 \u0628\u0631\u0627\u06cc \u0639\u06a9\u0633 \u0645\u0648\u0631\u062f \u0646\u0638\u0631", Paragraph: '\u067E\u0627\u0631\u0627\u06AF\u0631\u0627\u0641',
"OR": "\u06cc\u0627", Blockquote: '\u0646\u0642\u0644 \u0642\u0648\u0644 \u0628\u0644\u0648\u06A9\u06CC',
"Drop an image here": "\u062a\u0635\u0648\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0627 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0647\u0627 \u06a9\u0646\u06cc\u062f", Inline: '\u0647\u0645\u200C\u0631\u0627\u0633\u062A\u0627',
"Upload": "\u0622\u067e\u0644\u0648\u062f", Blocks: '\u0628\u0644\u0648\u06A9\u200C\u0647\u0627',
"Block": "\u0628\u0644\u0648\u06a9", 'Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.':
"Align": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", '\u0627\u0645\u06A9\u0627\u0646 \u0686\u0633\u0628\u0627\u0646\u062F\u0646\u060C \u062F\u0631 \u062D\u0627\u0644\u062A \u0645\u062A\u0646 \u062E\u0627\u0644\u0635 \u062A\u0646\u0638\u06CC\u0645 \u06AF\u0634\u062A\u0647. \u062A\u0627 \u0632\u0645\u0627\u0646 \u062A\u063A\u06CC\u06CC\u0631 \u0627\u06CC\u0646 \u062D\u0627\u0644\u062A\u060C \u0645\u062D\u062A\u0648\u0627\u06CC \u0645\u0648\u0631\u062F \u0686\u0633\u0628\u0627\u0646\u062F\u0646\u060C \u0628\u0647 \u0635\u0648\u0631\u062A \u0645\u062A\u0646 \u062E\u0627\u0644\u0635 \u062E\u0648\u0627\u0647\u062F \u0686\u0633\u0628\u06CC\u062F.',
"Default": "\u067e\u06cc\u0634 \u0641\u0631\u0636", Fonts: '\u0641\u0648\u0646\u062A\u200C\u200C\u0647\u0627',
"Circle": "\u062f\u0627\u06cc\u0631\u0647", 'Font Sizes': '\u0627\u0646\u062F\u0627\u0632\u0647\u0654 \u0641\u0648\u0646\u062A',
"Disc": "\u062f\u0627\u06cc\u0631\u0647\u0621 \u062a\u0648\u067e\u0631", Class: '\u0637\u0628\u0642\u0647',
"Square": "\u0686\u0647\u0627\u0631 \u06af\u0648\u0634", 'Browse for an image':
"Lower Alpha": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9", '\u06AF\u0634\u062A\u0646 \u0628\u0631\u0627\u06CC \u0639\u06A9\u0633 \u0645\u0648\u0631\u062F \u0646\u0638\u0631',
"Lower Greek": "\u062d\u0631\u0648\u0641 \u06a9\u0648\u0686\u06a9 \u06cc\u0648\u0646\u0627\u0646\u06cc", OR: '\u06CC\u0627',
"Lower Roman": "\u0627\u0631\u0642\u0627\u0645 \u06a9\u0648\u0686\u06a9 \u0631\u0648\u0645\u06cc", 'Drop an image here':
"Upper Alpha": "\u062d\u0631\u0648\u0641 \u0628\u0632\u0631\u06af", '\u062A\u0635\u0648\u06CC\u0631 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u0631\u0627 \u0627\u06CC\u0646\u062C\u0627 \u0631\u0647\u0627 \u06A9\u0646\u06CC\u062F',
"Upper Roman": "\u0627\u0631\u0642\u0627\u0645 \u0628\u0632\u0631\u06af \u0631\u0648\u0645\u06cc", Upload: '\u0622\u067E\u0644\u0648\u062F',
"Anchor...": "\u0642\u0644\u0627\u0628...", Block: '\u0628\u0644\u0648\u06A9',
"Name": "\u0646\u0627\u0645", Align: '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC',
"Id": "\u0634\u0646\u0627\u0633\u0647", Default: '\u067E\u06CC\u0634 \u0641\u0631\u0636',
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u0634\u0646\u0627\u0633\u0647 \u0645\u06cc \u0628\u0627\u06cc\u0633\u062a \u0628\u0627 \u06cc\u06a9 \u062d\u0631\u0641 \u0627\u0644\u0641\u0628\u0627 \u0622\u063a\u0627\u0632 \u0648 \u0628\u0627 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u062d\u0631\u0648\u0641\u060c \u0627\u0639\u062f\u0627\u062f\u060c \u0639\u0644\u0627\u0645\u062a \u0645\u0650\u0646\u0647\u0627\u060c \u0646\u0642\u0637\u0647\u060c \u062f\u0648 \u0646\u0642\u0637\u0647 \u06cc\u0627 \u062e\u0637 \u062a\u06cc\u0631\u0647 \u0627\u062f\u0627\u0645\u0647 \u06cc\u0627\u0628\u062f.", Circle: '\u062F\u0627\u06CC\u0631\u0647',
"You have unsaved changes are you sure you want to navigate away?": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0634\u0645\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0646\u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u0622\u06cc\u0627 \u062c\u0647\u062a \u062e\u0631\u0648\u062c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f", Disc: '\u062F\u0627\u06CC\u0631\u0647\u0621 \u062A\u0648\u067E\u0631',
"Restore last draft": "\u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0622\u062e\u0631\u06cc\u0646 \u067e\u06cc\u0634 \u0646\u0648\u06cc\u0633", Square: '\u0686\u0647\u0627\u0631 \u06AF\u0648\u0634',
"Special characters...": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627\u06cc \u0648\u06cc\u0698\u0647...", 'Lower Alpha': '\u062D\u0631\u0648\u0641 \u06A9\u0648\u0686\u06A9',
"Source code": "\u0645\u062a\u0646 \u06a9\u062f \u0645\u0646\u0628\u0639", 'Lower Greek':
"Insert\/Edit code sample": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0646\u0645\u0648\u0646\u0647\u0621 \u06a9\u062f", '\u062D\u0631\u0648\u0641 \u06A9\u0648\u0686\u06A9 \u06CC\u0648\u0646\u0627\u0646\u06CC',
"Language": "\u0632\u0628\u0627\u0646", 'Lower Roman': '\u0627\u0631\u0642\u0627\u0645 \u06A9\u0648\u0686\u06A9 \u0631\u0648\u0645\u06CC',
"Code sample...": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f...", 'Upper Alpha': '\u062D\u0631\u0648\u0641 \u0628\u0632\u0631\u06AF',
"Color Picker": "\u0627\u0646\u062a\u062e\u0627\u0628\u200c\u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af", 'Upper Roman': '\u0627\u0631\u0642\u0627\u0645 \u0628\u0632\u0631\u06AF \u0631\u0648\u0645\u06CC',
"R": "\u0642\u0631\u0645\u0632", 'Anchor...': '\u0642\u0644\u0627\u0628...',
"G": "\u0633\u0628\u0632", Name: '\u0646\u0627\u0645',
"B": "\u0622\u0628\u06cc", Id: '\u0634\u0646\u0627\u0633\u0647',
"Left to right": "\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a", 'Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.':
"Right to left": "\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e", '\u0634\u0646\u0627\u0633\u0647 \u0645\u06CC \u0628\u0627\u06CC\u0633\u062A \u0628\u0627 \u06CC\u06A9 \u062D\u0631\u0641 \u0627\u0644\u0641\u0628\u0627 \u0622\u063A\u0627\u0632 \u0648 \u0628\u0627 \u062F\u0646\u0628\u0627\u0644\u0647 \u0627\u06CC \u0627\u0632 \u062D\u0631\u0648\u0641\u060C \u0627\u0639\u062F\u0627\u062F\u060C \u0639\u0644\u0627\u0645\u062A \u0645\u0650\u0646\u0647\u0627\u060C \u0646\u0642\u0637\u0647\u060C \u062F\u0648 \u0646\u0642\u0637\u0647 \u06CC\u0627 \u062E\u0637 \u062A\u06CC\u0631\u0647 \u0627\u062F\u0627\u0645\u0647 \u06CC\u0627\u0628\u062F.',
"Emoticons...": "\u0635\u0648\u0631\u062a\u06a9\u200c\u0647\u0627...", 'You have unsaved changes are you sure you want to navigate away?':
"Metadata and Document Properties": "\u0641\u0631\u0627\u062f\u0627\u062f\u0647 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f", '\u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0634\u0645\u0627 \u0630\u062E\u06CC\u0631\u0647 \u0646\u0634\u062F\u0647 \u0627\u0646\u062F\u060C \u0622\u06CC\u0627 \u062C\u0647\u062A \u062E\u0631\u0648\u062C \u0627\u0637\u0645\u06CC\u0646\u0627\u0646 \u062F\u0627\u0631\u06CC\u062F\u061F',
"Title": "\u0639\u0646\u0648\u0627\u0646", 'Restore last draft':
"Keywords": "\u0648\u0627\u0698\u06af\u0627\u0646 \u06a9\u0644\u06cc\u062f\u06cc", '\u0628\u0627\u0632\u06CC\u0627\u0628\u06CC \u0622\u062E\u0631\u06CC\u0646 \u067E\u06CC\u0634 \u0646\u0648\u06CC\u0633',
"Description": "\u062a\u0648\u0636\u06cc\u062d", 'Special characters...':
"Robots": "\u0631\u0648\u0628\u0627\u062a\u0647\u0627", '\u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627\u06CC \u0648\u06CC\u0698\u0647...',
"Author": "\u0645\u0648\u0644\u0641", 'Source code': '\u0645\u062A\u0646 \u06A9\u062F \u0645\u0646\u0628\u0639',
"Encoding": "\u06a9\u062f\u06af\u0632\u0627\u0631\u06cc \u0645\u062a\u0646", 'Insert/Edit code sample':
"Fullscreen": "\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0646\u0645\u0648\u0646\u0647\u0621 \u06A9\u062F',
"Action": "\u0639\u0645\u0644", Language: '\u0632\u0628\u0627\u0646',
"Shortcut": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631", 'Code sample...': '\u0646\u0645\u0648\u0646\u0647 \u06A9\u062F...',
"Help": "\u0631\u0627\u0647\u0646\u0645\u0627", 'Color Picker':
"Address": "\u0646\u0634\u0627\u0646\u06cc", '\u0627\u0646\u062A\u062E\u0627\u0628\u200C\u06A9\u0646\u0646\u062F\u0647 \u0631\u0646\u06AF',
"Focus to menubar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648", R: '\u0642\u0631\u0645\u0632',
"Focus to toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631", G: '\u0633\u0628\u0632',
"Focus to element path": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0645\u0633\u06cc\u0631 \u0627\u0650\u0644\u0650\u0645\u0627\u0646", B: '\u0622\u0628\u06CC',
"Focus to contextual toolbar": "\u062a\u0645\u0631\u06a9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0645\u062a\u0646\u06cc", 'Left to right': '\u0686\u067E \u0628\u0647 \u0631\u0627\u0633\u062A',
"Insert link (if link plugin activated)": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u067e\u06cc\u0648\u0646\u062f \u0641\u0639\u0627\u0644 \u0634\u062f)", 'Right to left': '\u0631\u0627\u0633\u062A \u0628\u0647 \u0686\u067E',
"Save (if save plugin activated)": "\u062b\u0628\u062a\u00a0(\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u0630\u062e\u06cc\u0631\u0647 \u0633\u0627\u0632\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)", 'Emoticons...': '\u0635\u0648\u0631\u062A\u06A9\u200C\u0647\u0627...',
"Find (if searchreplace plugin activated)": "\u06cc\u0627\u0641\u062a\u0646 (\u0627\u06af\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u062c\u0633\u062a\u062c\u0648\/\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0641\u0639\u0627\u0644 \u0634\u062f)", 'Metadata and Document Properties':
"Plugins installed ({0}):": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0635\u0628 \u0634\u062f\u0646\u062f ({0}):", '\u0641\u0631\u0627\u062F\u0627\u062F\u0647 \u0648 \u0645\u0634\u062E\u0635\u0627\u062A \u0633\u0646\u062F',
"Premium plugins:": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0645\u062e\u0635\u0648\u0635:", Title: '\u0639\u0646\u0648\u0627\u0646',
"Learn more...": "\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u06cc\u0634\u062a\u0631...", Keywords: '\u0648\u0627\u0698\u06AF\u0627\u0646 \u06A9\u0644\u06CC\u062F\u06CC',
"You are using {0}": "\u0634\u0645\u0627 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 {0} \u0645\u06cc \u0628\u0627\u0634\u06cc\u062f", Description: '\u062A\u0648\u0636\u06CC\u062D',
"Plugins": "\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627", Robots: '\u0631\u0648\u0628\u0627\u062A\u0647\u0627',
"Handy Shortcuts": "\u0645\u06cc\u0627\u0646\u0628\u064f\u0631\u0647\u0627\u06cc \u0633\u0648\u062f\u0645\u0646\u062f", Author: '\u0645\u0648\u0644\u0641',
"Horizontal line": "\u062e\u0637 \u0627\u0641\u0642\u06cc", Encoding: '\u06A9\u062F\u06AF\u0632\u0627\u0631\u06CC \u0645\u062A\u0646',
"Insert\/edit image": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631", Fullscreen: '\u062A\u0645\u0627\u0645 \u0635\u0641\u062D\u0647',
"Image description": "\u062a\u0648\u0635\u06cc\u0641 \u062a\u0635\u0648\u06cc\u0631", Action: '\u0639\u0645\u0644',
"Source": "\u0645\u0646\u0628\u0639", Shortcut: '\u0645\u06CC\u0627\u0646\u0628\u064F\u0631',
"Dimensions": "\u0627\u0628\u0639\u0627\u062f", Help: '\u0631\u0627\u0647\u0646\u0645\u0627',
"Constrain proportions": "\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628", Address: '\u0646\u0634\u0627\u0646\u06CC',
"General": "\u0639\u0645\u0648\u0645\u06cc", 'Focus to menubar':
"Advanced": "\u067e\u06cc\u0634\u0631\u0641\u062a\u0647", '\u062A\u0645\u0631\u06A9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648',
"Style": "\u0633\u0628\u06a9", 'Focus to toolbar':
"Vertical space": "\u0641\u0636\u0627\u06cc \u0639\u0645\u0648\u062f\u06cc", '\u062A\u0645\u0631\u06A9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631',
"Horizontal space": "\u0641\u0636\u0627\u06cc \u0627\u0641\u0642\u06cc", 'Focus to element path':
"Border": "\u0644\u0628\u0647", '\u062A\u0645\u0631\u06A9\u0632 \u0628\u0631 \u0645\u0633\u06CC\u0631 \u0627\u0650\u0644\u0650\u0645\u0627\u0646',
"Insert image": "\u062f\u0631\u062c \u062a\u0635\u0648\u06cc\u0631", 'Focus to contextual toolbar':
"Image...": "\u062a\u0635\u0648\u06cc\u0631...", '\u062A\u0645\u0631\u06A9\u0632 \u0628\u0631 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0645\u062A\u0646\u06CC',
"Image list": "\u0641\u0647\u0631\u0633\u062a \u062a\u0635\u0648\u06cc\u0631\u06cc", 'Insert link (if link plugin activated)':
"Rotate counterclockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u067e\u0627\u062f \u0633\u0627\u0639\u062a \u06af\u0631\u062f", '\u062F\u0631\u062C \u067E\u06CC\u0648\u0646\u062F (\u0627\u06AF\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u067E\u06CC\u0648\u0646\u062F \u0641\u0639\u0627\u0644 \u0634\u062F)',
"Rotate clockwise": "\u062f\u064e\u0648\u064e\u0631\u0627\u0646 \u0633\u0627\u0639\u062a \u06af\u0631\u062f", 'Save (if save plugin activated)':
"Flip vertically": "\u0642\u0631\u06cc\u0646\u0647 \u0639\u0645\u0648\u062f\u06cc", '\u062B\u0628\u062A\u00A0(\u0627\u06AF\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u0630\u062E\u06CC\u0631\u0647 \u0633\u0627\u0632\u06CC \u0641\u0639\u0627\u0644 \u0634\u062F)',
"Flip horizontally": "\u0642\u0631\u06cc\u0646\u0647 \u0627\u0641\u0642\u06cc", 'Find (if searchreplace plugin activated)':
"Edit image": "\u0648\u06cc\u0631\u0627\u0633\u062a \u062a\u0635\u0648\u06cc\u0631", '\u06CC\u0627\u0641\u062A\u0646 (\u0627\u06AF\u0631 \u0627\u0641\u0632\u0648\u0646\u0647\u0621 \u062C\u0633\u062A\u062C\u0648/\u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646\u06CC \u0641\u0639\u0627\u0644 \u0634\u062F)',
"Image options": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062a\u0635\u0648\u06cc\u0631", 'Plugins installed ({0}):':
"Zoom in": "\u0628\u0632\u0631\u06af \u0646\u0645\u0627\u06cc\u06cc", '\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06CC\u06CC \u06A9\u0647 \u0646\u0635\u0628 \u0634\u062F\u0646\u062F ({0}):',
"Zoom out": "\u06a9\u0648\u0686\u06a9 \u0646\u0645\u0627\u06cc\u06cc", 'Premium plugins:':
"Crop": "\u0628\u064f\u0631\u0634 \u062f\u064f\u0648\u0631", '\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06CC \u0645\u062E\u0635\u0648\u0635:',
"Resize": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u0647", 'Learn more...': '\u06CC\u0627\u062F\u06AF\u06CC\u0631\u06CC \u0628\u06CC\u0634\u062A\u0631...',
"Orientation": "\u06af\u0650\u0631\u0627", 'You are using {0}':
"Brightness": "\u0631\u0648\u0634\u0646\u0627\u06cc\u06cc", '\u0634\u0645\u0627 \u062F\u0631 \u062D\u0627\u0644 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0627\u0632 {0} \u0645\u06CC \u0628\u0627\u0634\u06CC\u062F',
"Sharpen": "\u0628\u0647\u0628\u0648\u062f \u0644\u0628\u0647", Plugins: '\u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627',
"Contrast": "\u062a\u0636\u0627\u062f \u0631\u0646\u06af", 'Handy Shortcuts':
"Color levels": "\u0633\u0637\u0648\u062d \u0631\u0646\u06af", '\u0645\u06CC\u0627\u0646\u0628\u064F\u0631\u0647\u0627\u06CC \u0633\u0648\u062F\u0645\u0646\u062F',
"Gamma": "\u06af\u0627\u0645\u0627", 'Horizontal line': '\u062E\u0637 \u0627\u0641\u0642\u06CC',
"Invert": "\u0628\u0631\u06af\u0634\u062a \u0631\u0646\u06af", 'Insert/edit image':
"Apply": "\u0627\u0650\u0639\u0645\u0627\u0644", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u062A\u0635\u0648\u06CC\u0631',
"Back": "\u0628\u0627\u0632\u06af\u0634\u062a", 'Image description': '\u062A\u0648\u0635\u06CC\u0641 \u062A\u0635\u0648\u06CC\u0631',
"Insert date\/time": "\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646", Source: '\u0645\u0646\u0628\u0639',
"Date\/time": "\u062a\u0627\u0631\u06cc\u062e\/\u0632\u0645\u0627\u0646", Dimensions: '\u0627\u0628\u0639\u0627\u062F',
"Insert\/Edit Link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f", 'Constrain proportions': '\u062D\u0641\u0638 \u062A\u0646\u0627\u0633\u0628',
"Insert\/edit link": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u067e\u06cc\u0648\u0646\u062f", General: '\u0639\u0645\u0648\u0645\u06CC',
"Text to display": "\u0645\u062a\u0646 \u0646\u0645\u0627\u06cc\u0634\u06cc", Advanced: '\u067E\u06CC\u0634\u0631\u0641\u062A\u0647',
"Url": "\u0622\u062f\u0631\u0633", Style: '\u0633\u0628\u06A9',
"Open link in...": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u06cc\u0648\u0646\u062f \u062f\u0631...", 'Vertical space': '\u0641\u0636\u0627\u06CC \u0639\u0645\u0648\u062F\u06CC',
"Current window": "\u067e\u0646\u062c\u0631\u0647 \u062c\u0627\u0631\u06cc", 'Horizontal space': '\u0641\u0636\u0627\u06CC \u0627\u0641\u0642\u06CC',
"None": "\u0647\u06cc\u0686", Border: '\u0644\u0628\u0647',
"New window": "\u067e\u0646\u062c\u0631\u0647\u0621 \u062c\u062f\u06cc\u062f", 'Insert image': '\u062F\u0631\u062C \u062A\u0635\u0648\u06CC\u0631',
"Remove link": "\u062d\u0630\u0641 \u067e\u06cc\u0648\u0646\u062f", 'Image...': '\u062A\u0635\u0648\u06CC\u0631...',
"Anchors": "\u0642\u0644\u0627\u0628 \u0647\u0627", 'Image list': '\u0641\u0647\u0631\u0633\u062A \u062A\u0635\u0648\u06CC\u0631\u06CC',
"Link...": "\u067e\u06cc\u0648\u0646\u062f...", 'Rotate counterclockwise':
"Paste or type a link": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06cc\u0627 \u062a\u0627\u06cc\u067e \u067e\u06cc\u0648\u0646\u062f", '\u062F\u064E\u0648\u064E\u0631\u0627\u0646 \u067E\u0627\u062F \u0633\u0627\u0639\u062A \u06AF\u0631\u062F',
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u06cc\u06a9 \u0631\u0627\u06cc\u0627\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f mailto: \u062f\u0627\u0631\u06cc\u062f\u061f", 'Rotate clockwise':
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f \u0622\u062f\u0631\u0633 \u0648\u0631\u0648\u062f\u06cc \u0627\u0631\u062c\u0627\u0639\u06cc \u0628\u0647 \u062e\u0627\u0631\u062c \u0627\u0632 \u0627\u06cc\u0646 \u0633\u0627\u06cc\u062a \u0645\u06cc \u0628\u0627\u0634\u062f. \u0622\u06cc\u0627 \u062a\u0645\u0627\u06cc\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062f\u0646 \u067e\u06cc\u0634\u0648\u0646\u062f http:\/\/ \u062f\u0627\u0631\u06cc\u062f\u061f", '\u062F\u064E\u0648\u064E\u0631\u0627\u0646 \u0633\u0627\u0639\u062A \u06AF\u0631\u062F',
"Link list": "\u0641\u0647\u0631\u0633\u062a \u067e\u06cc\u0648\u0646\u062f", 'Flip vertically': '\u0642\u0631\u06CC\u0646\u0647 \u0639\u0645\u0648\u062F\u06CC',
"Insert video": "\u062f\u0631\u062c \u0648\u06cc\u062f\u06cc\u0648", 'Flip horizontally': '\u0642\u0631\u06CC\u0646\u0647 \u0627\u0641\u0642\u06CC',
"Insert\/edit video": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u062f\u06cc\u0648", 'Edit image': '\u0648\u06CC\u0631\u0627\u0633\u062A \u062A\u0635\u0648\u06CC\u0631',
"Insert\/edit media": "\u062f\u0631\u062c\/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647", 'Image options': '\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u062A\u0635\u0648\u06CC\u0631',
"Alternative source": "\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646", 'Zoom in': '\u0628\u0632\u0631\u06AF \u0646\u0645\u0627\u06CC\u06CC',
"Alternative source URL": "\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646", 'Zoom out': '\u06A9\u0648\u0686\u06A9 \u0646\u0645\u0627\u06CC\u06CC',
"Media poster (Image URL)": "\u067e\u0648\u0633\u062a\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u062a\u0635\u0648\u06cc\u0631)", Crop: '\u0628\u064F\u0631\u0634 \u062F\u064F\u0648\u0631',
"Paste your embed code below:": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u06a9\u062f \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0632\u06cc\u0631: ", Resize: '\u062A\u063A\u06CC\u06CC\u0631 \u0627\u0646\u062F\u0627\u0632\u0647',
"Embed": "\u062c\u0627\u0633\u0627\u0632\u06cc", Orientation: '\u06AF\u0650\u0631\u0627',
"Media...": "\u0631\u0633\u0627\u0646\u0647...", Brightness: '\u0631\u0648\u0634\u0646\u0627\u06CC\u06CC',
"Nonbreaking space": "\u0641\u0636\u0627\u06cc \u062e\u0627\u0644\u06cc \u0628\u0631\u0634 \u0646\u0627\u067e\u0630\u06cc\u0631", Sharpen: '\u0628\u0647\u0628\u0648\u062F \u0644\u0628\u0647',
"Page break": "\u0628\u0631\u0634 \u0635\u0641\u062d\u0647", Contrast: '\u062A\u0636\u0627\u062F \u0631\u0646\u06AF',
"Paste as text": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646", 'Color levels': '\u0633\u0637\u0648\u062D \u0631\u0646\u06AF',
"Preview": "\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634", Gamma: '\u06AF\u0627\u0645\u0627',
"Print...": "\u0686\u0627\u067e...", Invert: '\u0628\u0631\u06AF\u0634\u062A \u0631\u0646\u06AF',
"Save": "\u0630\u062e\u06cc\u0631\u0647", Apply: '\u0627\u0650\u0639\u0645\u0627\u0644',
"Find": "\u062c\u0633\u062a\u062c\u0648", Back: '\u0628\u0627\u0632\u06AF\u0634\u062A',
"Replace with": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc \u0628\u0627", 'Insert date/time': '\u062F\u0631\u062C \u062A\u0627\u0631\u06CC\u062E/\u0632\u0645\u0627\u0646',
"Replace": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc", 'Date/time': '\u062A\u0627\u0631\u06CC\u062E/\u0632\u0645\u0627\u0646',
"Replace all": "\u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0647\u0645\u0647", 'Insert/Edit Link':
"Previous": "\u0642\u0628\u0644\u06cc", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u06CC\u0648\u0646\u062F',
"Next": "\u0628\u0639\u062f\u06cc", 'Insert/edit link':
"Find and replace...": "\u06cc\u0627\u0641\u062a\u0646 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06a9\u0631\u062f\u0646...", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u067E\u06CC\u0648\u0646\u062F',
"Could not find the specified string.": "\u0631\u0634\u062a\u0647\u0621 \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u06cc\u0627\u0641\u062a \u0646\u06af\u0631\u062f\u06cc\u062f.", 'Text to display': '\u0645\u062A\u0646 \u0646\u0645\u0627\u06CC\u0634\u06CC',
"Match case": "\u062a\u0637\u0627\u0628\u0642 \u062d\u0631\u0648\u0641", Url: '\u0622\u062F\u0631\u0633',
"Find whole words only": "\u06cc\u0627\u0641\u062a\u0646 \u062f\u0642\u06cc\u0642\u0627\u064b \u06a9\u0644 \u0648\u0627\u0698\u0647", 'Open link in...':
"Spell check": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627", '\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u067E\u06CC\u0648\u0646\u062F \u062F\u0631...',
"Ignore": "\u0628\u06cc \u062e\u06cc\u0627\u0644", 'Current window': '\u067E\u0646\u062C\u0631\u0647 \u062C\u0627\u0631\u06CC',
"Ignore all": "\u0628\u06cc \u062e\u06cc\u0627\u0644 \u0647\u0645\u0647", None: '\u0647\u06CC\u0686',
"Finish": "\u0627\u062a\u0645\u0627\u0645", 'New window': '\u067E\u0646\u062C\u0631\u0647\u0621 \u062C\u062F\u06CC\u062F',
"Add to Dictionary": "\u0628\u0647 \u0648\u0627\u0698\u0647 \u0646\u0627\u0645\u0647 \u0628\u06cc \u0627\u0641\u0632\u0627", 'Remove link': '\u062D\u0630\u0641 \u067E\u06CC\u0648\u0646\u062F',
"Insert table": "\u062f\u0631\u062c \u062c\u062f\u0648\u0644", Anchors: '\u0642\u0644\u0627\u0628 \u0647\u0627',
"Table properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062c\u062f\u0648\u0644", 'Link...': '\u067E\u06CC\u0648\u0646\u062F...',
"Delete table": "\u062d\u0630\u0641 \u062c\u062f\u0648\u0644", 'Paste or type a link':
"Cell": "\u0633\u0644\u0648\u0644", '\u0686\u0633\u0628\u0627\u0646\u062F\u0646 \u06CC\u0627 \u062A\u0627\u06CC\u067E \u067E\u06CC\u0648\u0646\u062F',
"Row": "\u0633\u0637\u0631", 'The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?':
"Column": "\u0633\u062a\u0648\u0646", '\u0628\u0647 \u0646\u0638\u0631 \u0645\u06CC \u0631\u0633\u062F \u0622\u062F\u0631\u0633 \u0648\u0631\u0648\u062F\u06CC \u06CC\u06A9 \u0631\u0627\u06CC\u0627\u0646\u0627\u0645\u0647 \u0628\u0627\u0634\u062F. \u0622\u06CC\u0627 \u062A\u0645\u0627\u06CC\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062F\u0646 \u067E\u06CC\u0634\u0648\u0646\u062F mailto: \u062F\u0627\u0631\u06CC\u062F\u061F',
"Cell properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0644\u0648\u0644", 'The URL you entered seems to be an external link. Do you want to add the required http:// prefix?':
"Merge cells": "\u067e\u06cc\u0648\u0646\u062f \u0633\u0644\u0648\u0644 \u0647\u0627", '\u0628\u0647 \u0646\u0638\u0631 \u0645\u06CC \u0631\u0633\u062F \u0622\u062F\u0631\u0633 \u0648\u0631\u0648\u062F\u06CC \u0627\u0631\u062C\u0627\u0639\u06CC \u0628\u0647 \u062E\u0627\u0631\u062C \u0627\u0632 \u0627\u06CC\u0646 \u0633\u0627\u06CC\u062A \u0645\u06CC \u0628\u0627\u0634\u062F. \u0622\u06CC\u0627 \u062A\u0645\u0627\u06CC\u0644 \u0628\u0647 \u0627\u0641\u0632\u0648\u0631\u062F\u0646 \u067E\u06CC\u0634\u0648\u0646\u062F http:// \u062F\u0627\u0631\u06CC\u062F\u061F',
"Split cell": "\u062c\u062f\u0627 \u0633\u0627\u0632\u06cc \u0633\u0644\u0648\u0644", 'Link list': '\u0641\u0647\u0631\u0633\u062A \u067E\u06CC\u0648\u0646\u062F',
"Insert row before": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627", 'Insert video': '\u062F\u0631\u062C \u0648\u06CC\u062F\u06CC\u0648',
"Insert row after": "\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646", 'Insert/edit video':
"Delete row": "\u062d\u0630\u0641 \u0633\u0637\u0631", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0648\u06CC\u062F\u06CC\u0648',
"Row properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0637\u0631", 'Insert/edit media':
"Cut row": "\u0628\u0631\u0634 \u0633\u0637\u0631", '\u062F\u0631\u062C/\u0648\u06CC\u0631\u0627\u06CC\u0634 \u0631\u0633\u0627\u0646\u0647',
"Copy row": "\u0631\u0648\u0646\u0648\u06cc\u0633\u06cc \u0633\u0637\u0631", 'Alternative source': '\u0645\u0646\u0628\u0639 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646',
"Paste row before": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u0628\u0627\u0644\u0627", 'Alternative source URL':
"Paste row after": "\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0633\u0637\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06cc\u0646", '\u0646\u0634\u0627\u0646\u06CC \u0648\u0628 \u0645\u0646\u0628\u0639 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646',
"Insert column before": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0642\u0628\u0644", 'Media poster (Image URL)':
"Insert column after": "\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u0628\u0639\u062f", '\u067E\u0648\u0633\u062A\u0631 \u0631\u0633\u0627\u0646\u0647 (\u0646\u0634\u0627\u0646\u06CC \u0648\u0628 \u062A\u0635\u0648\u06CC\u0631)',
"Delete column": "\u062d\u0630\u0641 \u0633\u062a\u0648\u0646", 'Paste your embed code below:':
"Cols": "\u0633\u062a\u0648\u0646 \u0647\u0627", '\u0686\u0633\u0628\u0627\u0646\u062F\u0646 \u06A9\u062F \u062C\u0627\u0633\u0627\u0632\u06CC \u0634\u0645\u0627 \u062F\u0631 \u0632\u06CC\u0631: ',
"Rows": "\u0633\u0637\u0631 \u0647\u0627", Embed: '\u062C\u0627\u0633\u0627\u0632\u06CC',
"Width": "\u0639\u0631\u0636", 'Media...': '\u0631\u0633\u0627\u0646\u0647...',
"Height": "\u0627\u0631\u062a\u0641\u0627\u0639", 'Nonbreaking space':
"Cell spacing": "\u0641\u0627\u0635\u0644\u0647 \u0645\u06cc\u0627\u0646 \u0633\u0644\u0648\u0644\u06cc", '\u0641\u0636\u0627\u06CC \u062E\u0627\u0644\u06CC \u0628\u0631\u0634 \u0646\u0627\u067E\u0630\u06CC\u0631',
"Cell padding": "\u062d\u0627\u0634\u06cc\u0647 \u062f\u0631\u0648\u0646 \u0633\u0644\u0648\u0644\u06cc", 'Page break': '\u0628\u0631\u0634 \u0635\u0641\u062D\u0647',
"Show caption": "\u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0648\u0627\u0646", 'Paste as text': '\u0686\u0633\u0628\u0627\u0646\u062F\u0646 \u0645\u062A\u0646',
"Left": "\u0686\u067e", Preview: '\u067E\u06CC\u0634 \u0646\u0645\u0627\u06CC\u0634',
"Center": "\u0645\u06cc\u0627\u0646\u0647", 'Print...': '\u0686\u0627\u067E...',
"Right": "\u0631\u0627\u0633\u062a", Save: '\u0630\u062E\u06CC\u0631\u0647',
"Cell type": "\u0646\u0648\u0639 \u0633\u0644\u0648\u0644", Find: '\u062C\u0633\u062A\u062C\u0648',
"Scope": "\u062d\u0648\u0632\u0647", 'Replace with': '\u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646\u06CC \u0628\u0627',
"Alignment": "\u0647\u0645 \u062a\u0631\u0627\u0632\u06cc", Replace: '\u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646\u06CC',
"H Align": "\u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc", 'Replace all': '\u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 \u0647\u0645\u0647',
"V Align": "\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc", Previous: '\u0642\u0628\u0644\u06CC',
"Top": "\u0628\u0627\u0644\u0627", Next: '\u0628\u0639\u062F\u06CC',
"Middle": "\u0645\u06cc\u0627\u0646\u0647", 'Find and replace...':
"Bottom": "\u067e\u0627\u06cc\u06cc\u0646", '\u06CC\u0627\u0641\u062A\u0646 \u0648 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 \u06A9\u0631\u062F\u0646...',
"Header cell": "\u0633\u0644\u0648\u0644 \u0633\u0631 \u0633\u062a\u0648\u0646", 'Could not find the specified string.':
"Row group": "\u06af\u0631\u0648\u0647 \u0633\u0637\u0631\u06cc", '\u0631\u0634\u062A\u0647\u0621 \u0645\u0648\u0631\u062F \u0646\u0638\u0631 \u06CC\u0627\u0641\u062A \u0646\u06AF\u0631\u062F\u06CC\u062F.',
"Column group": "\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646\u06cc", 'Match case': '\u062A\u0637\u0627\u0628\u0642 \u062D\u0631\u0648\u0641',
"Row type": "\u0646\u0648\u0639 \u0633\u0637\u0631", 'Find whole words only':
"Header": "\u0633\u0631 \u0622\u0645\u062f", '\u06CC\u0627\u0641\u062A\u0646 \u062F\u0642\u06CC\u0642\u0627\u064B \u06A9\u0644 \u0648\u0627\u0698\u0647',
"Body": "\u0628\u062f\u0646\u0647", 'Spell check': '\u0628\u0631\u0631\u0633\u06CC \u0627\u0645\u0644\u0627',
"Footer": "\u067e\u0627 \u0646\u0648\u0634\u062a", Ignore: '\u0628\u06CC \u062E\u06CC\u0627\u0644',
"Border color": "\u0631\u0646\u06af \u0644\u0628\u0647", 'Ignore all': '\u0628\u06CC \u062E\u06CC\u0627\u0644 \u0647\u0645\u0647',
"Insert template...": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648...", Finish: '\u0627\u062A\u0645\u0627\u0645',
"Templates": "\u0627\u0644\u06af\u0648\u0647\u0627", 'Add to Dictionary':
"Template": "\u0627\u0644\u06af\u0648", '\u0628\u0647 \u0648\u0627\u0698\u0647 \u0646\u0627\u0645\u0647 \u0628\u06CC \u0627\u0641\u0632\u0627',
"Text color": "\u0631\u0646\u06af \u0645\u062a\u0646", 'Insert table': '\u062F\u0631\u062C \u062C\u062F\u0648\u0644',
"Background color": "\u0631\u0646\u06af \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647", 'Table properties': '\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u062C\u062F\u0648\u0644',
"Custom...": "\u062f\u0644\u062e\u0648\u0627\u0647...", 'Delete table': '\u062D\u0630\u0641 \u062C\u062F\u0648\u0644',
"Custom color": "\u0631\u0646\u06af \u062f\u0644\u062e\u0648\u0627\u0647", Cell: '\u0633\u0644\u0648\u0644',
"No color": "\u0628\u062f\u0648\u0646 \u0631\u0646\u06af", Row: '\u0633\u0637\u0631',
"Remove color": "\u062d\u0630\u0641 \u0631\u0646\u06af", Column: '\u0633\u062A\u0648\u0646',
"Table of Contents": "\u0641\u0647\u0631\u0633\u062a \u0639\u0646\u0627\u0648\u06cc\u0646", 'Cell properties': '\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0633\u0644\u0648\u0644',
"Show blocks": "\u0646\u0645\u0627\u06cc\u0634 \u0628\u0644\u0648\u06a9 \u0647\u0627", 'Merge cells': '\u067E\u06CC\u0648\u0646\u062F \u0633\u0644\u0648\u0644 \u0647\u0627',
"Show invisible characters": "\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u0646\u0627\u067e\u06cc\u062f\u0627", 'Split cell': '\u062C\u062F\u0627 \u0633\u0627\u0632\u06CC \u0633\u0644\u0648\u0644',
"Word count": "\u062a\u0639\u062f\u0627\u062f \u0648\u0627\u0698\u0647\u200c\u0647\u0627", 'Insert row before':
"Words: {0}": "\u0648\u0627\u0698\u0647 \u0647\u0627: {0}", '\u062F\u0631\u062C \u0633\u0637\u0631 \u062F\u0631 \u0628\u0627\u0644\u0627',
"{0} words": "{0} \u0648\u0627\u0698\u0647", 'Insert row after':
"File": "\u067e\u0631\u0648\u0646\u062f\u0647", '\u062F\u0631\u062C \u0633\u0637\u0631 \u062F\u0631 \u067E\u0627\u06CC\u06CC\u0646',
"Edit": "\u0648\u06cc\u0631\u0627\u06cc\u0634", 'Delete row': '\u062D\u0630\u0641 \u0633\u0637\u0631',
"Insert": "\u062f\u0631\u062c", 'Row properties': '\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0633\u0637\u0631',
"View": "\u0646\u0645\u0627\u06cc\u0634", 'Cut row': '\u0628\u0631\u0634 \u0633\u0637\u0631',
"Format": "\u0642\u0627\u0644\u0628", 'Copy row': '\u0631\u0648\u0646\u0648\u06CC\u0633\u06CC \u0633\u0637\u0631',
"Table": "\u062c\u062f\u0648\u0644", 'Paste row before':
"Tools": "\u0627\u0628\u0632\u0627\u0631\u0647\u0627", '\u0686\u0633\u0628\u0627\u0646\u062F\u0646 \u0633\u0637\u0631 \u062F\u0631 \u0628\u0627\u0644\u0627',
"Powered by {0}": "\u062a\u0648\u0627\u0646 \u06af\u0631\u0641\u062a\u0647 \u0627\u0632 {0}", 'Paste row after':
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u0646\u0648 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F9 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + F10 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.\n\u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062a\u0631\u06a9\u06cc\u0628\u06cc ALT + 0 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u06cc\u06cc\u062f.", '\u0686\u0633\u0628\u0627\u0646\u062F\u0646 \u0633\u0637\u0631 \u062F\u0631 \u067E\u0627\u06CC\u06CC\u0646',
"Image title": "\u0639\u0646\u0648\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631", 'Insert column before': '\u062F\u0631\u062C \u0633\u062A\u0648\u0646 \u0642\u0628\u0644',
"Border width": "\u0639\u0631\u0636 \u062d\u0627\u0634\u06cc\u0647", 'Insert column after': '\u062F\u0631\u062C \u0633\u062A\u0648\u0646 \u0628\u0639\u062F',
"Border style": "\u0633\u0628\u06a9 \u062d\u0627\u0634\u06cc\u0647", 'Delete column': '\u062D\u0630\u0641 \u0633\u062A\u0648\u0646',
"Error": "\u062e\u0637\u0627", Cols: '\u0633\u062A\u0648\u0646 \u0647\u0627',
"Warn": "\u0647\u0634\u062f\u0627\u0631", Rows: '\u0633\u0637\u0631 \u0647\u0627',
"Valid": "\u0645\u0639\u062a\u0628\u0631", Width: '\u0639\u0631\u0636',
"To open the popup, press Shift+Enter": "\u062c\u0647\u062a \u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060c \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", Height: '\u0627\u0631\u062A\u0641\u0627\u0639',
"Rich Text Area. Press ALT-0 for help.": "\u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646 \u063a\u0646\u06cc. \u062c\u0647\u062a \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062f\u0647\u06cc\u062f.", 'Cell spacing':
"System Font": "\u0641\u0648\u0646\u062a \u0633\u06cc\u0633\u062a\u0645\u06cc", '\u0641\u0627\u0635\u0644\u0647 \u0645\u06CC\u0627\u0646 \u0633\u0644\u0648\u0644\u06CC',
"Failed to upload image: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631: {0}", 'Cell padding':
"Failed to load plugin: {0} from url {1}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 {1}", '\u062D\u0627\u0634\u06CC\u0647 \u062F\u0631\u0648\u0646 \u0633\u0644\u0648\u0644\u06CC',
"Failed to load plugin url: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u0627\u0646\u06cc \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}", 'Show caption': '\u0646\u0645\u0627\u06CC\u0634 \u0639\u0646\u0648\u0627\u0646',
"Failed to initialize plugin: {0}": "\u0639\u062f\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u062f\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0627\u0641\u0632\u0648\u0646\u0647: {0}", Left: '\u0686\u067E',
"example": "\u0645\u062b\u0627\u0644", Center: '\u0645\u06CC\u0627\u0646\u0647',
"Search": "\u062c\u0633\u062a\u062c\u0648", Right: '\u0631\u0627\u0633\u062A',
"All": "\u0647\u0645\u0647", 'Cell type': '\u0646\u0648\u0639 \u0633\u0644\u0648\u0644',
"Currency": "\u0627\u0631\u0632", Scope: '\u062D\u0648\u0632\u0647',
"Text": "\u0645\u062a\u0646", Alignment: '\u0647\u0645 \u062A\u0631\u0627\u0632\u06CC',
"Quotations": "\u0646\u0642\u0644\u200c\u0642\u0648\u0644\u200c\u0647\u0627", 'H Align': '\u062A\u0631\u0627\u0632 \u0627\u0641\u0642\u06CC',
"Mathematical": "\u0631\u06cc\u0627\u0636\u06cc", 'V Align': '\u062A\u0631\u0627\u0632 \u0639\u0645\u0648\u062F\u06CC',
"Extended Latin": "\u0644\u0627\u062a\u06cc\u0646 \u06af\u0633\u062a\u0631\u062f\u0647", Top: '\u0628\u0627\u0644\u0627',
"Symbols": "\u0646\u0645\u0627\u062f\u0647\u0627", Middle: '\u0645\u06CC\u0627\u0646\u0647',
"Arrows": "\u067e\u06cc\u06a9\u0627\u0646\u200c\u0647\u0627", Bottom: '\u067E\u0627\u06CC\u06CC\u0646',
"User Defined": "\u0628\u0647 \u062e\u0648\u0627\u0633\u062a \u06a9\u0627\u0631\u0628\u0631", 'Header cell': '\u0633\u0644\u0648\u0644 \u0633\u0631 \u0633\u062A\u0648\u0646',
"dollar sign": "\u0646\u0645\u0627\u062f \u062f\u0644\u0627\u0631", 'Row group': '\u06AF\u0631\u0648\u0647 \u0633\u0637\u0631\u06CC',
"currency sign": "\u0646\u0645\u0627\u062f \u0627\u0631\u0632", 'Column group': '\u06AF\u0631\u0648\u0647 \u0633\u062A\u0648\u0646\u06CC',
"euro-currency sign": "\u0646\u0645\u0627\u062f \u06cc\u0648\u0631\u0648", 'Row type': '\u0646\u0648\u0639 \u0633\u0637\u0631',
"colon sign": "\u0646\u0645\u0627\u062f \u062f\u0648\u0646\u0642\u0637\u0647", Header: '\u0633\u0631 \u0622\u0645\u062F',
"cruzeiro sign": "\u0646\u0645\u0627\u062f \u06a9\u0631\u0648\u0632\u06cc\u0631\u0648", Body: '\u0628\u062F\u0646\u0647',
"french franc sign": "\u0646\u0645\u0627\u062f \u0641\u0631\u0627\u0646\u06a9 \u0641\u0631\u0627\u0646\u0633\u0647", Footer: '\u067E\u0627 \u0646\u0648\u0634\u062A',
"lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647", 'Border color': '\u0631\u0646\u06AF \u0644\u0628\u0647',
"mill sign": "\u0646\u0645\u0627\u062f \u0645\u06cc\u0644", 'Insert template...': '\u062F\u0631\u062C \u0627\u0644\u06AF\u0648...',
"naira sign": "\u0646\u0645\u0627\u062f \u0646\u0627\u06cc\u0631\u0627", Templates: '\u0627\u0644\u06AF\u0648\u0647\u0627',
"peseta sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u062a\u0627", Template: '\u0627\u0644\u06AF\u0648',
"rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647", 'Text color': '\u0631\u0646\u06AF \u0645\u062A\u0646',
"won sign": "\u0646\u0645\u0627\u062f \u0648\u0648\u0646", 'Background color': '\u0631\u0646\u06AF \u067E\u0633 \u0632\u0645\u06CC\u0646\u0647',
"new sheqel sign": "\u0646\u0645\u0627\u062f \u0634\u06a9\u0644 \u062c\u062f\u06cc\u062f", 'Custom...': '\u062F\u0644\u062E\u0648\u0627\u0647...',
"dong sign": "\u0646\u0645\u0627\u062f \u062f\u0627\u0646\u06af", 'Custom color': '\u0631\u0646\u06AF \u062F\u0644\u062E\u0648\u0627\u0647',
"kip sign": "\u0646\u0645\u0627\u062f \u06a9\u06cc\u067e", 'No color': '\u0628\u062F\u0648\u0646 \u0631\u0646\u06AF',
"tugrik sign": "\u0646\u0645\u0627\u062f \u062a\u0648\u06af\u0631\u0648\u06af", 'Remove color': '\u062D\u0630\u0641 \u0631\u0646\u06AF',
"drachma sign": "\u0646\u0645\u0627\u062f \u062f\u0631\u0627\u062e\u0645\u0627", 'Table of Contents': '\u0641\u0647\u0631\u0633\u062A \u0639\u0646\u0627\u0648\u06CC\u0646',
"german penny symbol": "\u0646\u0645\u0627\u062f \u067e\u0646\u06cc \u0622\u0644\u0645\u0627\u0646\u06cc", 'Show blocks': '\u0646\u0645\u0627\u06CC\u0634 \u0628\u0644\u0648\u06A9 \u0647\u0627',
"peso sign": "\u0646\u0645\u0627\u062f \u067e\u0632\u0648", 'Show invisible characters':
"guarani sign": "\u0646\u0645\u0627\u062f \u06af\u0648\u0627\u0631\u0627\u0646\u06cc", '\u0646\u0645\u0627\u06CC\u0634 \u0646\u0648\u06CC\u0633\u0647 \u0647\u0627\u06CC \u0646\u0627\u067E\u06CC\u062F\u0627',
"austral sign": "\u0646\u0645\u0627\u062f \u0622\u0633\u062a\u0631\u0627\u0644", 'Word count': '\u062A\u0639\u062F\u0627\u062F \u0648\u0627\u0698\u0647\u200C\u0647\u0627',
"hryvnia sign": "\u0646\u0645\u0627\u062f \u06af\u0631\u06cc\u0648\u0646\u0627", 'Words: {0}': '\u0648\u0627\u0698\u0647 \u0647\u0627: {0}',
"cedi sign": "\u0646\u0645\u0627\u062f \u0633\u062f\u06cc", '{0} words': '{0} \u0648\u0627\u0698\u0647',
"livre tournois sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0648\u0631\u0647 \u062a\u0648\u0631\u0646\u0648\u0627", File: '\u067E\u0631\u0648\u0646\u062F\u0647',
"spesmilo sign": "\u0646\u0645\u0627\u062f \u0627\u0633\u067e\u0633\u0645\u06cc\u0644\u0648", Edit: '\u0648\u06CC\u0631\u0627\u06CC\u0634',
"tenge sign": "\u0646\u0645\u0627\u062f \u062a\u0646\u06af\u0647", Insert: '\u062F\u0631\u062C',
"indian rupee sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u067e\u06cc\u0647 \u0647\u0646\u062f\u06cc", View: '\u0646\u0645\u0627\u06CC\u0634',
"turkish lira sign": "\u0646\u0645\u0627\u062f \u0644\u06cc\u0631\u0647 \u062a\u0631\u06a9\u06cc", Format: '\u0642\u0627\u0644\u0628',
"nordic mark sign": "\u0646\u0645\u0627\u062f \u0645\u0627\u0631\u06a9 \u0646\u0631\u0648\u0698", Table: '\u062C\u062F\u0648\u0644',
"manat sign": "\u0646\u0645\u0627\u062f \u0645\u0646\u0627\u062a", Tools: '\u0627\u0628\u0632\u0627\u0631\u0647\u0627',
"ruble sign": "\u0646\u0645\u0627\u062f \u0631\u0648\u0628\u0644", 'Powered by {0}': '\u062A\u0648\u0627\u0646 \u06AF\u0631\u0641\u062A\u0647 \u0627\u0632 {0}',
"yen character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0646", 'Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help':
"yuan character": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646", '\u0646\u0627\u062D\u06CC\u0647 \u0645\u062A\u0646 \u063A\u0646\u06CC.\n\u062C\u0647\u062A \u0645\u0634\u0627\u0647\u062F\u0647 \u0645\u0646\u0648 \u0627\u0632 \u06A9\u0644\u06CC\u062F\u0647\u0627\u06CC \u062A\u0631\u06A9\u06CC\u0628\u06CC ALT + F9 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u0645\u0627\u06CC\u06CC\u062F.\n\u062C\u0647\u062A \u0645\u0634\u0627\u0647\u062F\u0647 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0627\u0632 \u06A9\u0644\u06CC\u062F\u0647\u0627\u06CC \u062A\u0631\u06A9\u06CC\u0628\u06CC ALT + F10 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u0645\u0627\u06CC\u06CC\u062F.\n\u062C\u0647\u062A \u0645\u0634\u0627\u0647\u062F\u0647 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0632 \u06A9\u0644\u06CC\u062F\u0647\u0627\u06CC \u062A\u0631\u06A9\u06CC\u0628\u06CC ALT + 0 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0646\u0645\u0627\u06CC\u06CC\u062F.',
"yuan character, in hong kong and taiwan": "\u0646\u0648\u06cc\u0633\u0647 \u06cc\u0648\u0627\u0646\u060c \u062f\u0631 \u0647\u0646\u06af\u200c\u06a9\u0646\u06af \u0648 \u062a\u0627\u06cc\u0648\u0627\u0646", 'Image title': '\u0639\u0646\u0648\u0627\u0646 \u062A\u0635\u0648\u06CC\u0631',
"yen\/yuan character variant one": "\u0646\u0648\u06cc\u0633\u0647 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u06cc\u0646\/\u06cc\u0648\u0627\u0646", 'Border width': '\u0639\u0631\u0636 \u062D\u0627\u0634\u06CC\u0647',
"Loading emoticons...": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u06a9\u0644\u06a9\u200c\u0647\u0627...", 'Border style': '\u0633\u0628\u06A9 \u062D\u0627\u0634\u06CC\u0647',
"Could not load emoticons": "\u0634\u06a9\u0644\u06a9\u200c\u0647\u0627 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0646\u0634\u062f\u0646\u062f", Error: '\u062E\u0637\u0627',
"People": "\u0627\u0641\u0631\u0627\u062f", Warn: '\u0647\u0634\u062F\u0627\u0631',
"Animals and Nature": "\u062d\u06cc\u0648\u0627\u0646\u0627\u062a \u0648 \u0637\u0628\u06cc\u0639\u062a", Valid: '\u0645\u0639\u062A\u0628\u0631',
"Food and Drink": "\u063a\u0630\u0627 \u0648 \u0646\u0648\u0634\u06cc\u062f\u0646\u06cc", 'To open the popup, press Shift+Enter':
"Activity": "\u0641\u0639\u0627\u0644\u06cc\u062a", '\u062C\u0647\u062A \u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u067E\u0646\u062C\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u060C \u06A9\u0644\u06CC\u062F\u0647\u0627\u06CC Shift + Enter \u0631\u0627 \u0641\u0634\u0627\u0631 \u062F\u0647\u06CC\u062F.',
"Travel and Places": "\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06a9\u0646", 'Rich Text Area. Press ALT-0 for help.':
"Objects": "\u0627\u0634\u06cc\u0627", '\u0646\u0627\u062D\u06CC\u0647 \u0645\u062A\u0646 \u063A\u0646\u06CC. \u062C\u0647\u062A \u0645\u0634\u0627\u0647\u062F\u0647\u0654 \u0631\u0627\u0647\u0646\u0645\u0627 \u06A9\u0644\u06CC\u062F\u0647\u0627\u06CC ALT + 0 \u0631\u0627 \u0641\u0634\u0627\u0631 \u062F\u0647\u06CC\u062F.',
"Flags": "\u067e\u0631\u0686\u0645\u200c\u0647\u0627", 'System Font': '\u0641\u0648\u0646\u062A \u0633\u06CC\u0633\u062A\u0645\u06CC',
"Characters": "\u0646\u0648\u06cc\u0633\u0647\u200c\u0647\u0627", 'Failed to upload image: {0}':
"Characters (no spaces)": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627 (\u0628\u062f\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)", '\u0639\u062F\u0645 \u0645\u0648\u0641\u0642\u06CC\u062A \u062F\u0631 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u062A\u0635\u0648\u06CC\u0631: {0}',
"Error: Form submit field collision.": "\u062e\u0637\u0627: \u062a\u062f\u0627\u062e\u0644 \u062f\u0631 \u062b\u0628\u062a \u0641\u0631\u0645.", 'Failed to load plugin: {0} from url {1}':
"Error: No form element found.": "\u062e\u0637\u0627: \u0647\u06cc\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06cc \u06cc\u0627\u0641\u062a \u0646\u0634\u062f.", '\u0639\u062F\u0645 \u0645\u0648\u0641\u0642\u06CC\u062A \u062F\u0631 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0627\u0641\u0632\u0648\u0646\u0647: {0} \u0627\u0632 \u0646\u0634\u0627\u0646\u06CC \u0648\u0628 {1}',
"Update": "\u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc", 'Failed to load plugin url: {0}':
"Color swatch": "\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06af", '\u0639\u062F\u0645 \u0645\u0648\u0641\u0642\u06CC\u062A \u062F\u0631 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u0634\u0627\u0646\u06CC \u0648\u0628 \u0627\u0641\u0632\u0648\u0646\u0647: {0}',
"Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc", 'Failed to initialize plugin: {0}':
"Green": "\u0633\u0628\u0632", '\u0639\u062F\u0645 \u0645\u0648\u0641\u0642\u06CC\u062A \u062F\u0631 \u0631\u0627\u0647\u200C\u0627\u0646\u062F\u0627\u0632\u06CC \u0627\u0641\u0632\u0648\u0646\u0647: {0}',
"Blue": "\u0622\u0628\u06cc", example: '\u0645\u062B\u0627\u0644',
"Purple": "\u0628\u0646\u0641\u0634", Search: '\u062C\u0633\u062A\u062C\u0648',
"Navy Blue": "\u0633\u0631\u0645\u0647\u200c\u0627\u06cc", All: '\u0647\u0645\u0647',
"Dark Turquoise": "\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u062a\u06cc\u0631\u0647", Currency: '\u0627\u0631\u0632',
"Dark Green": "\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647", Text: '\u0645\u062A\u0646',
"Medium Blue": "\u0622\u0628\u06cc \u0633\u06cc\u0631", Quotations: '\u0646\u0642\u0644\u200C\u0642\u0648\u0644\u200C\u0647\u0627',
"Medium Purple": "\u0622\u0628\u06cc \u0628\u0646\u0641\u0634", Mathematical: '\u0631\u06CC\u0627\u0636\u06CC',
"Midnight Blue": "\u0622\u0628\u06cc \u0646\u0641\u062a\u06cc", 'Extended Latin': '\u0644\u0627\u062A\u06CC\u0646 \u06AF\u0633\u062A\u0631\u062F\u0647',
"Yellow": "\u0632\u0631\u062f", Symbols: '\u0646\u0645\u0627\u062F\u0647\u0627',
"Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc", Arrows: '\u067E\u06CC\u06A9\u0627\u0646\u200C\u0647\u0627',
"Red": "\u0642\u0631\u0645\u0632", 'User Defined': '\u0628\u0647 \u062E\u0648\u0627\u0633\u062A \u06A9\u0627\u0631\u0628\u0631',
"Light Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0631\u0648\u0634\u0646", 'dollar sign': '\u0646\u0645\u0627\u062F \u062F\u0644\u0627\u0631',
"Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc", 'currency sign': '\u0646\u0645\u0627\u062F \u0627\u0631\u0632',
"Dark Yellow": "\u0632\u0631\u062f \u062a\u06cc\u0631\u0647", 'euro-currency sign': '\u0646\u0645\u0627\u062F \u06CC\u0648\u0631\u0648',
"Dark Orange": "\u0646\u0627\u0631\u0646\u062c\u06cc \u062a\u06cc\u0631\u0647", 'colon sign': '\u0646\u0645\u0627\u062F \u062F\u0648\u0646\u0642\u0637\u0647',
"Dark Red": "\u0642\u0631\u0645\u0632 \u062a\u06cc\u0631\u0647", 'cruzeiro sign': '\u0646\u0645\u0627\u062F \u06A9\u0631\u0648\u0632\u06CC\u0631\u0648',
"Medium Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u0646\u06cc\u0645\u0647\u200c\u0631\u0648\u0634\u0646", 'french franc sign':
"Dark Gray": "\u062e\u0627\u06a9\u0633\u062a\u0631\u06cc \u062a\u06cc\u0631\u0647", '\u0646\u0645\u0627\u062F \u0641\u0631\u0627\u0646\u06A9 \u0641\u0631\u0627\u0646\u0633\u0647',
"Black": "\u0633\u06cc\u0627\u0647", 'lira sign': '\u0646\u0645\u0627\u062F \u0644\u06CC\u0631\u0647',
"White": "\u0633\u0641\u06cc\u062f", 'mill sign': '\u0646\u0645\u0627\u062F \u0645\u06CC\u0644',
"Switch to or from fullscreen mode": "\u062a\u063a\u06cc\u06cc\u0631 \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647 \u06cc\u0627 \u0628\u0647 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645\u200c\u0635\u0641\u062d\u0647", 'naira sign': '\u0646\u0645\u0627\u062F \u0646\u0627\u06CC\u0631\u0627',
"Open help dialog": "\u0628\u0627\u0632 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627", 'peseta sign': '\u0646\u0645\u0627\u062F \u067E\u0632\u062A\u0627',
"history": "\u062a\u0627\u0631\u06cc\u062e\u0686\u0647", 'rupee sign': '\u0646\u0645\u0627\u062F \u0631\u0648\u067E\u06CC\u0647',
"styles": "\u0633\u0628\u06a9\u200c\u0647\u0627", 'won sign': '\u0646\u0645\u0627\u062F \u0648\u0648\u0646',
"formatting": "\u0642\u0627\u0644\u0628\u200c\u0628\u0646\u062f\u06cc", 'new sheqel sign': '\u0646\u0645\u0627\u062F \u0634\u06A9\u0644 \u062C\u062F\u06CC\u062F',
"alignment": "\u062a\u0631\u0627\u0632\u0628\u0646\u062f\u06cc", 'dong sign': '\u0646\u0645\u0627\u062F \u062F\u0627\u0646\u06AF',
"indentation": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc", 'kip sign': '\u0646\u0645\u0627\u062F \u06A9\u06CC\u067E',
"permanent pen": "\u0642\u0644\u0645 \u062f\u0627\u0626\u0645\u06cc", 'tugrik sign': '\u0646\u0645\u0627\u062F \u062A\u0648\u06AF\u0631\u0648\u06AF',
"comments": "\u0646\u0638\u0631\u0627\u062a", 'drachma sign': '\u0646\u0645\u0627\u062F \u062F\u0631\u0627\u062E\u0645\u0627',
"Anchor": "\u0642\u0644\u0627\u0628", 'german penny symbol':
"Special character": "\u0646\u0648\u06cc\u0633\u0647 \u0647\u0627\u06cc \u062e\u0627\u0635", '\u0646\u0645\u0627\u062F \u067E\u0646\u06CC \u0622\u0644\u0645\u0627\u0646\u06CC',
"Code sample": "\u0646\u0645\u0648\u0646\u0647 \u06a9\u064f\u062f", 'peso sign': '\u0646\u0645\u0627\u062F \u067E\u0632\u0648',
"Color": "\u0631\u0646\u06af", 'guarani sign': '\u0646\u0645\u0627\u062F \u06AF\u0648\u0627\u0631\u0627\u0646\u06CC',
"Emoticons": "\u0635\u0648\u0631\u062a\u06a9 \u0647\u0627", 'austral sign': '\u0646\u0645\u0627\u062F \u0622\u0633\u062A\u0631\u0627\u0644',
"Document properties": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0633\u0646\u062f", 'hryvnia sign': '\u0646\u0645\u0627\u062F \u06AF\u0631\u06CC\u0648\u0646\u0627',
"Image": "\u062a\u0635\u0648\u06cc\u0631", 'cedi sign': '\u0646\u0645\u0627\u062F \u0633\u062F\u06CC',
"Insert link": "\u062f\u0631\u062c \u067e\u06cc\u0648\u0646\u062f", 'livre tournois sign':
"Target": "\u0645\u0642\u0635\u062f", '\u0646\u0645\u0627\u062F \u0644\u06CC\u0648\u0631\u0647 \u062A\u0648\u0631\u0646\u0648\u0627',
"Link": "\u067e\u06cc\u0648\u0646\u062f", 'spesmilo sign': '\u0646\u0645\u0627\u062F \u0627\u0633\u067E\u0633\u0645\u06CC\u0644\u0648',
"Poster": "\u067e\u0648\u0633\u062a\u0631", 'tenge sign': '\u0646\u0645\u0627\u062F \u062A\u0646\u06AF\u0647',
"Media": "\u0631\u0633\u0627\u0646\u0647", 'indian rupee sign':
"Print": "\u0686\u0627\u067e", '\u0646\u0645\u0627\u062F \u0631\u0648\u067E\u06CC\u0647 \u0647\u0646\u062F\u06CC',
"Prev": "\u0642\u0628\u0644\u06cc", 'turkish lira sign': '\u0646\u0645\u0627\u062F \u0644\u06CC\u0631\u0647 \u062A\u0631\u06A9\u06CC',
"Find and replace": "\u062c\u0633\u062a\u062c\u0648 \u0648 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646\u06cc", 'nordic mark sign': '\u0646\u0645\u0627\u062F \u0645\u0627\u0631\u06A9 \u0646\u0631\u0648\u0698',
"Whole words": "\u062a\u0645\u0627\u0645 \u0648\u0627\u0698\u06af\u0627\u0646", 'manat sign': '\u0646\u0645\u0627\u062F \u0645\u0646\u0627\u062A',
"Spellcheck": "\u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u0621", 'ruble sign': '\u0646\u0645\u0627\u062F \u0631\u0648\u0628\u0644',
"Caption": "\u0639\u0646\u0648\u0627\u0646", 'yen character': '\u0646\u0648\u06CC\u0633\u0647 \u06CC\u0646',
"Insert template": "\u062f\u0631\u062c \u0627\u0644\u06af\u0648", 'yuan character': '\u0646\u0648\u06CC\u0633\u0647 \u06CC\u0648\u0627\u0646',
"_dir": "rtl" 'yuan character, in hong kong and taiwan':
}); '\u0646\u0648\u06CC\u0633\u0647 \u06CC\u0648\u0627\u0646\u060C \u062F\u0631 \u0647\u0646\u06AF\u200C\u06A9\u0646\u06AF \u0648 \u062A\u0627\u06CC\u0648\u0627\u0646',
'yen/yuan character variant one':
'\u0646\u0648\u06CC\u0633\u0647 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 \u06CC\u0646/\u06CC\u0648\u0627\u0646',
'Loading emoticons...':
'\u062F\u0631 \u062D\u0627\u0644 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0634\u06A9\u0644\u06A9\u200C\u0647\u0627...',
'Could not load emoticons':
'\u0634\u06A9\u0644\u06A9\u200C\u0647\u0627 \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u0646\u0634\u062F\u0646\u062F',
People: '\u0627\u0641\u0631\u0627\u062F',
'Animals and Nature':
'\u062D\u06CC\u0648\u0627\u0646\u0627\u062A \u0648 \u0637\u0628\u06CC\u0639\u062A',
'Food and Drink': '\u063A\u0630\u0627 \u0648 \u0646\u0648\u0634\u06CC\u062F\u0646\u06CC',
Activity: '\u0641\u0639\u0627\u0644\u06CC\u062A',
'Travel and Places': '\u0633\u0641\u0631 \u0648 \u0627\u0645\u0627\u06A9\u0646',
Objects: '\u0627\u0634\u06CC\u0627',
Flags: '\u067E\u0631\u0686\u0645\u200C\u0647\u0627',
Characters: '\u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627',
'Characters (no spaces)':
'\u0646\u0648\u06CC\u0633\u0647 \u0647\u0627 (\u0628\u062F\u0648\u0646 \u0641\u0627\u0635\u0644\u0647)',
'Error: Form submit field collision.':
'\u062E\u0637\u0627: \u062A\u062F\u0627\u062E\u0644 \u062F\u0631 \u062B\u0628\u062A \u0641\u0631\u0645.',
'Error: No form element found.':
'\u062E\u0637\u0627: \u0647\u06CC\u0686 \u0627\u0644\u0645\u0627\u0646 \u0641\u0631\u0645\u06CC \u06CC\u0627\u0641\u062A \u0646\u0634\u062F.',
Update: '\u0628\u0647\u200C\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06CC',
'Color swatch': '\u0646\u0645\u0648\u0646\u0647 \u0631\u0646\u06AF',
Turquoise: '\u0641\u06CC\u0631\u0648\u0632\u0647\u200C\u0627\u06CC',
Green: '\u0633\u0628\u0632',
Blue: '\u0622\u0628\u06CC',
Purple: '\u0628\u0646\u0641\u0634',
'Navy Blue': '\u0633\u0631\u0645\u0647\u200C\u0627\u06CC',
'Dark Turquoise':
'\u0641\u06CC\u0631\u0648\u0632\u0647\u200C\u0627\u06CC \u062A\u06CC\u0631\u0647',
'Dark Green': '\u0633\u0628\u0632 \u062A\u06CC\u0631\u0647',
'Medium Blue': '\u0622\u0628\u06CC \u0633\u06CC\u0631',
'Medium Purple': '\u0622\u0628\u06CC \u0628\u0646\u0641\u0634',
'Midnight Blue': '\u0622\u0628\u06CC \u0646\u0641\u062A\u06CC',
Yellow: '\u0632\u0631\u062F',
Orange: '\u0646\u0627\u0631\u0646\u062C\u06CC',
Red: '\u0642\u0631\u0645\u0632',
'Light Gray': '\u062E\u0627\u06A9\u0633\u062A\u0631\u06CC \u0631\u0648\u0634\u0646',
Gray: '\u062E\u0627\u06A9\u0633\u062A\u0631\u06CC',
'Dark Yellow': '\u0632\u0631\u062F \u062A\u06CC\u0631\u0647',
'Dark Orange': '\u0646\u0627\u0631\u0646\u062C\u06CC \u062A\u06CC\u0631\u0647',
'Dark Red': '\u0642\u0631\u0645\u0632 \u062A\u06CC\u0631\u0647',
'Medium Gray':
'\u062E\u0627\u06A9\u0633\u062A\u0631\u06CC \u0646\u06CC\u0645\u0647\u200C\u0631\u0648\u0634\u0646',
'Dark Gray': '\u062E\u0627\u06A9\u0633\u062A\u0631\u06CC \u062A\u06CC\u0631\u0647',
Black: '\u0633\u06CC\u0627\u0647',
White: '\u0633\u0641\u06CC\u062F',
'Switch to or from fullscreen mode':
'\u062A\u063A\u06CC\u06CC\u0631 \u0627\u0632 \u062D\u0627\u0644\u062A \u062A\u0645\u0627\u0645\u200C\u0635\u0641\u062D\u0647 \u06CC\u0627 \u0628\u0647 \u062D\u0627\u0644\u062A \u062A\u0645\u0627\u0645\u200C\u0635\u0641\u062D\u0647',
'Open help dialog':
'\u0628\u0627\u0632 \u06A9\u0631\u062F\u0646 \u06A9\u0627\u062F\u0631 \u0631\u0627\u0647\u0646\u0645\u0627',
history: '\u062A\u0627\u0631\u06CC\u062E\u0686\u0647',
styles: '\u0633\u0628\u06A9\u200C\u0647\u0627',
formatting: '\u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC',
alignment: '\u062A\u0631\u0627\u0632\u0628\u0646\u062F\u06CC',
indentation: '\u062A\u0648\u0631\u0641\u062A\u06AF\u06CC',
'permanent pen': '\u0642\u0644\u0645 \u062F\u0627\u0626\u0645\u06CC',
comments: '\u0646\u0638\u0631\u0627\u062A',
Anchor: '\u0642\u0644\u0627\u0628',
'Special character': '\u0646\u0648\u06CC\u0633\u0647 \u0647\u0627\u06CC \u062E\u0627\u0635',
'Code sample': '\u0646\u0645\u0648\u0646\u0647 \u06A9\u064F\u062F',
Color: '\u0631\u0646\u06AF',
Emoticons: '\u0635\u0648\u0631\u062A\u06A9 \u0647\u0627',
'Document properties': '\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0633\u0646\u062F',
Image: '\u062A\u0635\u0648\u06CC\u0631',
'Insert link': '\u062F\u0631\u062C \u067E\u06CC\u0648\u0646\u062F',
Target: '\u0645\u0642\u0635\u062F',
Link: '\u067E\u06CC\u0648\u0646\u062F',
Poster: '\u067E\u0648\u0633\u062A\u0631',
Media: '\u0631\u0633\u0627\u0646\u0647',
Print: '\u0686\u0627\u067E',
Prev: '\u0642\u0628\u0644\u06CC',
'Find and replace':
'\u062C\u0633\u062A\u062C\u0648 \u0648 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646\u06CC',
'Whole words': '\u062A\u0645\u0627\u0645 \u0648\u0627\u0698\u06AF\u0627\u0646',
Spellcheck: '\u0628\u0631\u0631\u0633\u06CC \u0627\u0645\u0644\u0627\u0621',
Caption: '\u0639\u0646\u0648\u0627\u0646',
'Insert template': '\u062F\u0631\u062C \u0627\u0644\u06AF\u0648',
_dir: 'rtl',
})
+2 -4
View File
@@ -1,6 +1,4 @@
import axios from 'axios' export const initTiny = (_batchId) => ({
export const initTiny = (batch_id) => ({
skin: false, skin: false,
height: 500, height: 500,
menubar: 'tools', menubar: 'tools',
@@ -26,5 +24,5 @@ export const initTiny = (batch_id) => ({
automatic_uploads: false, automatic_uploads: false,
file_picker_types: 'file image media', file_picker_types: 'file image media',
content_style: 'body { font-family: "IranYekan-Regular", "Montserrat-Regular" !important; }', content_style: 'body { font-family: "IranYekan-Regular", "Montserrat-Regular" !important; }',
images_upload_handler: (blobInfo, success, failure) => {}, images_upload_handler: (_blobInfo, _success, _failure) => {},
}) })
+2 -2
View File
@@ -61,7 +61,7 @@ const addCamelizeInterceptor = (instance) => {
) )
} }
const addUnauthorizeInterceptor = (instance) => { const _addUnauthorizeInterceptor = (instance) => {
instance.interceptors.response.use( instance.interceptors.response.use(
(res) => res, (res) => res,
async (e) => { async (e) => {
@@ -89,7 +89,7 @@ const createInstance = (baseUrl, { headers = {}, ...configs } = {}) => {
addResponseUnwrapInterceptor(instance) addResponseUnwrapInterceptor(instance)
addCamelizeInterceptor(instance) addCamelizeInterceptor(instance)
addSnakizeInterceptor(instance) addSnakizeInterceptor(instance)
// addUnauthorizeInterceptor(instance) // _addUnauthorizeInterceptor(instance)
return instance return instance
} }
+5 -7
View File
@@ -134,14 +134,12 @@ register('PATCH', endpoints.updateUserRole, ({ params, data }) => {
const nextRoleNames = Array.isArray(data.roles) const nextRoleNames = Array.isArray(data.roles)
? data.roles.filter(Boolean) ? data.roles.filter(Boolean)
: data.role : data.role
? [data.role] ? [data.role]
: data.roleId : data.roleId
? [roles.find((r) => r.id === Number(data.roleId))?.name].filter(Boolean) ? [roles.find((r) => r.id === Number(data.roleId))?.name].filter(Boolean)
: [] : []
const primary = nextRoleNames[0] ? byName(nextRoleNames[0]) : null const primary = nextRoleNames[0] ? byName(nextRoleNames[0]) : null
const patch = nextRoleNames.length const patch = nextRoleNames.length > 0 ? { roles: nextRoleNames, roleId: primary?.id } : {}
? { roles: nextRoleNames, roleId: primary?.id }
: {}
const updated = updateById(adminUsers, params.id, patch) const updated = updateById(adminUsers, params.id, patch)
return { return {
success: true, success: true,
+1 -2
View File
@@ -80,5 +80,4 @@ export const useGetRegisterDataQuery = (options = {}) =>
...options, ...options,
}) })
export const useSaveRegisterDataMutation = () => export const useSaveRegisterDataMutation = () => useMutation({ mutationFn: apiSaveRegisterData })
useMutation({ mutationFn: apiSaveRegisterData })
+1 -1
View File
@@ -10,7 +10,7 @@ export const useAuthStore = defineStore('auth', () => {
const role = computed(() => { const role = computed(() => {
const u = user.value const u = user.value
if (!u) return null if (!u) return null
if (Array.isArray(u.roles) && u.roles.length) return u.roles[0] if (Array.isArray(u.roles) && u.roles.length > 0) return u.roles[0]
return u.role || u.roleName || null return u.role || u.roleName || null
}) })
+11 -7
View File
@@ -1,7 +1,11 @@
.mce-container,
.mce-container,.mce-container *,.mce-widget,.mce-widget *,.mce-reset { .mce-container *,
font-family:"iranyekan", "Montserrat", "tinymce"!important; .mce-widget,
} .mce-widget *,
.mce-monospace { .mce-reset {
font-family:"iranyekan", "Montserrat", "tinymce"!important; font-family: iranyekan, Montserrat, tinymce !important;
} }
.mce-monospace {
font-family: iranyekan, Montserrat, tinymce !important;
}