From a4f10df61bba349b6e5f51fc882f67880da909c4 Mon Sep 17 00:00:00 2001 From: Irshad Ahmad Date: Tue, 12 Dec 2023 20:25:55 +0530 Subject: [PATCH 1/6] Port things over --- .gitignore | 1 + packages/js/components/code/index.tsx | 6 + packages/js/components/description/index.tsx | 8 + packages/js/components/package.json | 7 +- packages/js/components/plugin/header.tsx | 41 ++ packages/js/components/plugin/index.tsx | 1 + packages/js/components/plugin/styles.scss | 26 + packages/js/components/select/index.tsx | 1 + packages/js/components/select/types.ts | 8 + packages/js/helpers/index.ts | 1 + packages/js/helpers/package.json | 27 + packages/js/helpers/tsconfig.json | 11 + packages/js/helpers/types.ts | 53 ++ packages/js/helpers/wp-admin.ts | 19 + phpcs.xml | 2 +- plugins/wp-test-plugin/composer.json | 2 +- plugins/wp-test-plugin/composer.lock | 2 +- .../.wordpress-org/banner-772x250.png | Bin 0 -> 27353 bytes .../.wordpress-org/icon-128x128.png | Bin 0 -> 6832 bytes .../.wordpress-org/icon-256x256.png | Bin 0 -> 14097 bytes .../.wordpress-org/screenshot-1.jpg | Bin 0 -> 244568 bytes plugins/wptelegram-comments/README.md | 55 ++ plugins/wptelegram-comments/composer.json | 30 ++ plugins/wptelegram-comments/composer.lock | 479 ++++++++++++++++++ plugins/wptelegram-comments/dev.php | 72 +++ .../wptelegram-comments/js/settings/App.tsx | 22 + .../js/settings/CodeField.tsx | 44 ++ .../js/settings/Configuration.tsx | 18 + .../js/settings/Instructions.tsx | 103 ++++ .../js/settings/constants.ts | 1 + .../js/settings/hooks/usePluginData.ts | 3 + .../wptelegram-comments/js/settings/index.tsx | 20 + .../js/settings/styles.scss | 22 + .../wptelegram-comments/js/settings/types.ts | 35 ++ plugins/wptelegram-comments/package.json | 44 ++ plugins/wptelegram-comments/src/LICENSE.txt | 339 +++++++++++++ plugins/wptelegram-comments/src/README.txt | 101 ++++ .../wptelegram-comments/src/admin/Admin.php | 67 +++ .../wptelegram-comments/src/admin/index.php | 1 + .../src/assets/static/css/admin-menu.css | 16 + .../src/assets/static/css/admin-menu.min.css | 3 + .../src/assets/static/icons/icon-128x128.png | Bin 0 -> 6832 bytes .../src/assets/static/icons/icon-36x34.png | Bin 0 -> 2076 bytes .../src/assets/static/icons/tg-icon.svg | 109 ++++ plugins/wptelegram-comments/src/autoload.php | 25 + plugins/wptelegram-comments/src/changelog.md | 91 ++++ .../src/includes/Activator.php | 33 ++ .../src/includes/AssetManager.php | 213 ++++++++ .../src/includes/Assets.php | 164 ++++++ .../src/includes/BaseClass.php | 54 ++ .../src/includes/Deactivator.php | 33 ++ .../wptelegram-comments/src/includes/I18n.php | 43 ++ .../wptelegram-comments/src/includes/Main.php | 409 +++++++++++++++ .../src/includes/Options.php | 460 +++++++++++++++++ .../src/includes/Requirements.php | 127 +++++ .../src/includes/Utils.php | 134 +++++ .../src/includes/index.php | 1 + .../src/includes/restApi/RESTController.php | 39 ++ .../includes/restApi/SettingsController.php | 226 +++++++++ plugins/wptelegram-comments/src/index.php | 1 + .../src/languages/js-translations.pot | 223 ++++++++ .../languages/wptelegram-comments-de_DE.mo | Bin 0 -> 3146 bytes .../languages/wptelegram-comments-de_DE.po | 285 +++++++++++ .../languages/wptelegram-comments-es_ES.mo | Bin 0 -> 3142 bytes .../languages/wptelegram-comments-es_ES.po | 287 +++++++++++ .../languages/wptelegram-comments-fa_IR.mo | Bin 0 -> 3628 bytes .../languages/wptelegram-comments-fa_IR.po | 277 ++++++++++ .../src/languages/wptelegram-comments-hr.mo | Bin 0 -> 2988 bytes .../src/languages/wptelegram-comments-hr.po | 283 +++++++++++ .../languages/wptelegram-comments-id_ID.mo | Bin 0 -> 3045 bytes .../languages/wptelegram-comments-id_ID.po | 283 +++++++++++ .../languages/wptelegram-comments-it_IT.mo | Bin 0 -> 3086 bytes .../languages/wptelegram-comments-it_IT.po | 282 +++++++++++ .../wptelegram-comments-js-translations.php | 166 ++++++ .../languages/wptelegram-comments-ru_RU.mo | Bin 0 -> 3708 bytes .../languages/wptelegram-comments-ru_RU.po | 283 +++++++++++ .../languages/wptelegram-comments-tr_TR.mo | Bin 0 -> 3159 bytes .../languages/wptelegram-comments-tr_TR.po | 284 +++++++++++ .../src/languages/wptelegram-comments-uk.mo | Bin 0 -> 3797 bytes .../src/languages/wptelegram-comments-uk.po | 284 +++++++++++ .../src/languages/wptelegram-comments.pot | 278 ++++++++++ .../wptelegram-comments/src/shared/Shared.php | 134 +++++ .../wptelegram-comments/src/shared/index.php | 1 + .../src/shared/partials/comments.php | 28 + plugins/wptelegram-comments/src/uninstall.php | 15 + .../src/wptelegram-comments.php | 91 ++++ plugins/wptelegram-comments/tsconfig.json | 18 + plugins/wptelegram-comments/vite.config.ts | 10 + pnpm-lock.yaml | 81 ++- 89 files changed, 7437 insertions(+), 9 deletions(-) create mode 100644 packages/js/components/code/index.tsx create mode 100644 packages/js/components/description/index.tsx create mode 100644 packages/js/components/plugin/header.tsx create mode 100644 packages/js/components/plugin/index.tsx create mode 100644 packages/js/components/plugin/styles.scss create mode 100644 packages/js/components/select/index.tsx create mode 100644 packages/js/components/select/types.ts create mode 100644 packages/js/helpers/index.ts create mode 100644 packages/js/helpers/package.json create mode 100644 packages/js/helpers/tsconfig.json create mode 100644 packages/js/helpers/types.ts create mode 100644 packages/js/helpers/wp-admin.ts create mode 100644 plugins/wptelegram-comments/.wordpress-org/banner-772x250.png create mode 100644 plugins/wptelegram-comments/.wordpress-org/icon-128x128.png create mode 100644 plugins/wptelegram-comments/.wordpress-org/icon-256x256.png create mode 100644 plugins/wptelegram-comments/.wordpress-org/screenshot-1.jpg create mode 100644 plugins/wptelegram-comments/README.md create mode 100644 plugins/wptelegram-comments/composer.json create mode 100644 plugins/wptelegram-comments/composer.lock create mode 100644 plugins/wptelegram-comments/dev.php create mode 100644 plugins/wptelegram-comments/js/settings/App.tsx create mode 100644 plugins/wptelegram-comments/js/settings/CodeField.tsx create mode 100644 plugins/wptelegram-comments/js/settings/Configuration.tsx create mode 100644 plugins/wptelegram-comments/js/settings/Instructions.tsx create mode 100644 plugins/wptelegram-comments/js/settings/constants.ts create mode 100644 plugins/wptelegram-comments/js/settings/hooks/usePluginData.ts create mode 100644 plugins/wptelegram-comments/js/settings/index.tsx create mode 100644 plugins/wptelegram-comments/js/settings/styles.scss create mode 100644 plugins/wptelegram-comments/js/settings/types.ts create mode 100644 plugins/wptelegram-comments/package.json create mode 100644 plugins/wptelegram-comments/src/LICENSE.txt create mode 100644 plugins/wptelegram-comments/src/README.txt create mode 100644 plugins/wptelegram-comments/src/admin/Admin.php create mode 100644 plugins/wptelegram-comments/src/admin/index.php create mode 100644 plugins/wptelegram-comments/src/assets/static/css/admin-menu.css create mode 100644 plugins/wptelegram-comments/src/assets/static/css/admin-menu.min.css create mode 100644 plugins/wptelegram-comments/src/assets/static/icons/icon-128x128.png create mode 100644 plugins/wptelegram-comments/src/assets/static/icons/icon-36x34.png create mode 100644 plugins/wptelegram-comments/src/assets/static/icons/tg-icon.svg create mode 100644 plugins/wptelegram-comments/src/autoload.php create mode 100644 plugins/wptelegram-comments/src/changelog.md create mode 100644 plugins/wptelegram-comments/src/includes/Activator.php create mode 100644 plugins/wptelegram-comments/src/includes/AssetManager.php create mode 100644 plugins/wptelegram-comments/src/includes/Assets.php create mode 100644 plugins/wptelegram-comments/src/includes/BaseClass.php create mode 100644 plugins/wptelegram-comments/src/includes/Deactivator.php create mode 100644 plugins/wptelegram-comments/src/includes/I18n.php create mode 100644 plugins/wptelegram-comments/src/includes/Main.php create mode 100644 plugins/wptelegram-comments/src/includes/Options.php create mode 100644 plugins/wptelegram-comments/src/includes/Requirements.php create mode 100644 plugins/wptelegram-comments/src/includes/Utils.php create mode 100644 plugins/wptelegram-comments/src/includes/index.php create mode 100644 plugins/wptelegram-comments/src/includes/restApi/RESTController.php create mode 100644 plugins/wptelegram-comments/src/includes/restApi/SettingsController.php create mode 100644 plugins/wptelegram-comments/src/index.php create mode 100644 plugins/wptelegram-comments/src/languages/js-translations.pot create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-de_DE.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-de_DE.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-id_ID.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-id_ID.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-it_IT.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-it_IT.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-js-translations.php create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-ru_RU.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-ru_RU.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-tr_TR.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-tr_TR.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.mo create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.po create mode 100644 plugins/wptelegram-comments/src/languages/wptelegram-comments.pot create mode 100644 plugins/wptelegram-comments/src/shared/Shared.php create mode 100644 plugins/wptelegram-comments/src/shared/index.php create mode 100644 plugins/wptelegram-comments/src/shared/partials/comments.php create mode 100644 plugins/wptelegram-comments/src/uninstall.php create mode 100644 plugins/wptelegram-comments/src/wptelegram-comments.php create mode 100644 plugins/wptelegram-comments/tsconfig.json create mode 100644 plugins/wptelegram-comments/vite.config.ts diff --git a/.gitignore b/.gitignore index 69d7ceb8..fb1e9718 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ vendor/ /plugins/*/ # Except for the ones in this repo !/plugins/wp-test-plugin/ +!/plugins/wptelegram-comments/ # Build tools/IDEs .rollup.cache/ diff --git a/packages/js/components/code/index.tsx b/packages/js/components/code/index.tsx new file mode 100644 index 00000000..c821fe8f --- /dev/null +++ b/packages/js/components/code/index.tsx @@ -0,0 +1,6 @@ +export const Code: React.FC> = ({ + children, + ...props +}) => { + return {children}; +}; diff --git a/packages/js/components/description/index.tsx b/packages/js/components/description/index.tsx new file mode 100644 index 00000000..bb4ee44b --- /dev/null +++ b/packages/js/components/description/index.tsx @@ -0,0 +1,8 @@ +export const Description: React.FC> = + ({ children, ...props }) => { + return ( +

+ {children} +

+ ); + }; diff --git a/packages/js/components/package.json b/packages/js/components/package.json index 234d901f..809b3067 100644 --- a/packages/js/components/package.json +++ b/packages/js/components/package.json @@ -5,17 +5,18 @@ "license": "GPL-3.0", "type": "module", "module": "index.ts", - "source": "index.ts", + "source": "index.ts", "exports": { ".": { - "import": "./index.ts" - }, + "import": "./index.ts" + }, "./*": { "import": "./*/index.tsx" } }, "dependencies": { "@wordpress/components": "^25.12.0", + "@wpsocio/helpers": "workspace:*", "react": "^18.2.0", "react-dom": "^18.2.0" }, diff --git a/packages/js/components/plugin/header.tsx b/packages/js/components/plugin/header.tsx new file mode 100644 index 00000000..6560c096 --- /dev/null +++ b/packages/js/components/plugin/header.tsx @@ -0,0 +1,41 @@ +import { Card, CardBody, CardHeader, Flex } from '@wordpress/components'; +import { BaseAssetsData, PluginInfo } from '@wpsocio/helpers/types'; +import { Description } from '../description'; +import './styles.scss'; + +export interface PluginHeaderProps extends PluginInfo { + assets?: BaseAssetsData; + socialIcons?: React.ReactNode; +} + +export const PluginHeader: React.FC = ({ + assets, + title, + version, + description, + socialIcons, +}) => { + return ( + + + {assets?.logoUrl ? ( + {title} + ) : null} +
+

{title}

+ +  v{version} + +
+
+ + {description} + {socialIcons} + +
+ ); +}; diff --git a/packages/js/components/plugin/index.tsx b/packages/js/components/plugin/index.tsx new file mode 100644 index 00000000..677ca79d --- /dev/null +++ b/packages/js/components/plugin/index.tsx @@ -0,0 +1 @@ +export * from './header'; diff --git a/packages/js/components/plugin/styles.scss b/packages/js/components/plugin/styles.scss new file mode 100644 index 00000000..779858ae --- /dev/null +++ b/packages/js/components/plugin/styles.scss @@ -0,0 +1,26 @@ +.wpsocio-plugin-header { + &__logo { + height: 2rem; + width: 2rem; + } + + .components-card-header { + justify-content: start; + padding-block: 0.5rem; + padding-inline: 1rem; + } + + &__title { + font-size: 1.25rem; + font-weight: 600; + display: inline-block; + margin: 0; + + } + + &__version { + font-size: 80%; + font-style: italic; + color: #718096; + } +} \ No newline at end of file diff --git a/packages/js/components/select/index.tsx b/packages/js/components/select/index.tsx new file mode 100644 index 00000000..fcb073fe --- /dev/null +++ b/packages/js/components/select/index.tsx @@ -0,0 +1 @@ +export * from './types'; diff --git a/packages/js/components/select/types.ts b/packages/js/components/select/types.ts new file mode 100644 index 00000000..b974bf67 --- /dev/null +++ b/packages/js/components/select/types.ts @@ -0,0 +1,8 @@ +export interface OptionProps { + value?: string | number; + label?: React.ReactNode; + options?: Array>; // for optgroup + [key: string]: unknown; +} + +export type OptionsType = Array; diff --git a/packages/js/helpers/index.ts b/packages/js/helpers/index.ts new file mode 100644 index 00000000..77ab4787 --- /dev/null +++ b/packages/js/helpers/index.ts @@ -0,0 +1 @@ +export * from './wp-admin'; diff --git a/packages/js/helpers/package.json b/packages/js/helpers/package.json new file mode 100644 index 00000000..4224a1af --- /dev/null +++ b/packages/js/helpers/package.json @@ -0,0 +1,27 @@ +{ + "name": "@wpsocio/helpers", + "version": "1.0.0", + "private": true, + "license": "GPL-3.0", + "type": "module", + "module": "index.ts", + "source": "index.ts", + "exports": { + ".": { + "import": "./index.ts" + }, + "./*": { + "import": "./*.ts" + } + }, + "dependencies": { + "@wordpress/components": "^25.12.0", + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/jquery": "^3.5.29", + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15" + } +} diff --git a/packages/js/helpers/tsconfig.json b/packages/js/helpers/tsconfig.json new file mode 100644 index 00000000..28d9930f --- /dev/null +++ b/packages/js/helpers/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "jsx": "react-jsx", + "module": "ESNext", + "moduleResolution": "Bundler", + "noEmit": true, + }, + "include": ["**/*.tsx", "**/*.ts"] +} diff --git a/packages/js/helpers/types.ts b/packages/js/helpers/types.ts new file mode 100644 index 00000000..f57c5f8e --- /dev/null +++ b/packages/js/helpers/types.ts @@ -0,0 +1,53 @@ +export type AnyObject = Record; + +export interface ApiData { + admin_url?: string; + ajax_url?: string; + home_url?: string; + rest_namespace?: string; + use?: 'SERVER' | 'BROWSER'; + wp_rest_url?: string; +} + +export interface BaseAssetsData { + logoUrl?: string; + jsDistUrl?: string; +} + +export interface I18nInfo { + domain: string; + lang: string; + plural_forms?: string; +} + +export type I18nData = { + '': I18nInfo; + [key: string]: unknown; +}; + +export interface PluginInfo { + name: string; + title: string; + description?: string; + version: string; +} + +export interface BaseDOMData { + api?: ApiData; + assets?: Assets; + i18n?: I18nData; + pluginInfo: PluginInfo; + cache?: AnyObject; +} + +export interface BasePluginData { + savedSettings: Settings; + uiData?: UiData; +} + +declare global { + interface Window { + // its value must be set by every domain on init + 'X-WP-Nonce': string; + } +} diff --git a/packages/js/helpers/wp-admin.ts b/packages/js/helpers/wp-admin.ts new file mode 100644 index 00000000..3045d1fa --- /dev/null +++ b/packages/js/helpers/wp-admin.ts @@ -0,0 +1,19 @@ +import $ from 'jquery'; + +/** + * Cleans up the admin screen by removing all the irrelevant notifications. + */ +export function cleanupAdminScreen( + removeSiblingsOf = '', + disableFormCSS = false, +) { + const id = removeSiblingsOf?.replace(/^#?/, '#'); + $(() => { + if (id && $(id).length) { + $(id).siblings().remove(); + } + if (disableFormCSS) { + $('#forms-css').prop('disabled', true); + } + }); +} diff --git a/phpcs.xml b/phpcs.xml index 470a683c..bafc148e 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -1,5 +1,5 @@ - + diff --git a/plugins/wp-test-plugin/composer.json b/plugins/wp-test-plugin/composer.json index e1a21259..f36c83e7 100644 --- a/plugins/wp-test-plugin/composer.json +++ b/plugins/wp-test-plugin/composer.json @@ -26,7 +26,7 @@ } ], "require": { - "kucrut/vite-for-wp": "m", + "kucrut/vite-for-wp": "^0.8.0", "wpsocio/wp-options": "dev-main" }, "extra": { diff --git a/plugins/wp-test-plugin/composer.lock b/plugins/wp-test-plugin/composer.lock index 7056f324..0a04ece3 100644 --- a/plugins/wp-test-plugin/composer.lock +++ b/plugins/wp-test-plugin/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "574cbbc7a6798c7a7cd89ac22647072c", + "content-hash": "2abb829b4256d32b918aba2c4d94f3b6", "packages": [ { "name": "kucrut/vite-for-wp", diff --git a/plugins/wptelegram-comments/.wordpress-org/banner-772x250.png b/plugins/wptelegram-comments/.wordpress-org/banner-772x250.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b33164ad309862b74f97f3ca4ee25c261172ac GIT binary patch literal 27353 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 literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/.wordpress-org/icon-256x256.png b/plugins/wptelegram-comments/.wordpress-org/icon-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..ad006a9595f0a7f57ebcb580090517da141b14e2 GIT binary patch literal 14097 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 LHRP&f%!B?9(d9JY literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/.wordpress-org/screenshot-1.jpg b/plugins/wptelegram-comments/.wordpress-org/screenshot-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..29365448000f9b0d163540fe29edbbe13a8f4c11 GIT binary patch literal 244568 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 G@_zw66l-As literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/README.md b/plugins/wptelegram-comments/README.md new file mode 100644 index 00000000..4ab71ea4 --- /dev/null +++ b/plugins/wptelegram-comments/README.md @@ -0,0 +1,55 @@ +# WP Telegram Comments + +**Contributors:** [wpsocio](https://github.com/wpsocio), [irshadahmad21](https://github.com/irshadahmad21) +**Tags:** telegram, comments, discuss, social, widget +**Requires at least:** 6.1 +**Requires PHP:** 7.4 +**Tested up to:** 6.4.2 +**Stable tag:** 1.1.9 +**License:** GPLv2 or later +**License URI:** [http://www.gnu.org/licenses/gpl-2.0.html](http://www.gnu.org/licenses/gpl-2.0.html) +**Donate link:** [wpsocio.com/donate](https://wpsocio.com/donate) + +[![Wordpress plugin](https://img.shields.io/wordpress/plugin/v/wptelegram-comments.svg)](https://wordpress.org/plugins/wptelegram-comments/) +[![Wordpress](https://img.shields.io/wordpress/plugin/dt/wptelegram-comments.svg)](https://wordpress.org/plugins/wptelegram-comments/) +[![Wordpress rating](https://img.shields.io/wordpress/plugin/r/wptelegram-comments.svg)](https://wordpress.org/plugins/wptelegram-comments/) + +Complete contributors list found here: [github.com/wpsocio/wptelegram-comments/graphs/contributors](https://github.com/wpsocio/wptelegram-comments/graphs/contributors) + +**[Download plugin on wordpress.org](https://wordpress.org/plugins/wptelegram-comments/)** + +## Description + +Add comments to posts/pages on your WordPress website by using Telegram Comments Widget. +Comments on WordPress posts not only fill your database tables, rather they also make it difficult to moderate efficiently. Telegram comments removes this drawback because the comments are stored on Telegram servers and every comment is from an authenticated Telegram user. + +## Why Telegram Comments? + +- ✅ It saves you database memory +- ✅ Comments are from authenticated Telegram Users +- ❌ No place for spam bots + +## Features: + +- ⚡️ Ultra lightweight comments widget +- 🛒 Supports WooCommerce products and other Custom Post Types +- 🛂 You can exclude specific posts/pages for comments +- 🔔 Users can subscribe to comments and get the notifications on Telegram +- 👏 Comments can have Like 👍 and Dislike 👎 Feedback +- 📸 Comments support multimedia attachments +- ⤴️ Users can reply to comments intuitively +- ✏️ Comments can be edited or deleted anytime + +### Contribution + +Development occurs on Github, and all contributions welcome. + +## Translation + +If you are looking to provide language translation files, Please do so via [WordPress Plugin Translations](https://translate.wordpress.org/projects/wp-plugins/wptelegram-comments). + +## Installation + +1. Upload the `wptelegram-comments` folder to the `/wp-content/plugins/` directory +2. Activate the plugin through the Plugins menu in WordPress. After activation, you should see the menu of this plugin the the admin +3. Configure the plugin. diff --git a/plugins/wptelegram-comments/composer.json b/plugins/wptelegram-comments/composer.json new file mode 100644 index 00000000..4403e3b5 --- /dev/null +++ b/plugins/wptelegram-comments/composer.json @@ -0,0 +1,30 @@ +{ + "name": "wpsocio/wptelegram-comments", + "description": "Use Telegram Comments widget for your WordPress posts or pages.", + "scripts": { + "lint": "\"vendor/bin/phpcs\" --standard=phpcs.xml --extensions=php src/", + "lint:skip-warnings": "\"vendor/bin/phpcs\" --standard=phpcs.xml --extensions=php -n src/", + "lint:fix": "\"vendor/bin/phpcbf\" --standard=phpcs.xml --extensions=php src/" + }, + "require": { + "kucrut/vite-for-wp": "^0.8.0", + "wpsocio/wp-options": "dev-main" + }, + "require-dev": { + "wp-coding-standards/wpcs": "^3.0" + }, + "repositories": [ + { + "type": "path", + "url": "../../packages/php/wp-options", + "options": { + "symlink": false + } + } + ], + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": false + } + } +} diff --git a/plugins/wptelegram-comments/composer.lock b/plugins/wptelegram-comments/composer.lock new file mode 100644 index 00000000..74ef0de2 --- /dev/null +++ b/plugins/wptelegram-comments/composer.lock @@ -0,0 +1,479 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "a4b3dcc7a447eb1d784c5dc574990951", + "packages": [ + { + "name": "kucrut/vite-for-wp", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/kucrut/vite-for-wp.git", + "reference": "bce4607bb57f4892da93492908caeb75ce2782a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/kucrut/vite-for-wp/zipball/bce4607bb57f4892da93492908caeb75ce2782a2", + "reference": "bce4607bb57f4892da93492908caeb75ce2782a2", + "shasum": "" + }, + "require-dev": { + "wp-coding-standards/wpcs": "^3.0" + }, + "type": "library", + "autoload": { + "files": [ + "vite-for-wp.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-only" + ], + "authors": [ + { + "name": "Dzikri Aziz" + } + ], + "description": "Vite integration for WordPress plugins and themes development.", + "support": { + "issues": "https://github.com/kucrut/vite-for-wp/issues", + "source": "https://github.com/kucrut/vite-for-wp/tree/v0.8.0" + }, + "time": "2023-11-15T04:30:52+00:00" + }, + { + "name": "wpsocio/wp-options", + "version": "dev-main", + "dist": { + "type": "path", + "url": "../../packages/php/wp-options", + "reference": "3d7c4e92c7ad205008569d8853bb27f36ea195e0" + }, + "type": "library", + "autoload": { + "files": [ + "WPOptions.php" + ] + }, + "license": [ + "GPL3" + ], + "authors": [ + { + "name": "WP Socio" + } + ], + "description": "Easy solution to handle WP plugin or theme options", + "transport-options": { + "symlink": false, + "relative": true + } + } + ], + "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "4be43904336affa5c2f70744a348312336afd0da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", + "reference": "4be43904336affa5c2f70744a348312336afd0da", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "ext-json": "*", + "ext-zip": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "source": "https://github.com/PHPCSStandards/composer-installer" + }, + "time": "2023-01-05T11:28:13+00:00" + }, + { + "name": "phpcsstandards/phpcsextra", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "phpcsstandards/phpcsutils": "^1.0.9", + "squizlabs/php_codesniffer": "^3.8.0" + }, + "require-dev": { + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "phpcsstandards/phpcsdevtools": "^1.2.1", + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" + } + ], + "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", + "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSExtra" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T16:49:07+00:00" + }, + { + "name": "phpcsstandards/phpcsutils", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/908247bc65010c7b7541a9551e002db12e9dae70", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.8.0 || 4.0.x-dev@dev" + }, + "require-dev": { + "ext-filter": "*", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" + } + }, + "autoload": { + "classmap": [ + "PHPCSUtils/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" + } + ], + "description": "A suite of utility functions for use with PHP_CodeSniffer", + "homepage": "https://phpcsutils.com/", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "phpcs3", + "standards", + "static analysis", + "tokens", + "utility" + ], + "support": { + "docs": "https://phpcsutils.com/", + "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", + "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSUtils" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T14:50:00+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.8.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5805f7a4e4958dbb5e944ef1e6edae0a303765e7", + "reference": "5805f7a4e4958dbb5e944ef1e6edae0a303765e7", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T12:32:31+00:00" + }, + { + "name": "wp-coding-standards/wpcs", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", + "reference": "b4caf9689f1a0e4a4c632679a44e638c1c67aff1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/b4caf9689f1a0e4a4c632679a44e638c1c67aff1", + "reference": "b4caf9689f1a0e4a4c632679a44e638c1c67aff1", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "ext-libxml": "*", + "ext-tokenizer": "*", + "ext-xmlreader": "*", + "php": ">=5.4", + "phpcsstandards/phpcsextra": "^1.1.0", + "phpcsstandards/phpcsutils": "^1.0.8", + "squizlabs/php_codesniffer": "^3.7.2" + }, + "require-dev": { + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.0", + "phpcsstandards/phpcsdevtools": "^1.2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "suggest": { + "ext-iconv": "For improved results", + "ext-mbstring": "For improved results" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Contributors", + "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", + "keywords": [ + "phpcs", + "standards", + "static analysis", + "wordpress" + ], + "support": { + "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", + "source": "https://github.com/WordPress/WordPress-Coding-Standards", + "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" + }, + "funding": [ + { + "url": "https://opencollective.com/thewpcc/contribute/wp-php-63406", + "type": "custom" + } + ], + "time": "2023-09-14T07:06:09+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "wpsocio/wp-options": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [], + "plugin-api-version": "2.3.0" +} diff --git a/plugins/wptelegram-comments/dev.php b/plugins/wptelegram-comments/dev.php new file mode 100644 index 00000000..f6fac505 --- /dev/null +++ b/plugins/wptelegram-comments/dev.php @@ -0,0 +1,72 @@ +next_tag( 'script' ); + + // Remove the type attribute from the inline script tag. + if ( $script_fount && $processor->get_attribute( 'src' ) !== $src ) { + $processor->remove_attribute( 'type' ); + } + } while ( $processor->get_attribute( 'src' ) !== $src ); + + if ( $script_fount ) { + $processor->set_attribute( 'type', 'module' ); + } + + return $processor->get_updated_html(); + }, + 20, + 3 +); diff --git a/plugins/wptelegram-comments/js/settings/App.tsx b/plugins/wptelegram-comments/js/settings/App.tsx new file mode 100644 index 00000000..adb7ef66 --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/App.tsx @@ -0,0 +1,22 @@ +import { __experimentalDivider as Divider } from '@wordpress/components'; +import { PluginHeader } from '@wpsocio/components/plugin'; +import { Configuration } from './Configuration'; +import { Instructions } from './Instructions'; +import { ROOT_ID } from './constants'; +import { usePluginData } from './hooks/usePluginData'; + +export const App: React.FC = () => { + const { pluginInfo, assets } = usePluginData(); + + return ( +

+
+ + + + + +
+ + ); +}; diff --git a/plugins/wptelegram-comments/js/settings/CodeField.tsx b/plugins/wptelegram-comments/js/settings/CodeField.tsx new file mode 100644 index 00000000..fbb3fc0e --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/CodeField.tsx @@ -0,0 +1,44 @@ +import { TextareaControl } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import $ from 'jquery'; +import { usePluginData } from './hooks/usePluginData'; + +export const CodeField: React.FC = () => { + const { savedSettings } = usePluginData(); + + const onChange = (code: string) => { + let attributesJSON = ''; + if (code) { + try { + const el = $(code.trim()); + if (el.length && 'SCRIPT' === el[0].nodeName) { + const attributes: Record = {}; + $.each(el[0].attributes, (i, attr) => { + attributes[attr.name] = attr.value; + }); + + attributesJSON = JSON.stringify(attributes); + } + } catch (error) { + console.error('CODE ERROR', error); + } + } + console.log('attributesJSON', attributesJSON); + + // update attributes hidden input + $('input[name="attributes"]').val(attributesJSON); + }; + return ( + <> + + + + ); +}; diff --git a/plugins/wptelegram-comments/js/settings/Configuration.tsx b/plugins/wptelegram-comments/js/settings/Configuration.tsx new file mode 100644 index 00000000..de2497bd --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/Configuration.tsx @@ -0,0 +1,18 @@ +import { Card, CardBody, CardHeader } from '@wordpress/components'; +import { __ } from '@wordpress/i18n'; +import { CodeField } from './CodeField'; +import { usePluginData } from './hooks/usePluginData'; + +export const Configuration: React.FC = () => { + const { savedSettings } = usePluginData(); + return ( + + +

{__('Configuration')}

+
+ + + +
+ ); +}; diff --git a/plugins/wptelegram-comments/js/settings/Instructions.tsx b/plugins/wptelegram-comments/js/settings/Instructions.tsx new file mode 100644 index 00000000..322ec104 --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/Instructions.tsx @@ -0,0 +1,103 @@ +import { + Card, + CardBody, + CardHeader, + ExternalLink, +} from '@wordpress/components'; +import { createInterpolateElement } from '@wordpress/element'; +import { __, sprintf } from '@wordpress/i18n'; +import { Code } from '@wpsocio/components/code'; + +const { location } = window; + +export const Instructions: React.FC = () => { + return ( + + +

{__('Instructions')}

+
+ +
    +
  1. + {createInterpolateElement( + sprintf( + /* translators: 1 URL */ + __('Goto %s.'), + '', + ), + { + Link: ( + + comments.app + + ), + }, + )} +
  2. +
  3. + {createInterpolateElement( + sprintf( + /* translators: 1 menu name, 2, 3 buttons */ + __('Under %1$s click on %2$s or %3$s.'), + '
    ', + '', + '', + ), + { + Section: Comments for websites, + Button1: LOG IN TO CONNECT, + Button2: CONNECT WEBSITE, + }, + )} +
  4. +
  5. + {createInterpolateElement( + sprintf( + /* translators: 1 field name, 2 website address, 3 field name */ + __( + 'Enter your site name in %1$s field and %2$s in %3$s field.', + ), + '', + '', + '', + ), + { + SiteName: Site Name, + Host: {location.host}, + Domains: Domains, + }, + )} +
  6. +
  7. + {createInterpolateElement( + sprintf( + /* translators: 1 button name */ + __('Click on %s and customize the appearance if you want.'), + '
  8. +
  9. + {createInterpolateElement( + sprintf( + /* translators: 1, 2 button names */ + __('Click on %1$s and %2$s.'), + '', + '', + ), + { + Button1: SAVE, + Button2: COPY CODE, + }, + )} +
  10. +
  11. {__('Paste the copied code in the field below.')}
  12. +
  13. {__('Save Changes')}
  14. +
+
+
+ ); +}; diff --git a/plugins/wptelegram-comments/js/settings/constants.ts b/plugins/wptelegram-comments/js/settings/constants.ts new file mode 100644 index 00000000..c313808f --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/constants.ts @@ -0,0 +1 @@ +export const ROOT_ID = 'wptelegram-comments-settings'; diff --git a/plugins/wptelegram-comments/js/settings/hooks/usePluginData.ts b/plugins/wptelegram-comments/js/settings/hooks/usePluginData.ts new file mode 100644 index 00000000..97417d2b --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/hooks/usePluginData.ts @@ -0,0 +1,3 @@ +export function usePluginData() { + return window.wptelegram_comments; +} diff --git a/plugins/wptelegram-comments/js/settings/index.tsx b/plugins/wptelegram-comments/js/settings/index.tsx new file mode 100644 index 00000000..33f135f4 --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/index.tsx @@ -0,0 +1,20 @@ +import { cleanupAdminScreen } from '@wpsocio/helpers/wp-admin'; +import React from 'react'; +import ReactDOM from 'react-dom/client'; + +import { App } from './App'; +import { ROOT_ID } from './constants'; +import './styles.scss'; + +// clea up notifications etc. +cleanupAdminScreen(ROOT_ID); + +const root = document.getElementById(ROOT_ID); + +root + ? ReactDOM.createRoot(root).render( + + + , + ) + : console.error(`Root element not found: ${ROOT_ID}`); diff --git a/plugins/wptelegram-comments/js/settings/styles.scss b/plugins/wptelegram-comments/js/settings/styles.scss new file mode 100644 index 00000000..69bdbc94 --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/styles.scss @@ -0,0 +1,22 @@ +#wptelegram-comments-settings { + padding-block-start: 1.25rem; + padding-inline-end: 1.25rem; + + .description { + font-style: italic; + } + + h1, h2, h3, h4, h5, h6 { + margin-block-start: 0; + margin-block-end: 0; + } +} + +.wpsocio { + &-instructions { + ol { + margin-block: 0; + margin-inline-start: 1.25rem; + } + } +} \ No newline at end of file diff --git a/plugins/wptelegram-comments/js/settings/types.ts b/plugins/wptelegram-comments/js/settings/types.ts new file mode 100644 index 00000000..dda0e0f7 --- /dev/null +++ b/plugins/wptelegram-comments/js/settings/types.ts @@ -0,0 +1,35 @@ +import { OptionsType } from '@wpsocio/components/select'; +import type { + BaseAssetsData, + BaseDOMData, + BasePluginData, +} from '@wpsocio/helpers/types'; + +export interface WPTelegramCommentsData + extends BaseDOMData, + BasePluginData {} + +export interface AssetsData extends BaseAssetsData { + tgIconUrl: string; +} + +export interface AssetsData extends BaseAssetsData { + tgIconUrl: string; +} + +export interface UiData { + post_types: OptionsType; +} + +export interface DataShape { + attributes?: string; + code: string; + exclude?: string; + post_types: Array; +} + +declare global { + interface Window { + wptelegram_comments: WPTelegramCommentsData; + } +} diff --git a/plugins/wptelegram-comments/package.json b/plugins/wptelegram-comments/package.json new file mode 100644 index 00000000..602cc061 --- /dev/null +++ b/plugins/wptelegram-comments/package.json @@ -0,0 +1,44 @@ +{ + "name": "@wpsocio/wptelegram-comments", + "version": "1.1.9", + "title": "WP Telegram Comments", + "description": "Add comments to posts/pages on your WordPress website by using Telegram Comments Widget", + "private": true, + "license": "GPL-3.0", + "author": { + "name": "WP Socio", + "url": "https://wpsocio.com" + }, + "repository": { + "type": "git", + "url": "https://github.com/wpsocio/wptelegram-comments" + }, + "bugs": { + "url": "https://github.com/wpsocio/wptelegram-comments/issues" + }, + "keywords": ["telegram", "comments", "discuss", "social", "widget"], + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview" + }, + "browserslist": [">1%", "last 2 versions", "Firefox ESR", "not ie < 9"], + "dependencies": { + "@wordpress/components": "^25.12.0", + "@wordpress/element": "^5.24.0", + "@wordpress/i18n": "^4.47.0", + "@wpsocio/components": "workspace:*", + "@wpsocio/helpers": "workspace:*" + }, + "devDependencies": { + "@types/jquery": "^3.5.29", + "@types/react": "^18.2.37", + "@types/react-dom": "^18.2.15", + "@wpsocio/dev": "workspace:*", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "typescript": "^5.2.2" + } +} diff --git a/plugins/wptelegram-comments/src/LICENSE.txt b/plugins/wptelegram-comments/src/LICENSE.txt new file mode 100644 index 00000000..ecbc0593 --- /dev/null +++ b/plugins/wptelegram-comments/src/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/plugins/wptelegram-comments/src/README.txt b/plugins/wptelegram-comments/src/README.txt new file mode 100644 index 00000000..16b801fa --- /dev/null +++ b/plugins/wptelegram-comments/src/README.txt @@ -0,0 +1,101 @@ +=== WP Telegram Comments === +Contributors: wpsocio, irshadahmad21 +Donate link: https://wpsocio.com/donate +Tags: telegram, comments, discuss, social, widget +Requires at least: 6.1 +Requires PHP: 7.4 +Tested up to: 6.4.2 +Stable tag: 1.1.9 +License: GPLv2 or later +License URI: http://www.gnu.org/licenses/gpl-2.0.html + +Add comments to posts/pages on your WordPress website by using Telegram Comments Widget. + +== Description == +Comments on WordPress posts not only fill your database tables, rather they also make it difficult to moderate efficiently. Telegram comments removes this drawback because the comments are stored on Telegram servers and every comment is from an authenticated Telegram user. + +== Excellent Support == + +**Join the Chat** + +We have a public group on Telegram to provide help setting up the plugin, discuss issues, features, translations etc. Join [@WPTelegramChat](https://t.me/WPTelegramChat) +For rules, see the pinned message. No spam please. + +== Why Telegram Comments? == + +* ✅ It saves you database memory +* ✅ Comments are from authenticated Telegram Users +* ❌ No place for spam bots + +== Features == + +* ⚡️ Ultra lightweight comments widget +* 🛒 Supports WooCommerce products and other Custom Post Types +* 🛂 You can exclude specific posts/pages for comments +* 🔔 Users can subscribe to comments and get the notifications on Telegram +* 👏 Comments can have Like 👍 and Dislike 👎 Feedback +* 📸 Comments support multimedia attachments +* ⤴️ Users can reply to comments intuitively +* ✏️ Comments can be edited or deleted anytime + +== Installation == + +1. Upload the `wptelegram-comments` folder to the `/wp-content/plugins/` directory +2. Activate the plugin through the Plugins menu in WordPress. After activation, you should see the menu of this plugin the the admin +3. Configure the plugin. + +**Enjoy!** + +== Screenshots == + +1. Settings + +== Changelog == + += 1.1.9 = +- Maintenance release + += 1.1.8 = +- Fixed translations not loaded for some strings + += 1.1.7 = +- Fixed warnings in PHP 8.x + += 1.1.6 = +- Maintenance release + += 1.1.5 = +- Maintenance release + += 1.1.4 = +- Minor UI improvements + += 1.1.3 = +- Cleaned up the admin menu for single entry for WP Telegram +- Fixed the ugly post type list when there are plenty of them + += 1.1.2 = +- Fixed the issue of settings not saved due to trailing slash redirects + += 1.1.1 = +- Fixed the wrong widget configuration being saved + += 1.1.0 = +- Switched to PHP namespaces +- Refreshed and improved the UI + += 1.0.4 = +- Fixed back-end validation for code + += 1.0.3 = +- Add support for channel discussion scripts + += 1.0.2 = +- Updated test up to + += 1.0.1 = +* Added translations +* Minor fixes + += 1.0.0 = +* Initial Release \ No newline at end of file diff --git a/plugins/wptelegram-comments/src/admin/Admin.php b/plugins/wptelegram-comments/src/admin/Admin.php new file mode 100644 index 00000000..76a40ee1 --- /dev/null +++ b/plugins/wptelegram-comments/src/admin/Admin.php @@ -0,0 +1,67 @@ +register_routes(); + } + + /** + * Register the admin menu. + * + * @since 1.0.0 + */ + public function add_plugin_admin_menu() { + add_submenu_page( + 'wptelegram', + esc_html( $this->plugin()->title() ), + esc_html__( 'Telegram Comments', 'wptelegram-comments' ), + 'manage_options', + $this->plugin()->name(), + [ $this, 'display_plugin_admin_page' ] + ); + } + + /** + * Render the settings page for this plugin. + * + * @since 1.0.0 + */ + public function display_plugin_admin_page() { + if ( ! current_user_can( 'manage_options' ) ) { + return; + } + ?> +
+ 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 literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/assets/static/icons/icon-36x34.png b/plugins/wptelegram-comments/src/assets/static/icons/icon-36x34.png new file mode 100644 index 0000000000000000000000000000000000000000..5c4e2f47a1c98e41240ce4d6a19042615fe89330 GIT binary patch literal 2076 zcmV+%2;=vOP)pF8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H12dPO! zK~!jg?V3+)6z3VnfA6f<#=&5N|I|qcm7ry znezAGSU=_r`K^&tJ!YxdVm)bD^Q6B`vObvxJ6fBMo0%2@7OF%h`$RJ1ADqbQfm(CM zQvUj6CjZh{CcCS?Flm2NBJCd@oydm5B-8%GW9jVknT%FVK_$}u;gs*MuVt>LumDL- z$&A07fYU3NwVa4VtTl{DCIMK{*8FiYl|7Tou}9MRu!Zh~0gY#J8_XhY z?QPAc<^YZ)Q@JgLOzt@oYp2?C*;zx}1ne+FBT%;Z9^QYet%At|_EX6eel(aFix z$(#9~%CyTMT9%XT?VXPAHk(kuKYjHbR@1_Eo(2TDvGji#~>I%)s=GFvfsimHIH$XI|n>Hq`=Cdo-=az6kzhQ$W~ ziLjWt6uO2SEE#dE9dJx`Q3^f<^7G|H%&ERYfps`oC}=Hf=u#ozJ~JBvVnA$oc(|o^ z_3Ez$d1sH%U6nccg2t)_a&*7oQrLWW}jGqa$sKvPPl{fC9^GP5=*xIkdTmc8fvJah8p@ZYO&=RvUJ%y=je}0dR9_KGqtiTrl-{Zcs+n# zlXPs3zKxPTRJA5%i9Igqk74uGvidgyf2kO}UD6@o1B&}lr9PjfZ3x&DHd!r()t$hV zGMLAJL%==ruZ8!3Y)H;* zx9o1*34covwolxcm%kx0HFTTShuFqMmJIZ7?<_ECh1R-ep~UBeWxO> zyY$%CY|G3C)FSDkq+iX_w_nog((mn(;w7N_D&k&}^qGoP!mUfvUP(Dg0~PJPmB*6a zD4$r;qml}B*%T`#J0dAr2^EsFRmB(buj>j^8a!Hp%9n0c)tV}c?bOUtB~t4=iz(2a z0`>u26brO7%q-CQC>CgO;2ATU^|ezspb}IIu$y8TyMf{!Lka97-~{lNnfZ$uzoCX2 zYN(-x8v1|MqRJ1Bs+kUN2eR26GzG`$>N&}#|AB*s8{Y#~a?n(C&;sW&Rxlh}g>2eE zlReFruG{0Faa0jp?*OisCpPjTLs#c?&~UHyFc^Os*URI^_wn3qaL{l^4&r*_4907A z&=~Z#<9aFFczqo--1rlvvki6781$aP^*$kXeSH~Jp4doD4qEscIyKxvWW^^)Z?dKP zCv(QVd;MMtb{K3k070;xN51k80Alf1FxyOL*SfHU9)52l9lJo?G`0L<*8UF_#T|K; zf^+^07yw%`?SNSDJg|z9`1Y{rYFTVM!D4)S`HiZcn75G|BYy+!16s>^Qfz6T{zJ+@ zZyXrJoZa;R+6ci62aR_|+i~NEumw11rXf@>2Q6^EaL{nQ#|R3Cz~*+)WYrFuxPsNo zL9>E!R1w;5ybd*(2BvBUO%fLV4AthKncYR(XGI6i7U`gw-HqzzpgDbPU6W;?>jgG< z_d}tRqN_iLgQi&=G^@!$3kNbzfCh*qr`?W$-ZWc!V!(OCtHAGOCPiifo%&BVFo2`C zZXGC}coP`K@qbp;C$12QJj+1$4>5KCUXdrbIFm2>bKok8?mE3_U2iY0m*bu5GtH{E zwT4vq3-lMo)f!Ou>I%v4w5nL}>1vQ@r<6CjPaa^xv2d(z9ptI}8z^eq# z+r+&6GuBk4-W~76^$s9AiR||zyPmFfnuQl=gI>`=6J2022+qtb(C90@)8e3K80fkE z4jQM1TWIRojo5+MfR#CD;v-BaNOr%)_ZkjbLk%?)s{aBuws|y1_S$a%0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/wptelegram-comments/src/autoload.php b/plugins/wptelegram-comments/src/autoload.php new file mode 100644 index 00000000..f39d352c --- /dev/null +++ b/plugins/wptelegram-comments/src/autoload.php @@ -0,0 +1,25 @@ + [ + 'entry' => self::ADMIN_SETTINGS_ENTRY, + 'css-deps' => [ 'wp-components' ], + ], + ]; + + /** + * The registered handles. + * + * @since x.y.z + * @var array $registered_handles The registered handles. + */ + private $registered_handles = []; + + /** + * Register the assets. + * + * @since 1.1.3 + */ + public function register_assets() { + + $assets = $this->plugin()->assets(); + + $build_dir = $assets->build_path(); + + foreach ( self::ASSET_ENTRIES as $name => $data ) { + $entry = $data['entry']; + + $this->registered_handles[ $entry ] = Vite\register_asset( + $build_dir, + $entry, + [ + 'handle' => $this->plugin()->name() . '-' . $name, + 'dependencies' => $assets->get_dependencies( $entry ), + 'css-dependencies' => $data['css-deps'] ?? [], + 'in-footer' => $data['in-footer'] ?? true, + ] + ); + } + + if ( ! defined( 'WPTELEGRAM_LOADED' ) ) { + wp_register_style( + 'wptelegram-menu', + $assets->url( sprintf( '/static/css/admin-menu%s.css', wp_scripts_get_suffix() ) ), + [], + $this->plugin()->version(), + 'all' + ); + } + } + + /** + * Register the stylesheets for the admin area. + * + * @since 1.1.0 + * @param string $hook_suffix The current admin page. + */ + public function enqueue_admin_styles( $hook_suffix ) { + + if ( ! defined( 'WPTELEGRAM_LOADED' ) ) { + wp_enqueue_style( 'wptelegram-menu' ); + } + + // Load only on settings page. + if ( $this->is_settings_page( $hook_suffix ) ) { + $admin_styles = $this->registered_handles[ self::ADMIN_SETTINGS_ENTRY ]['styles'] ?? []; + + foreach ( $admin_styles as $handle ) { + wp_enqueue_style( $handle ); + } + } + } + + /** + * Register the JavaScript for the admin area. + * + * @since 1.1.0 + * @param string $hook_suffix The current admin page. + */ + public function enqueue_admin_scripts( $hook_suffix ) { + // Load only on settings page. + if ( $this->is_settings_page( $hook_suffix ) && ! empty( $this->registered_handles[ self::ADMIN_SETTINGS_ENTRY ]['scripts'] ) ) { + [$handle] = $this->registered_handles[ self::ADMIN_SETTINGS_ENTRY ]['scripts']; + + wp_enqueue_script( $handle ); + + // Pass data to JS. + $data = $this->get_dom_data(); + // Not to expose bot token to non-admins. + if ( current_user_can( 'manage_options' ) ) { + $data['savedSettings'] = SettingsController::get_default_settings(); + } + $data['uiData']['post_types'] = $this->get_post_type_options(); + + self::add_dom_data( $handle, $data ); + } + } + + /** + * Add the data to DOM. + * + * @since 1.1.3 + * + * @param string $handle The script handle to attach the data to. + * @param mixed $data The data to add. + * @param string $var The JavaScript variable name to use. + * + * @return void + */ + public static function add_dom_data( $handle, $data, $var = 'wptelegram_comments' ) { + wp_add_inline_script( + $handle, + sprintf( 'var %s = %s;', $var, wp_json_encode( $data ) ), + 'before' + ); + } + + /** + * Get the common DOM data. + * + * @return array + */ + private function get_dom_data() { + $data = [ + 'pluginInfo' => [ + 'title' => $this->plugin()->title(), + 'name' => $this->plugin()->name(), + 'version' => $this->plugin()->version(), + 'description' => __( 'With this plugin, you can add comments to posts/pages on your WordPress website by using Telegram Comments Widget.', 'wptelegram-comments' ), + ], + 'api' => [ + 'admin_url' => admin_url(), + 'nonce' => wp_create_nonce( 'wptelegram-comments' ), + 'rest_namespace' => 'wptelegram-comments/v1', + 'wp_rest_url' => esc_url_raw( rest_url() ), + ], + 'assets' => [ + 'logoUrl' => $this->plugin()->assets()->url( '/static/icons/icon-128x128.png' ), + 'tgIconUrl' => $this->plugin()->assets()->url( '/static/icons/tg-icon.svg' ), + ], + 'uiData' => [], + 'i18n' => Utils::get_jed_locale_data( 'wptelegram-comments' ), + ]; + + return $data; + } + + /** + * Get the registered post types. + * + * @since 1.1.0 + * @return array + */ + public function get_post_type_options() { + + $options = []; + + $post_types = get_post_types( [ 'public' => true ], 'objects' ); + + foreach ( $post_types as $post_type ) { + + if ( 'attachment' !== $post_type->name ) { + + $options[] = [ + 'value' => $post_type->name, + 'label' => "{$post_type->labels->singular_name} ({$post_type->name})", + ]; + } + } + + return apply_filters( 'wptelegram_comments_post_type_options', $options, $post_types ); + } + + /** + * Enqueue assets for the Gutenberg block + * + * @since 1.1.0 + * @param string $hook_suffix The current admin page. + */ + public function is_settings_page( $hook_suffix ) { + return ( false !== strpos( $hook_suffix, '_page_' . $this->plugin()->name() ) ); + } +} diff --git a/plugins/wptelegram-comments/src/includes/Assets.php b/plugins/wptelegram-comments/src/includes/Assets.php new file mode 100644 index 00000000..88c5afae --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/Assets.php @@ -0,0 +1,164 @@ +assets_path = untrailingslashit( $assets_path ); + $this->assets_url = untrailingslashit( $assets_url ); + $this->initialize(); + } + + /** + * Initializes the assets. + * + * @return void + */ + public function initialize() { + if ( ! $this->dependencies ) { + $this->set_dependencies_filepath(); + $this->load_dependencies(); + } + } + + /** + * Sets the path to dependencies file. + * + * @param string $dependencies_path Path to dependencies JSON file. + * + * @throws \Exception Dependencies file check. + * + * @return void + */ + public function set_dependencies_filepath( $dependencies_path = '' ) { + $dependencies_path = $dependencies_path ? $dependencies_path : $this->build_path( '/' . self::DEPS_FILE_NAME ); + + if ( ! is_readable( $dependencies_path ) ) { + throw new \Exception( 'Dependencies file not found or is not readable: ' . esc_html( $dependencies_path ) ); + } + $this->dependencies_path = $dependencies_path; + } + + /** + * Loads the dependencies file. + * + * @return void + */ + private function load_dependencies() { + if ( null === $this->dependencies ) { + // phpcs:ignore + $dependencies = json_decode( file_get_contents( $this->dependencies_path ), true ); + + $this->dependencies = $dependencies ? $dependencies : []; + } + } + + /** + * Get the dependencies of an entry. + * + * @param string $entry The entry point to get the asset dependencies for. + * + * @return array + */ + public function get_dependencies( $entry ) { + $dependencies = $this->dependencies[ $entry ] ?? []; + + return $dependencies; + } + + /** + * Get the path to assets directory. + * + * @param string $path Path to append. + * @return string + */ + public function path( $path = '' ) { + return $this->assets_path . $path; + } + + /** + * Get the URL to assets directory. + * + * @param string $path Path to append. + * @return string + */ + public function url( $path = '' ) { + return $this->assets_url . $path; + } + + /** + * Get the build path. + * + * @param string $path Path to append. + * @return string + */ + public function build_path( $path = '' ) { + return $this->path( '/build' . $path ); + } + + /** + * Get the build URL. + * + * @param string $path Path to append. + * @return string + */ + public function build_url( $path = '' ) { + return $this->url( '/build' . $path ); + } +} diff --git a/plugins/wptelegram-comments/src/includes/BaseClass.php b/plugins/wptelegram-comments/src/includes/BaseClass.php new file mode 100644 index 00000000..dfaa2484 --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/BaseClass.php @@ -0,0 +1,54 @@ +plugin = $plugin; + } + + /** + * Get the instance of the plugin. + * + * @since 1.1.1 + * @return Main The plugin class instance. + */ + protected function plugin() { + return $this->plugin; + } +} diff --git a/plugins/wptelegram-comments/src/includes/Deactivator.php b/plugins/wptelegram-comments/src/includes/Deactivator.php new file mode 100644 index 00000000..02532784 --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/Deactivator.php @@ -0,0 +1,33 @@ +version = WPTELEGRAM_COMMENTS_VER; + + $this->plugin_name = 'wptelegram_comments'; + + $this->load_dependencies(); + + $this->set_locale(); + } + + /** + * Registers the initial hooks. + * + * @since x.y.z + * @access private + */ + public function init() { + if ( self::$initiated ) { + return; + } + self::$initiated = true; + + // Then lets hook everything up. + add_action( 'plugins_loaded', [ $this, 'hookup' ], 20 ); + } + + /** + * Registers the initial hooks. + * + * @since x.y.z + * @access public + */ + public function hookup() { + $this->define_admin_hooks(); + $this->define_shared_hooks(); + } + + /** + * Load the required dependencies for this plugin. + * + * @since x.y.z + * @access private + */ + private function load_dependencies() { + + /** + * Composer autoloader. + * + * The directory is relative to the plugin root. + */ + require_once dirname( WPTELEGRAM_COMMENTS_MAIN_FILE ) . '/vendor/autoload.php'; + } + + /** + * Define the locale for this plugin for internationalization. + * + * Uses the I18n class in order to set the domain and to register the hook + * with WordPress. + * + * @since 1.0.0 + * @access private + */ + private function set_locale() { + + $plugin_i18n = new I18n(); + + add_action( 'plugins_loaded', [ $plugin_i18n, 'load_plugin_textdomain' ] ); + } + + /** + * Set the plugin options + * + * @since 1.0.0 + * @access private + */ + private function set_options() { + + $this->options = new Options( $this->name() ); + } + + /** + * Get the plugin options + * + * @since 1.0.0 + * @access public + * + * @return Options + */ + public function options() { + if ( ! $this->options ) { + $this->set_options(); + } + return $this->options; + } + + /** + * Set the assets handler. + * + * @since 1.1.0 + * @access private + */ + private function set_assets() { + $this->assets = new Assets( $this->dir( '/assets' ), $this->url( '/assets' ) ); + } + + /** + * Get the plugin assets handler. + * + * @since 1.1.0 + * @access public + * + * @return Assets The assets instance. + */ + public function assets() { + if ( ! $this->assets ) { + $this->set_assets(); + } + + return $this->assets; + } + + /** + * Set the asset manager. + * + * @since 1.1.3 + * @access private + */ + private function set_asset_manager() { + $this->asset_manager = new AssetManager( $this ); + } + + /** + * Get the plugin assets manager. + * + * @since 1.1.3 + * @access public + * + * @return AssetManager The asset manager. + */ + public function asset_manager() { + if ( ! $this->asset_manager ) { + $this->set_asset_manager(); + } + + return $this->asset_manager; + } + + /** + * Register all of the hooks related to the admin area functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function define_admin_hooks() { + + $plugin_admin = new Admin( $this ); + + add_action( 'admin_menu', [ $plugin_admin, 'add_plugin_admin_menu' ] ); + add_action( 'admin_menu', [ Utils::class, 'update_menu_structure' ], 5 ); + + add_action( 'rest_api_init', [ $plugin_admin, 'register_rest_routes' ] ); + } + + /** + * Register all of the hooks related to the public-facing functionality + * of the plugin. + * + * @since 1.0.0 + * @access private + */ + private function define_shared_hooks() { + + $shared = new Shared( $this ); + + add_filter( 'comments_template', [ $shared, 'set_comments_template' ], PHP_INT_MAX - 100 ); + + add_filter( 'wptelegram_comments_widget_attributes', [ $shared, 'set_widget_attributes' ], 10, 2 ); + + $asset_manager = $this->asset_manager(); + + add_action( 'admin_enqueue_scripts', [ $asset_manager, 'enqueue_admin_styles' ] ); + add_action( 'admin_enqueue_scripts', [ $asset_manager, 'enqueue_admin_scripts' ] ); + add_action( 'init', [ $asset_manager, 'register_assets' ] ); + } + + /** + * The title of the plugin. + * + * @since 1.0.0 + * @return string The title of the plugin. + */ + public function title() { + // Set here instead of constructor + // to be able to translate it. + if ( ! $this->title ) { + $this->title = __( 'WP Telegram Comments', 'wptelegram-comments' ); + } + return $this->title; + } + + /** + * The name of the plugin used to uniquely identify it within the context of + * WordPress and to define internationalization functionality. + * + * @since 1.0.0 + * @return string The name of the plugin. + */ + public function name() { + return $this->plugin_name; + } + + /** + * Retrieve the version number of the plugin. + * + * @since 1.0.0 + * @return string The version number of the plugin. + */ + public function version() { + return $this->version; + } + + /** + * Retrieve directory path to the plugin. + * + * @since 1.0.0 + * @param string $path Path to append. + * @return string Directory with optional path appended + */ + public function dir( $path = '' ) { + return WPTELEGRAM_COMMENTS_DIR . $path; + } + + /** + * Retrieve URL path to the plugin. + * + * @since 1.0.0 + * @param string $path Path to append. + * @return string URL with optional path appended + */ + public function url( $path = '' ) { + return WPTELEGRAM_COMMENTS_URL . $path; + } + + /** + * Get the asset path. + * + * @param string $path Path to append. + * @return string + */ + public function asset_path( $path = '' ) { + return $this->dir( '/assets' . $path ); + } + + /** + * Get the asset URL. + * + * @param string $path Path to append. + * @return string + */ + public function asset_url( $path = '' ) { + return $this->url( '/assets' . $path ); + } +} diff --git a/plugins/wptelegram-comments/src/includes/Options.php b/plugins/wptelegram-comments/src/includes/Options.php new file mode 100644 index 00000000..53d1cd4b --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/Options.php @@ -0,0 +1,460 @@ +store_as_json = $store_as_json; + + // Make sure we have an array to avoid adding values to null. + $this->data = []; + + if ( ! empty( $option_key ) ) { + $this->set_option_key( $option_key ); + } + } + + /** + * Checks if an option key exists. + * + * @since 1.0.0 + * + * @param string $key Option key. + * + * @return bool Whether the option key exists. + */ + public function exists( $key ) { + return array_key_exists( $key, $this->get_data() ); + } + + /** + * Retrieves an option by key. + * + * @since 1.0.0 + * + * @param string $key Options array key. + * @param mixed $default Optional default value. + * + * @return mixed Option value + */ + public function get( $key = '', $default = false ) { + if ( 'all' === $key || empty( $key ) ) { + $value = $this->data; + } else { + $value = $this->exists( $key ) ? $this->data[ $key ] : $default; + } + + return apply_filters( strtolower( __CLASS__ ) . "_{$this->option_key}_get_{$key}", $value, $default ); + } + + /** + * Retrieves an option by nested path, with keys separated by dot. + * + * @since 3.0.0 + * + * @param string $path Path to the value.. + * @param mixed $default Optional default value. + * + * @return mixed Option value. + */ + public function get_path( $path = '', $default = false ) { + // If it's not a nested path. + if ( false === strpos( $path, '.' ) ) { + return $this->get( $path, $default ); + } + + $value = $this->get( 'all' ); + + if ( ! is_array( $value ) ) { + return $default; + } + + foreach ( explode( '.', $path ) as $key ) { + + if ( ! is_array( $value ) || ! array_key_exists( $key, $value ) ) { + return $default; + } + $value = $value[ $key ]; + } + + return apply_filters( strtolower( __CLASS__ ) . "_{$this->option_key}_get_path_{$path}", $value, $default ); + } + + /** + * Sets an option by key. + * + * @since 1.0.0 + * + * @param string $key Options array key. + * @param mixed $value Option value. + * + * @return mixed Option value + */ + public function set( $key, $value = '' ) { + + if ( ! empty( $this->option_key ) ) { + + $this->data[ $key ] = apply_filters( strtolower( __CLASS__ ) . "_{$this->option_key}_set_{$key}", $value ); + + return $this->update_data(); + } + + $this->data[ $key ] = $value; + + return $this; + } + + /** + * Remove an option by key. + * + * @since 1.0.0 + * + * @param string $key Options array key. + */ + public function remove( $key ) { + + unset( $this->data[ $key ] ); + + return $this->update_data(); + } + + /** + * Get the option key + * + * @since 1.0.0 + */ + public function get_option_key() { + return $this->option_key; + } + + /** + * Set the option key. + * + * @since 1.0.0 + * + * @param string $option_key Option name in the database. + */ + public function set_option_key( $option_key ) { + $this->option_key = $option_key; + $this->set_data(); + + return $this; + } + + /** + * Gets all options. + * + * @since 1.0.0 + * @return array + */ + public function get_data() { + return (array) $this->get(); + } + + /** + * Sets the options data. + * + * @since 1.0.0 + * + * @param array $data The options array. + * @param boolean $unslash Whether to unslash the data. + */ + public function set_data( array $data = [], $unslash = false ) { + if ( empty( $data ) && ! empty( $this->option_key ) ) { + + $default = $this->store_as_json ? '' : []; + + $data = get_option( $this->option_key, $default ); + + if ( $this->store_as_json ) { + $data = json_decode( $data, true ); + } + } + + if ( $unslash ) { + $data = wp_unslash( $data ); + } + $this->data = (array) $data; + + return $this; + } + + /** + * Updates the options in the database. + * + * @since 1.0.0 + * @param boolean $unslash Whether to unslash the data. + */ + public function update_data( $unslash = false ) { + + // Make sure we have something to work upon. + if ( ! empty( $this->option_key ) ) { + $data = $this->get_data(); + if ( $this->store_as_json ) { + $data = wp_json_encode( $data ); + } + if ( $unslash ) { + $data = wp_unslash( $data ); + } + + return update_option( $this->option_key, $data ); + } + return false; + } + + /** + * Magic method for accessing options as object props. + * + * @since 1.0.0 + * + * @param string $key Options array key. + * + * @return mixed Value of the option + */ + public function __get( $key ) { + return $this->get( $key ); + } + + /** + * Magic method for setting options as object props. + * + * @since 1.0.0 + * + * @param string $key Options array key. + * @param string $value Option value. + */ + public function __set( $key, $value ) { + return $this->set( $key, $value ); + } + + /** + * Magic method for un-setting options as object props. + * + * @since 1.0.0 + * + * @param string $key Options array key. + */ + public function __unset( $key ) { + return $this->remove( $key ); + } + + /** + * Magic method to check for existence of a key. + * + * @since 1.0.0 + * + * @param string $key Options array key. + */ + public function __isset( $key ) { + return $this->exists( $key ); + } + + /** + * Allows the object being called as a function + * to retrieve an option. + * + * @since 1.0.0 + * + * @param string $key Options array key. + * + * @return mixed Option value. + */ + public function __invoke( $key ) { + return $this->get( $key ); + } + + /** + * Allows the object being treated as string + * + * @since 1.0.0 + * + * @return string json encoded. + */ + public function __toString() { + return wp_json_encode( $this->get_data() ); + } + + /** + * Determines whether an offset value exists. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/arrayaccess.offsetexists.php + * + * @param mixed $offset An offset to check for. + * @return bool True if the offset exists, false otherwise. + */ + #[\ReturnTypeWillChange] + public function offsetExists( $offset ) { + return $this->exists( $offset ); + } + + /** + * Retrieves a value at a specified offset. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/arrayaccess.offsetget.php + * + * @param mixed $offset The offset to retrieve. + * @return mixed If set, the value at the specified offset, false otherwise. + */ + #[\ReturnTypeWillChange] + public function offsetGet( $offset ) { + return $this->get( $offset ); + } + + /** + * Sets a value at a specified offset. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/arrayaccess.offsetset.php + * + * @param mixed $offset The offset to assign the value to. + * @param mixed $value The value to set. + */ + #[\ReturnTypeWillChange] + public function offsetSet( $offset, $value ) { + return $this->set( $offset, $value ); + } + + /** + * Unsets a specified offset. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/arrayaccess.offsetunset.php + * + * @param mixed $offset The offset to unset. + */ + #[\ReturnTypeWillChange] + public function offsetUnset( $offset ) { + return $this->remove( $offset ); + } + + /** + * Returns the current element. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/iterator.current.php + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function current() { + return current( $this->data ); + } + + /** + * Moves forward to the next element. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/iterator.next.php + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function next() { + return next( $this->data ); + } + + /** + * Returns the key of the current element. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/iterator.key.php + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function key() { + return key( $this->data ); + } + + /** + * Checks if current position is valid. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/iterator.valid.php + * + * @return boolean + */ + #[\ReturnTypeWillChange] + public function valid() { + return key( $this->data ) !== null; + } + + /** + * Rewinds the Iterator to the first element. + * + * @since 1.0.0 + * + * @link https://secure.php.net/manual/en/iterator.rewind.php + */ + #[\ReturnTypeWillChange] + public function rewind() { + reset( $this->data ); + } +} diff --git a/plugins/wptelegram-comments/src/includes/Requirements.php b/plugins/wptelegram-comments/src/includes/Requirements.php new file mode 100644 index 00000000..cfe6af9c --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/Requirements.php @@ -0,0 +1,127 @@ + [ + 'version' => PHP_VERSION, + 'min' => $plugin_data['RequiresPHP'], + ], + 'WP' => [ + 'version' => get_bloginfo( 'version' ), + 'min' => $plugin_data['RequiresWP'], + ], + ]; + + $satisfied = true; + + foreach ( $data as &$details ) { + $details['satisfied'] = version_compare( $details['version'], $details['min'], '>=' ); + + if ( $satisfied && ! $details['satisfied'] ) { + $satisfied = false; + } + } + + return compact( 'data', 'satisfied' ); + } + + /** + * Display the requirements. + * + * @since 1.1.8 + */ + public static function display_requirements() { + $env_details = self::get_env_details(); + ?> + + +
+

+ +

+  👇 +
    + $requirement ) : + if ( ! $requirement['satisfied'] ) : + ?> +
  • + +
  • + +
+ + + +
+ + + [ + 'domain' => $domain, + 'lang' => is_admin() ? get_user_locale() : get_locale(), + ], + ]; + + if ( ! empty( $translations->headers['Plural-Forms'] ) ) { + $locale['']['plural_forms'] = $translations->headers['Plural-Forms']; + } + + foreach ( $translations->entries as $msgid => $entry ) { + $locale[ $msgid ] = $entry->translations; + } + + return $locale; + } + + /** + * Update the menu structure to make WP Telegram the top level link. + */ + public static function update_menu_structure() { + global $admin_page_hooks; + + if ( ! defined( 'WPTELEGRAM_LOADED' ) && empty( $admin_page_hooks['wptelegram'] ) ) { + add_menu_page( + __( 'WP Telegram', 'wptelegram-comments' ), + __( 'WP Telegram', 'wptelegram-comments' ), + 'manage_options', + 'wptelegram', + null, + '', + 80 + ); + add_action( 'admin_menu', [ __CLASS__, 'remove_wptelegram_menu' ], 20 ); + } + } + + /** + * Update the menu structure to remove WP Telegram top level link. + */ + public static function remove_wptelegram_menu() { + global $submenu; + + if ( ! current_user_can( 'manage_options' ) || empty( $submenu['wptelegram'] ) ) { + return; + } + + $key = null; + foreach ( $submenu['wptelegram'] as $submenu_key => $submenu_item ) { + if ( 'wptelegram' === $submenu_item[2] ) { + $key = $submenu_key; + break; + } + } + + if ( null === $key ) { + return; + } + + unset( $submenu['wptelegram'][ $key ] ); + } +} diff --git a/plugins/wptelegram-comments/src/includes/index.php b/plugins/wptelegram-comments/src/includes/index.php new file mode 100644 index 00000000..e71af0ef --- /dev/null +++ b/plugins/wptelegram-comments/src/includes/index.php @@ -0,0 +1 @@ +settings = WPTG_Comments()->options(); + } + + /** + * Register the routes for the objects of the controller. + * + * @since 1.0.0 + */ + public function register_routes() { + + register_rest_route( + self::NAMESPACE, + self::REST_BASE, + [ + [ + 'methods' => WP_REST_Server::READABLE, + 'callback' => [ $this, 'get_settings' ], + 'permission_callback' => [ $this, 'settings_permissions' ], + 'args' => self::get_settings_params( 'view' ), + ], + [ + 'methods' => WP_REST_Server::CREATABLE, + 'callback' => [ $this, 'update_settings' ], + 'permission_callback' => [ $this, 'settings_permissions' ], + 'args' => self::get_settings_params( 'edit' ), + ], + ] + ); + } + + /** + * Check request permissions. + * + * @since 1.0.0 + * + * @return bool + */ + public function settings_permissions() { + return current_user_can( 'manage_options' ); + } + + /** + * Get the default settings. + * + * @return array + */ + public static function get_default_settings() { + + $settings = WPTG_Comments()->options()->get_data(); + + // If we have somethings saved. + if ( ! empty( $settings ) ) { + return $settings; + } + + // Get the default values. + $settings = self::get_settings_params(); + + foreach ( $settings as $key => $args ) { + $settings[ $key ] = isset( $args['default'] ) ? $args['default'] : ''; + } + + return $settings; + } + + /** + * Get settings via API. + * + * @since 1.0.0 + */ + public function get_settings() { + return rest_ensure_response( self::get_default_settings() ); + } + + /** + * Update settings. + * + * @since 1.0.0 + * + * @param WP_REST_Request $request WP REST API request. + */ + public function update_settings( WP_REST_Request $request ) { + + $settings = []; + + foreach ( self::get_settings_params() as $key => $args ) { + $value = $request->get_param( $key ); + + if ( null !== $value || isset( $args['default'] ) ) { + + $settings[ $key ] = null === $value ? $args['default'] : $value; + } + } + + WPTG_Comments()->options()->set_data( $settings )->update_data(); + + return rest_ensure_response( $settings ); + } + + /** + * Retrieves the query params for the settings. + * + * @since 1.0.0 + * + * @param string $context The context for the values. + * @return array Query parameters for the settings. + */ + public static function get_settings_params( $context = 'edit' ) { + return [ + 'code' => [ + 'type' => 'string', + 'required' => ( 'edit' === $context ), + 'sanitize_callback' => [ __CLASS__, 'sanitize_param' ], + 'validate_callback' => [ __CLASS__, 'validate_param' ], + ], + 'attributes' => [ + 'type' => 'object', + 'additionalProperties' => true, + 'default' => [ 'async' => 'async' ], + 'sanitize_callback' => [ __CLASS__, 'sanitize_param' ], + 'validate_callback' => 'rest_validate_request_arg', + ], + 'post_types' => [ + 'type' => 'array', + 'items' => [ + 'type' => 'string', + ], + 'default' => [ 'post' ], + 'sanitize_callback' => [ __CLASS__, 'sanitize_param' ], + 'validate_callback' => 'rest_validate_request_arg', + ], + 'exclude' => [ + 'type' => 'string', + 'sanitize_callback' => [ __CLASS__, 'sanitize_param' ], + 'validate_callback' => 'rest_validate_request_arg', + ], + ]; + } + + /** + * Validate the params. + * + * @since 1.0.0 + * + * @param mixed $value Value of the param. + * @param WP_REST_Request $request WP REST API request. + * @param string $key Param key. + */ + public static function validate_param( $value, WP_REST_Request $request, $key ) { + switch ( $key ) { + case 'code': + $pattern = '/\A]+?><\/script>\Z/'; + break; + } + + return (bool) preg_match( $pattern, $value ); + } + + /** + * Sanitize the params before saving to DB. + * + * @since 1.0.0 + * + * @param mixed $value Value of the param. + * @param WP_REST_Request $request WP REST API request. + * @param string $key Param key. + */ + public static function sanitize_param( $value, WP_REST_Request $request, $key ) { + switch ( $key ) { + case 'code': + return trim( $value ); + case 'attributes': + case 'post_types': + return array_map( 'sanitize_text_field', $value ); + case 'exclude': + return implode( ',', array_filter( array_map( 'sanitize_text_field', explode( ',', $value ) ) ) ); + } + } +} diff --git a/plugins/wptelegram-comments/src/index.php b/plugins/wptelegram-comments/src/index.php new file mode 100644 index 00000000..e71af0ef --- /dev/null +++ b/plugins/wptelegram-comments/src/index.php @@ -0,0 +1 @@ +87b6)wm^$N&LCApAFete);S-GzIq zhpKAN+T0)qgmM50uE1fhNaPYJk#8du?m=8Yk#fr+;>-n!?^VyA*-+B>tFC(W-uHg$ zl|Ojm%I^fmck%lUepfyv#C71uKpwyTv=Cna{s#DM;P0pSF7PRQ{~dS>_%GlU;I&7D z_#*H+@JqlKfi2)R@KNB;fsX-y1!Q}_1%3|r7Ld=q3#H5Ec%i3Vif4LaYO?0}W6CGjRVW@XPq_fJ_5;4|omu zOW-$we*(S&d=Cg!;tHH#zK;R<+*80^;B(XU5(rW83n24+6Zm=HpMlKx0?2&do8sSq z9N!OttnWX-7l4mL_-SAV$o4Ye*MO(MuL9o$ZUg@aB;ZHD72rOMb%74}2JkOHPASKf z?L3Je>-iRb9A6%+j|cNcn0=nuR~~Ge`Ex8D$B(%qWS7P_@Wrv`!S(c6Kdb75efm0n z2(@@(x(=%I!L{PYij{_bS}H?HC~jwwPRYu+DDy<>!pS~K8=Wri`A=!fI3{ZcWuBkm zT(061S!lV^xMpRf6S>m7W|!Bi)wr~-7^-uUE+ZL@MiiMy$0XH2o)x7WN7~_3kr4jq zfl5mgIaO$}S@`{2ose9y>!PC_8D28dDo0XBLnxWrA1DI*84JIB6SVwtC_4A!yo7mdik8(;)G!)x~D0dUPoNfx zZcY(28Hy6WskC*bj5#8RXTLZl$Q0H|cQzs`4v;80O`(`MAa57LA!%nt&s(fMHzX{O@jL!dVdN-EN$zY~ zs2d^6tgn9tUx&je6o)#2xUZIYUOOlmiGwRh79`;KLq5!C43t*hzwWWGu4Ol1JT#57h1wmszl9Q5%N8hmvbaNB7<8D36q0lW`Uq zORjy`+X`M<$g$-CnV_Rl=Lld+zSLK)_TyliG@&k-Qn#Q)IoS-K51ZJjK7$Pu|0r@< zONL>so1+)x!B%00wk0)^ici~qVU6>PY5O_dZrA0ytV?XS+YL+`)wGFelcy_v%gE_@8?@bZ&3rtK0v)4&m}-q1aR; zCvWhbD$&2SJSjA1NowpmiTf}j%m}S*OgN=Ou`JEH^3<@%vTP{s@YO`0E(g_BE$5AW zdB;j#A2B(ZL{@H+RVi#oP?wO>;Bhp$&=v%6`C!}k_dA#R`!)?G5Axi}M4pXZH&=Ai{h(pc(ZfB==xW9cB{VSbZd4 zs^GvM%LZi8SDf@$^_Z0P1rUOUawbY`#5yl!dsYit%$$^Ws%{t=5}SzY{B!C)kU4z8JpeV#fw zm|U2u*5u+*@vJ=YC03!>L$C6g9ZIw%JTCGi(s-LebrHPk-pn=V)yk*JhFLOlgcpX3 VTMk(*4gWvKOzHCyM3L=K{1>O9g|z?x literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-de_DE.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-de_DE.po new file mode 100644 index 00000000..c6c1ed88 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-de_DE.po @@ -0,0 +1,285 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:52+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: de_DE\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Telegram Kommentare" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"Mit diesem Plugin kannst du Kommentare auf Beiträgen/Seiten deiner WordPress " +"Webseite mit dem Telegram Kommentarwidget hinzufügen." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Kommentare" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Code" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Ausschließen" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Beitragsarten" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Bitte lies die obigen Anweisungen." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Konfiguration" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Das Kommentarwidget wird auf den ausgewählten Beitragsarten angezeigt." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Um spezielle Beiträge auszuschließen, gib die Beitrags- oder Seiten-IDs, " +"durch Komma getrennt, ein." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Gehe zu %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Unter %1$s klicke auf %2$s oder %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "" +"Bitte gib deinen Seitennamen in das %1$s Feld und %2$s in das %3$s Feld ein." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Klicke auf %s und passe das Design nach deinen Wünschen an." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Klicke auf %1$s und %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Füge den kopierten Code in das nachstehende Feld ein." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Änderungen speichern" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Benutze das Telegram Kommentarwidget für deine WordPress Beiträge oder " +"Seiten." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Erhalte LIVE Support über Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "ANLEITUNG!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Bitte lies die obigen Anweisungen." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Gefällt dir %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Hilfe benötigt?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Folge %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Trete %s bei" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Behebe zuerst diese Fehler." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Änderungen erfolgreich gespeichert." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Ungültig %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s erforderlich." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Die Änderungen konnten nicht gespeichert werden." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Kommentare" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.mo new file mode 100644 index 0000000000000000000000000000000000000000..839163340ae5149db5387e25728fbad63733fe43 GIT binary patch literal 3142 zcmZ{m&yO6%6~~KU;$#yb5CVY&=^?xp7Vg=ZSscu4CM#i&mjVA6ykk2D#HOaZW~QL0 zs#8_H>oqrW%PElp2Z(}vh<^_s*^{v^@LiuBxv3 zz90Rb|9}6XHw3On@%t@)hwc#K7u*02;^*Ms!QX)Ys`&}{5T5@7o&diD4}nMS z6yk317tg3MHL1sUkh5U0c$QGy!kfOyQ3i>q+Tk(AJ34 zHqPhzRYl8wUGz*)j)xq19TXWk!zT6lW38ZmPemMFg{(N-5WTBuUgCf=HqY%2b`u*a z(Aoaw9*imq>jE1xRJocsITIT;SS)IY{`t+}#Y?A#{R`(e9}|7EEprV!y?Ea8!CstI zfe*RLws}R$IqP`9dDwJbsf?y7FV@9CdMIWGq_)r)PGK*rl=_HKxwB~^K@T2rW0k98W?_~V2Vl#4U*CF`h=6Gi>g9@`a&GVeFq zg{`xhY=}!H!}6Fd=^}TKGK3eG5iG2L;kVhaCwq)#G5A-k%LWdKSn1%``CPnzMTaT$ zXw2m0M4RI=fl_HmX6*9X4+t&`_ABu<_P}@c-BF{MVbETBZ6@C%>Pqw_LgDNya9q;Q zlFQ0@M5#kp2DiVkbWw4dCFlG^XUVhW#3w`Bp=k((@2sp$pu8M4AaP}<@HW*J40S#x zd&-vv7m|x=Tk|o=X}GsT?Pj}`G}}r0X==4QC)!UoPpmeV&LZ8CAwDyo%V1rHFk&Vp zyp#-;oZTXEG1VdEw|bjP=lbV*`^K~y%_V%70l`j&NVyILbv3LMxzuKj(y4S_h3=){ zndIdDIzD- zMlNSMvxM-vOghRfYPp<^wB=%4-PDsAPg&=Xu&AAgX+u0GuMvNZ_?W9tbGI(zw@i52 zr2^?~4GQ2jNx4KJmrg5_YKdx$Ln%W6lzim;!%R=?elbt={6iydd^S{&;e$loTt_Vp z&SoXrfXdNyW+SJt1BH@nyGGqHJOMijRAO#0m9AUIW6_At(oSru2|5}Vj}S(fHsj>#)mb_{n6|NpuvvRuBzn5;cHglJ zk9!$_t^uu~WRKK3k>%Cl(VdG%!~Z=oG=G0W(-g4e>1|6@lph literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.po new file mode 100644 index 00000000..520a9096 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-es_ES.po @@ -0,0 +1,287 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:52+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: es_ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Comentarios en Telegram" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"Con éste plugin puedes añadir comentarios a entradas/páginas de tu sitio " +"WordPress usando el widget de comentarios de Telegram." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Comments" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Código" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Excluir" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Tipos de contenido" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Por favor, lee las anteriores instrucciones." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Configuración" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "" +"El widget de comentarios será mostrado en los tipos de contenido " +"seleccionados." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Para excluir entradas específicas introduce el ID de la entrada o página " +"separado por comas." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Ir a %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "En %1$s haz clic en %2$s o en %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "" +"Introduce el nombre de tu sitio en el campo %1$s y %2$s en el campo %3$s." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Haz clic en %s y personaliza la apariencia si lo deseas." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Haz clic en %1$s y %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Pega el código copiado en el siguiente campo." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Guardar cambios" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Usa el widget de comentarios de Telegram para tus entradas y páginas de " +"WordPress." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Obtén soporte en directo en Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "¡INSTRUCCIONES!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Por favor, lee las anteriores instrucciones." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "¿Te gusta %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "¿Necesitas ayuda?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Seguir %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Únete a %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Vamos a corregir esos errores primero." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Cambios guardados correctamente." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "%s no válido" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s obligatorio." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "No se han podido guardar los cambios." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Comments" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.mo new file mode 100644 index 0000000000000000000000000000000000000000..ccb2a2b15ce764b9deee554a8ea42a32f2824653 GIT binary patch literal 3628 zcmZ`)TWlLe6dh=xVBYVyG!;$Ns9nc)8VU}kh&GJ^X&Vxkf&hihdSWlEcg@Z^50DV4 zk~Bj300h4v_(^IYZkj?LLj6YK6NF}CgoK3nK!|U?5a-UW9fyXMoHKjpanCvT&gPdp zw|~s=Jc8fD_-((2u};A=3KN=lv*-@Ea< z2S4IM`RF12^gtqm&ALvcl^&`MQs~^I563cCw&@`qq=_Etr|b17;z?fJiyy3JcgAr@ zYdz$RemW%g#hX>z7lkA{R5IP7klgaBPJz2#z{doa=0y9Pe&w=iSwhP3s^d&!pJQ8Z zaL?r(>0OeWZh?1XcFFd56t$`{@XGdEf(IqR%}Pa>zUf+m+v9xNtMWfx! z?PAq81KV@iVNcIH_8WqC$b+oU4TMi2pG!Ls+%?NMB+fr>3$Smp(BW>-(%~fQo3flL z5*+ay$D71ytX~9taNvbLh^kaPKOiA_;fSJdmRY|ScvzHV1II@4!zT{q2aX>b*~tdn z3DdEmQ?h40N-Wu+2q?)EX_JBr-}ih9_!63q2~prB;ZzQ?Aya}e8DM!88(|B2i6w<1 z?qdSfl5EHkCQkB&S*r(-k4v2nxmH60)WMe#k4Ag&Rng z*BPT1K4}+mg#b{K$gcoptwX>cIj>8z< zz`ZJMx3~qVliEv^!uMW>amGNwctQ9QRm$>{LsxG|3=3*A>1&Q5tzK%S%B} zk=d@UBA8dllAzc%S&^P)d%z&>N2AF+F?8G*785q5F%HAtEYGAeX(N>}G6#4%lkMr= zo9gLKB?i%MMjqEpI%eScS&oQXtimNDFU;~LimjEDyv~&{c6v+wJ96$@HZNawqafjK??DQRZ>s8+|VN90q3j<70M^c+uz=u0UT9 zr6Erg?0{#I`;!^WM6bp(X#R>Bl(IaTObj{r7C6Qc&o9d?cTrTl%G_hUR9_5pd)!U`qHa6Aa(%a8@m;bKx8Ztf^X(shYanSZpk+RYYn$JOx+|XSq77Rwx>t=HWaB zTP;@0YKez);X*hQp2C`1`!01})p7i4xX@UPZfv-qKkqy|jcw~^!r8{+`WYI~`E6@u z`y_bPiNgX{7u6EBu5tus)k?TPuUrr6oal4#Sp)rZbQ}b(*ReR9Q%j9S%0(&G&!{>J zuTWy_SPth^y|GBX=>6dwsD@Y6S`=4x^(n(}iR{9`kwQw`%%>B~(D4ZAuToQE#Aow7 z{WBrfn5(zT)|F6SP$u0f1`W$tQ>Svov{uvwk zosUe?Zp7CCi{pDoCc_5mf6%1v!i(;D^cB}PFHWOY;M3QNnyIm9(1id2Vun?eF4jpG z41A*Q)qR6N#2f?YpprM63*A&xUqPC_6wQwS{iD`r(!Xk2d({_!D&Ml@e|+2Q5w#Vu z`5MLi3heL+)24y;s#5q;OF?z)NE=;B8GcNUA#hjA0rec)hK^y#E1_2GHo8E;)GBy+NC8q$ja`U6oPMPBIH-;|bn!11<+h`!vsl8p6)He_| J15z7W{sk-L+`#|< literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.po new file mode 100644 index 00000000..7ffc6de1 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-fa_IR.po @@ -0,0 +1,277 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:53+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: fa_IR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "تلگرام کامنت" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"با استفاده از این افزونه شما قادر خواهید بود به پست ها یا پیج های سایت " +"وردپرسی خود توسط تلگرام، کامنت اضافه کنید." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +msgid "WP Telegram" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "کد" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "استثناء" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "پست تایپ" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "لطفا دستورالعمل فوق را مطالعه کنید." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "پیکربندی" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "ویجت کامنت در پست مورد نظر شما نمایش داده خواهد شد." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"برای مستثنی کردن یک پست خاص، آی-دی پیج یا پست را وارد و با کاما جدا کنید." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "برو به %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "تحت %1$s روی %2$s یا %3$s کلیک کنید." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "نام سایت خود را در فیلد %1$s و %2$s را در فیلد %3$s وارد کنید." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "روی %s کلیک کرده و ظاهر دلخواه خود را بسازید اگر مایلید." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "روی %1$s و %2$s ها کلیک کنید." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "کد کپی شده را در فیلد زیر جایگذاری (پیست) کنید." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "ذخیره تغییرات" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "از ویجت تلگرام کامنت در پست ها و صفحات وردپرس سایتتان استفاده کنید." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "پشتیبانی آنلاین بر روی تلگرام دریافت کنید" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "دستورالعمل ها!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "لطفا دستورالعمل فوق را مطالعه کنید." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "%s را می پسندید؟" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "کمک نیاز دارید؟" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "%s را دنبال کنید" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "به %s بپیوندید" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "ابتدا این خطاها را برطرف کنید۔" + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "تغییرات با موفقیت ذخیره شد." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "%s نامعتبر" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s لازم است." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "تغییرات قابل ذخیره نیست." diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.mo new file mode 100644 index 0000000000000000000000000000000000000000..108af4b3f952ad13a29bdbe10a1120cc87102962 GIT binary patch literal 2988 zcma)8O^h7H6|P_tlgTeX2_ZkIEW8K@_w39p1~Z#sk?plLtk)jAvtATMTGe#FovEGf zuBNJbW_P&dVkuIj7{N6X2Tq(gaEK3FvX*j3;sOc>PLU!cZirL9*WLSPe4w>GU-hf^ zs=oJAul7HWoqSi|`90p>;XU~SA}+-|qwG@cj|+Y2ar-=J#zie+r8|hVLhVuLA!7+yIV&Z1*o<7x-V`4shYeLU2ks zrkuwo@ct6-Z}4(_`FXsAfmg~9#$qI z{G?lYm|NwwNyTMT%*T36a?UM@<88S;wpK0t$S-3PGy;~o*n5^Ohc;@an*POrMl=|U+dpoztr#ExW0B;bkm87 zHT-nqHNzV_ag980vctYPl4Py1EU*qfT_=jp=Fa2&tPOKqOvPz-YcR*e;NkXZ2qF?M-e#ohg zhH!hTjf69(oYV4%V)VzL8W$uGGmW)LS|%blf?K9mp0lg^{r`Q$v#7 z%MQzB$TF`t*oCi2qUvHjji6psOL$N_C>aUEIV1}jaQr(y?9<+YT9Nz>W22r$A(lMY zocD$OhV~=y(U^(zp-#^g1r(}Os)$2g#R17>!fw7W;|Sch?vw^ag@JqSbUJ(hsf{9* zNQE`q2wc#Of?H%AvecFvz3&>-ZW5PSu7-(O6Be+T_p(vP7&rqbjY}H?=w=h$F1{YEJnewBy ztk-M37>ytft{9uRwoH*xe7eqyi=12xJI|$^PD3uqhQxHI)5Ne@4qF(ucsSQ=G+yZ} z$Y-A|$A9cJ*<#^vuGu^?`SQz{d;yc^&n_OaTA|%3O3q!=&bQ^}=HezTZtg6S3pbVb z7J`Ez6~mEF;!0W!>2R$zG{11vgO5Q2UOs4|>QxadD2MpEnn1(OjJGsMO;K{mHbN=! zmzZHL5nU}^W+{nTeni9NDBx_H?!A{9=~BI~u!5$VmOZpQkh*H#$0nTAGP62XL*xkd)C30} znmwx{o8SAmVgY?haPsYhk3Xw%*oGFt8N-V{qKgxS%1q4O?IrOi1yUKiJx0f7!Wh8$ zl9|Lt2AAh5LXluiv-dac)i$*AEH6TpDoo$PJ)q=`!8W?ISmO+FL`{)CanR{j3^!|K zH7>y8t-8qU-fiMEjMWT&!C@1r0rN=^;LJ>PqQD7v>;ye_MIkW*4SM5vI|r#)L*LTg z9WIzsjn2uu%16<+S*L2;INnl^U@L3{=H%>&IlVG z_;$ZXGbJbL-g_jEcX3>6D1iOKsEakpj>!nV`mssQq0sMrOjsD%8RmPpIdza1VdMV< SzQ>}_XLbbR2hiK^=l=(9)=QcI literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.po new file mode 100644 index 00000000..c0d096d9 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-hr.po @@ -0,0 +1,283 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:53+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Telegram Komentari" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"S ovim dodatkom, možete omogućiti komentare na vaše WordPress postove i " +"stranice koristeći Telegram Comments Widget." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Komentari" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Kod" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Izostavi" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Vrsta Objave" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Molim pročitajte upute iznad." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Konfiguracija" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Comments widget biti će prikazan na odabranim tipovima postova." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Kako bi isključili određene postove, unesite post ili page ID te ih odvojite " +"zarezom." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Idi na %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Ispod %1$s kliknite na %2$s ili %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Unesite naziv stranice u %1$s polje i %2$s u %3$s polje." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Kliknite na %s i prilagodite izgled ukoliko zelite." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Kliknite na %1$s i %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Zaljepite kopirani kod u polje ispod." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Spremi promjene" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Koristite Telegram Comments widget za vaše WordPress postove i stranice." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Reference" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "UPUTE!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Molim pročitajte upute iznad." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Sviđa ti se %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Trebate Pomoć?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Prati %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Pridruži se %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Idemo prvo popraviti greške." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Promjene su uspješno snimljene." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Neispravan %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s potrebno." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Promjene ne mogu biti spremljene." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Komentari" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-id_ID.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-id_ID.mo new file mode 100644 index 0000000000000000000000000000000000000000..eeb9b79b89eaf97470251a9825de6e00b1f7ffe2 GIT binary patch literal 3045 zcmZvd%WoS+9LEPJFY|uCVJe!6s@;w4P@oPbv~?Ox9yN{IfDKXo%cC-3-~Qa>%IqT;13|p{|TgdSF8SiK+<;u4tpAmK$`y=NIKsF?*SFq2Hyi$ z!SBF>;LSHOwg4Uh4XD5owEqU)iSI>-c?#@4uv_oXA#s=xnn0 z5xk_2G{a@rJP+fGG|@wvZwjq4Pe}8Fc;RYxZ`BWp(}!{;JTsOX`HojcrZGD`5_%{t zPja87T<4AtB)8)7-m&n>txpnZ?WWJNZLG^wGUmDFGmS%*3!U>2>0VfbQALp(M~3ueCWl5$ z*i!CtOo~}|ZM}c){ONx8?ArQ4*439qreLRKujX{HWh>IrAy>#YE4ef#H`HM)Y+92t zoKwg|ZK@>9vBx-0kS2_TMY-XH7)svlSZr4y%Cz5L8@5g+B4+1xis>O+l4EZu~x)^+kP?-D@92a%d=z=sBQEKsvz5NSn=Om?B zv}%VcjZXQYjrw_ukDM!PYj$=B<$e%D;_Oyo^F-yKtMW10QC{nvjn2u-ijIjoaBqt@ z>&-?~Z${1Md864nK6kW!e6C(wLAphKTr-;qmzx$xj~;q>De6lxxklo2sKr&f(e2b$ zyQ_=4#x&x34foO^*ij!T*WylIakE7xl%D6wNEj?^=L_IiM$|5y&Ik-9WQZHk)WRsX5cA*I#PS@xzD9_KWQXt(e;#Yc%!@o;ZQQ zXEAvE$o#IVWx2hDtg|c1x)$HqnBS1|8&~F~O*Vvc1|8F;49$_7WL0ly%H6%zQU8)r z4>m@1SowbgRk=!Og0S$ft+9?Oq{;jk$xM~0CygHnly2@+D#kn&@ET8%8k0ikz2gIE zM#8FW&)_m@YIzY;+Afssvd>~8joWLzP;`_NlR{-^T*4=IKrEHUK+Kk@U@z|!Y^&Hw zoeGYsvki?38W-5AuzpOtpi&E}+1~Ons}PuKys+1bz%`!shkCFq6OW3EEm(K#9qr0G zWGHQ#`mxtTG*(WoEv=tlTY|jlyon;mhmYgA9Lrsx0B`lr%#zzvfO8B;;u#w{a1L$uyw zO|@IhUO`bTusRV?LUny?70DJ(Af~TMjnXw%MonPxdWa;S1{%($nl8+)k!2CW(ba$m zeo5)oB3qMGddn4&hEx_U=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Komentar Telegram" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"Dengan plugin ini, Anda dapat menambahkan komentar pada tulisan/laman pada " +"situs web WordPress menggunakan Widget Komentar Telegram." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "Komentar Telegram WP" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Kode" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Kecualikan" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Jenis kiriman" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Harap baca instruksi di atas." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Konfigurasi" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Widget komentar akan ditampilkan pada jenis kiriman yang dipilih." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Untuk mengecualikan kiriman tertentu, masukkan ID tulisan atau laman, " +"pisahkan dengan koma." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Buka %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Klik %2$s atau %3$s pada %1$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Masukkan nama situs Anda pada ruas %1$s dan %2$s pada ruas %3$s." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Klik %s dan sesuaikan tampilan jika diinginkan." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Klik %1$s dan %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Tempelkan kode yang disalin pada ruas berikut." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Simpan Perubahan" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Gunakan widget Komentar Telegram untuk tulisan atau laman WordPress Anda." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Dapatkan dukungan LANGSUNG di Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "INSTRUKSI!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Harap baca instruksi di atas." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Anda menyukai %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Perlu bantuan?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Ikuti %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Bergabung %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Mari pebaiki galat berikut terlebih dahulu." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Perubahan berhasil disimpan." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "%s invalid" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "Diperlukan %s." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Perubahan tidak dapat disimpan." + +#~ msgid "WP Telegram Comments" +#~ msgstr "Komentar Telegram WP" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-it_IT.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-it_IT.mo new file mode 100644 index 0000000000000000000000000000000000000000..2f5e86e9cfcf880bdd929a269363b401d8ac24c1 GIT binary patch literal 3086 zcmZ`*OKclO7#?V$V4f|nmWT8gnm$C=v7Lst4yIDmBr-Iusoexsh-kb!Sr1+BY-eWU zrbtL|L?D3#;)Xz6xb_B>dg_Hc5|<**98hma9QppW;}}{-S%16p{Qk#$e}3Py^DBY& z5}p_F?7UBiBfvj_+&;fwh)0260AB!pGr}9d=kWb2a29w6xD$9_hY*hej{u(l9tYNe zOTb;gkAV*ZKLPT2UjiQjUI+5J8^99qXCTl21<3PmkNW=xGQS-->=j@D7uK+P5-UChnV<7&-XZU#p_%)F2{eJX)9mp}b3FQ5511rEk zfQNzmU?lT94SWjN2C|(oa2~h`yac=nWIOlbkVRk}_$lxsAcvH>aU7q<^9-Kn@vwin z@xI)cH{4wCh1-h8T$%SiJZv{}gvXna0AtG<6J4) zlq0LIuCK)MJ&26n@fm9p_ehZBlW@6yu4$ ztZ2%e5(}wUmb)xD?G>f6k4;ABuWJSNTP%w18PF=a%VObbnB+KM(Ikl(U^lU(Je_T> zEWoHNGuE>q9hIoq%Dz}K-e6K$G|#m=7cS0sn&;28_lst_ArlQdop{sm!A_i2o)5Xo zwmC)0T4TAxI@okhsfcFMj;ei2GG3e_f_hh=oBXoKWLz%7-kQ2k`yuSnL)~S zGY1FTLl0uvc<-|47*a#e4d-Mk)ayDd=D4GT6O=7Ribcj!CSyg-GY;Ejh%)cj-Gr_E zzATH2X@u!TwuIx{LCO#oP9a#B0mJXIVT<-UrWL_oH8yHlB;t?5Z)udeS(Dmx7Lx z{eMv$57kNgwPvTZ++1GRHl|vxlyEOSf*o{_a&_|Rs-Mmhsna}cgT*JulGdPXp&!q3wsa!6#5@d`5k-2SFZ>h}zvd*2=&ev&eZEj7?tzDf{E?kq|TXc+HRq@*M z{bbZzysGWJ+R(qS*Mf~f1ygl&?X9HzpEjFsn^i$ zl#|-w#$thG1y44hqfpj~S))!|1#6Y}#aieIOL-_Eg~Qtkxg9I{sN0dE4Eb$RDB!hg zl9EHxW!S>ts#9VpQcmM~^LdDPIHBd&kgQ5{G-X;s^;yZADJW_eYSIaqL&hVOkk7H1 z#*QgIU|R+a=F&2xGuc~+#e!o^*P^ZBT(cIR_efGU9h;6+-E3+6_(F;msYzlw9LU;! z3DVx&FV4Yzg}AfsL#db?yo&dEc2yi}x{@o0u0rBrjMc1ZZDpaqQs>^VSt06+WJ^3Fg}Foh!=}>S`j+~j!B-K!(&R@66hh9mfR8WIrv=SMa&!4)*N!O= z!e3MaeH3+UBA&xqKyji`30RqRiqsm`0~jG`L)+LS>^%0xc0m}WT2T?k1)=cfsBqn7 zAg3fKA#vbHu3HdxJ`ee%X=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Telegram Comments" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"Con questo plugin, è possibile aggiungere I commenti ai messaggi/pagine sul " +"tuo sito web WordPress utilizzando il widget Telegram Comments." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Comments" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Codice" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Escludi" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Tipi di messaggi" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Si prega di leggere le istruzioni sopra." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Configurazione" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Il widget dei commenti sarà mostrato sui tipi di post selezionati." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Per escludere i messaggi specifici, inserisci il post o gli ID pagina " +"separati da virgola." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Vai a %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Sotto %1$s clicca su %2$s o %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Inserisci il nome del tuo sito nel campo %1$s e %2$s nel campo %3$s." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Clicca su %s e personalizza l'aspetto se lo desideri." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Clicca su %1$s e %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Incolla il codice copiato nel campo sottostante." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Salva i cambiamenti" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "Usa il widget Telegram Comments per i tuoi post o pagine di WordPress." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Ottenere il supporto LIVE su Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "ISTRUZIONI!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Si prega di leggere le istruzioni sopra." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Ti piace %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Serve aiuto?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Segui %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Unisciti %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Correggi questi errori prima." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Cambiamenti salvati correttamente." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Non valido %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s obbligatorio." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "I cambiamenti non posso essere salvati." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Comments" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-js-translations.php b/plugins/wptelegram-comments/src/languages/wptelegram-comments-js-translations.php new file mode 100644 index 00000000..f45f41d0 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-js-translations.php @@ -0,0 +1,166 @@ +G!G6X+0Y3}=8f<}o0k47+h)@9k2F`+yBkJG5S3xPM zXex0(!Ye#J$t(HEBRu3GMF*K}osi8wQX4`zpWuBzuV{^AyPn4xiT3hHKZ#EANS}O= zSM)+^s}Er7CMb_+WuJbdBK^&_AL&}oInwZgx;CmBwwpB-gt3~^%6MmYuGyh7?P^sU zGu>`B=h)Zut1qfBQ2m8{MtMO^^%wV5OPUoDFbJb>>0LQ{+Gn~bnb6m%2Z1jZ@l4`ZWD3(Mjx~c1tH{%=+;}D~qGkS8O za_aPv%INbaC-yp{!C9~Alc#aM97jV9321L#);FopUOo(wTCZ zO-on(X}@Z1%zi}#9oZGTDU4Lht7|oS)Znf~mBruG9J$WScsb{EP{Z7IOSRWKw2We7 zKgGg=#2?6Ei}o~Tw)khls5Tzah#3#rE^*m^#*Z8D@mXoM>wd7`Hc-_IlvfkUyE;%@ zA#4WiHc{X{zq5MEb{O2-#t-TbA$7)TNhzZ68wlr)*4!6#WT;X}of&^{L*FSaZRVaZ zb-(5wZr6=l2}`OG$1PJD9IV5glB_T;J4 zeJ4gwjBF=U$mRPumode5E3{lm#rj-4*lK!yFr=ytFETnVpROEppV_vP$kRGc=8CLjL-#Pv-}2%{N#$~V<4x{@rh6=mW=u&1 z6qTVVKQ$!v<+J=`P%h`yu*xfz%jE)}h3vD)XHh=;3;FzWkcaNiU8gCVHRRem3HnW_Q+p z>TO>W+<(=^I61m`vV7P=_qwWyfoIUy^f}zwPbQnm&2%xjlPsn4$!hXex{z!nn*&aA zow;>pHtgF;7nOV}<~EaC>BV$jvGH;`pDw8MLb91&O3x=tnRR+O_ptpBnkoETNbV)8 z=_?YIU9aQgHZeNFCOgjK`WLU)Cx|3YRe=tSw`-(&dV~brETq z$gePeE7=rbmTdSX=67WSZvqmgdrc+Rv0Y>0O8T-mOc$KwP3xJuAThrSmf~9|W(}ki zKc+}mlV2pi%Dk<>Wfh{gleP4s!b}FM$(`QKAuh5xkpz|2@M}x;dU7LqBl$VLUQ2$7 z*Xw(w6q4K~0#hWhx22~jP`SqZO>#rT9=&UJoaMVJsY_kYiyqWTh79Zu1WkXC5!ghk z4xZMM4m{qld~c=~*_i2URifk4@1+Z(xFv#)8>L_+%jNw|=Xny=YM3D@RSTx!-tIk`uM0?AS<0 zt-(atY}m|uywb(=l4Xv4c1$^LS&K?x?W|LJ()z8iyytR8|?pRHIQ@u2P!@ppa1{> literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-ru_RU.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-ru_RU.po new file mode 100644 index 00000000..0f05d395 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-ru_RU.po @@ -0,0 +1,283 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:54+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: ru_RU\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Комментарии Telegram" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"С помощью этого плагина вы можете добавлять комментарии к записям/страницам " +"на вашем сайте на WordPress (используя виджет Telegram Comments)." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Comments" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Код" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Исключить" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Типы записей" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Пожалуйста, прочтите инструкции выше." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Поздравляем" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Виджет комментариев будет показан в записях выбранного типа." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Чтобы исключить конкретные записи, введите ID записи или страницы через " +"запятую." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Перейти к %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Под %1$s нажмите на %2$s или %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Введите имя вашего сайта в %1$s и %2$s поля %3$s." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Нажмите %s и при желании настройте внешний вид." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Нажмите %1$s и %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Вставьте скопированный код в поле ниже." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Сохранить изменения" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Используйте виджет Telegram Comments в ваших записях или страницах WordPress." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Получите ЖИВУЮ поддержку через Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "ИНСТРУКЦИИ!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Пожалуйста, прочтите инструкции выше." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Вам нравится %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Требуется помощь?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Читать %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Добавить %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Давайте сперва исправим эти ошибки." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Изменения сохранены успешно." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Недопустимое %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s (обязательно)" + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Изменения не могут быть сохранены." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Comments" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-tr_TR.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-tr_TR.mo new file mode 100644 index 0000000000000000000000000000000000000000..b8c90299e85bd9b127325ec3a17dfabd12230863 GIT binary patch literal 3159 zcmZveOKc=Z8OIBDVPSX#5(sbjR;)K!vE81T-6hGG!P*apA&||5rWs>}Jz)&#$`btE&I^ z=xYD#>9em3T;IU`b=+q^BE%)|eUPu;d{l@}gTDp82EH-lyWp4b{CDsg_#f~rc;So? zp8+p{Pk}Fh9dH#q2mTWLB=~EP_xm0A3Gfi)dGCS^@I8?2{|2(%KW6>^16ki0Z1!z1 z0NMT?$U1)veje0d7yKEx0lovC2hV*>h-L5+Xh02)p#7iVr|`T2G2aC5fzN>jcme!9 zxB~tKgamO0PJ9+T2R;iv3$mX9$a+Q~uV=xF;4eV-=S`4x{&B`XgZLBg;fKJ#g5LuF z3%0>$u-Nn9ZII)WgB zO{^+M>uay9z^S6hjblf8Dp5ltQ?Z)697ds7ySv@nx_`5`_VV5B^I|RAm5GL*R{SvM zjjdQ$jyHM8zF9@enA~uOvGD1xQZbEGQY?#2X`z?{5aoqNcLaY~C3n@@`wG%Rv6(1| zm5h?HAJmz3ri?fuh-W|FRj|peBUcs5iftr{W+@aW4$#d!O;zTs==mM%2inu|5N_}3 zB=I>O<$D?X%^ECxj~s**r)!6zmy@a^SKAaS(gPiN8+)0sgED@^Ps$Aya;RwSmc?=f zvdruCEBKnGG8Ff-80NlOqSM+z$q*(kAX%`0<4^c-B6|QcpZo{8i8l=jvDU%Ud0)(b zpxp?1G)9tgsI$wyfFhZZj5*}9I3T$!*e?2M9Dxt4yQliT!l1phIvak7s0TilNQKE? zL*Rn7ICw=Fi!62M!RC__8e59XEZDF^9S1kcp$&R@hepm7wzIf6gz~Z5%N8hmwPpdgvC5MCxpbqLDOK zx$gbm?cl|^9q&9)CRoW(=LlejUhHev_))N`GKIQeNt?NfwWD@;HEd&~ehhA)_zUSq z9SXz7W`eUI32x^mwH?ZkR6N@5cb7Q7Xm+2^y4@x%Q@4l5rJaXM%0@fV zA!srP+c^KC(I$Khn(*?&24=@q%m&gTzP2H7W)GE7<3xwzmYN>u z;{%O{ae{YhEUOs7OjL^BCx`p;_&}QJVU@^JQ?~Q3B90F}w`ubB^Z@l{bcS}ig=*vRi^i8IC`zlG)@qyD=F%)<5SiCBW z>0yE+dU|M5$qSG23N-?5G zPFFIjU7}rSmJyGlV);0l#(7*4XJ~pbJ&d8-`z5L3a3O$*7G{QGeRAXmkY1Hz-p^ZN zZ=Fh43&_W1Rl;yXS@|0EbivvDV6AAn!^MIK%?=lOH8*AIR}d%7*^&Dkv~%uJSQ)36 z&u>j`a%6m+-~)zEE&v!rYK&Be;s*RTi9R)FO9aU$#+5FWV?vJjXyzlB6I$U%o8jaL z^+K|OYYBpOe1QK!ssRdCr*)O<46D|OuK(jm5SlEObwT)bd{xY{{CE}5zZsRUYws^t zSS`SBHShBZpFG3oVZlrq=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Telegram Yorumları" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"Bu eklenti ile, Telegram Yorumlar Widget kullanarak WordPress web sitesinde " +"mesaj / sayfalara yorum ekleyebilirsiniz." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Yorumlar" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Kod" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Hariç Tut" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Mesaj Tipleri" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Lütfen yukarıdaki talimatları okuyun." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Yapılandırma" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Yorumlar widget'ı seçilen gönderi türlerinde gösterilecektir." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Belirli gönderileri hariç tutmak için, posta veya virgülle ayrılmış sayfa " +"kimliklerini girin." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "%s Git." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "%1$s altında %2$s veya %3$s üzerine tıklayın." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Site adınızı %1$s alanına ve %2$s %3$s alanına girin." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "%s seçeneğine tıklayın ve isterseniz görünümü özelleştirin." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "%1$s ve %2$s öğelerine tıklayın." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Kopyalanan kodu aşağıdaki alana yapıştırın." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Değişiklikleri Kaydet" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"WordPress yayınlarınız veya sayfalarınız için Telegram Comments widget'ını " +"kullanın." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Telegram üzerinden CANLI destek alın" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "TALİMATLAR!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Lütfen yukarıdaki talimatları okuyun." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "%s hoşunuza gitti mi?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Yardıma mı ihtiyacınız var?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Takip Et %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Katıl %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Şimdi bu hataları düzeltelim." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Değişiklikler başarıyla kaydedildi." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Geçersiz %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s gerekli." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Değişiklikler kaydedilemedi." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Yorumlar" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.mo b/plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.mo new file mode 100644 index 0000000000000000000000000000000000000000..477401f9616ce75ad3d94b2714876d1bc0a7fa8e GIT binary patch literal 3797 zcma);U2Ggz6~_k>D45Td?@!&7I3*&p-rXd$S+hh+;slo@b(2kl_^37Bz22Q`~fKO=D>G>^Pu>xfCJzkL9zc6D0YAC&c6i; zza0eo9O!~#|12mxzX?7H`d|_KE_e!D26usvyu)!0gL}aU^g#{xzk!n95y%_@p9fv= zC*Tv{AHZ*b_rZ69Pm{#Q!Dqoe;05q`@CNu8_#g1I;10+Qfscct*BS65;05qQ;7s>> z4m`^D@4?5x``}l=N8dv%@av%X{~8pYYoP4^7jPPU3tR*vM38zsftWu8zXkpa{3j?S z6-~we!@R=dlf0s@JiEA|;QD$?I>`H`+b5S7nHT~C)IS= zQd3?K;}upkKf$D5ZAD(}hkMqE>_Eurm_GI+CeK89&x4@EUB=jX&vY*!Ni2 z>HW~M(-~*va=G3j!11tN52x78IiX{9a`d?ol4>@?D3(M@x~{8{*KkgRafngI89jZr zbmrXA(&#g%&+c+YgG*lBCr{%%9ZF#1oYb)dxh%OEt#lNHkxWE}oK9<9Q8is}9(Kk& z17i`O95#KX%j7F8Wh&)9p`n&>#_HN*r$~DhyXXfdj#_0=1U)ChOB$Qd#44U{YU7-x zP^w!(rcUS5z`Mf}Qyw#Kz^Dv-Q|gCX~F46$Z^?~GFll}?pQ zZJN65Px@tRWA-T`=*X^Er!Z1Yud3DPF~fFEsx13WOp|M);bok2K?QT$E#-di&@u|g zL5hV1i9e7-kM<;Hw)p46s4^DOh$#+!_v0FTd{*kMsvqpL4OI35H%(z^s0#DeLEZeQLu_!cOYQ9SLZ1)GMf` zCj5BdYwighXqrO!jD@=5$10yWkjb->e!55K{H7Pz3M!Ks7^`y;)ZOD@)G!4VP*FZj z@r%P!T!zKZ2gPDm9adSzazAJgiN5+>7IgiT+UAVJ&XdyR&wvH}*Qq z%ZDv=@2ZLzcm{pVfWw8ItS9rl3;&q;Y3F+KX0jq5$$G{~UQJdzHOU$-U0a&Wmg-aekh( zWh-X!PIq5R+UbF2fswuc|EHZ%){5QQ$zAq(kv(RUWhNoLklaabC3i_}QSq~4XP}Sm zZEWYn3JyObx5X6JI^QGhThN@r;2M;!JIQY))q7&Zi?cX(Ug})wT$c^o$tsujVJCTo zkELXBQyS>A(3!PHB)krnbw#Fa;b-U5Jni0hA>2mmD?yQO5dP^7NyUnp{`)v-Y444Kp~aBmkK+tNlOj}?w2&B=$yCCRavmfY&O4+qy*%QVkU>c z+S9mJa(hl8wVbwzEkU}%dF0HaKgE|$*~S@Neuu@pbn~`Gl%AIQT|;<|4$MhC_Gn`R0B~tZB)r#JxZ#_^ip4x z&a5c>t!Qsa)`KoBz>+X za{d0+>`1Epklbcf|IZOJc$Fi8vKbgH&6N#Ue%$(4Jzs(zo%G ogT1vO)0^i3kk1>d<^VgLXD literal 0 HcmV?d00001 diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.po b/plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.po new file mode 100644 index 00000000..fbb88572 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments-uk.po @@ -0,0 +1,284 @@ +# Copyright (C) 2019 WP Telegram +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"PO-Revision-Date: 2021-02-27 12:54+0530\n" +"Last-Translator: \n" +"Language-Team: WP Telegram\n" +"Language: uk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.2\n" +"X-Poedit-Basepath: ..\n" +"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " +"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "Коментарі з Telegram" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" +"З цим плагіном ви можете додавати коментарі до записів та сторінок на вашому " +"WordPress сайті використовуючи віджет Коментарі з Telegram." + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:100 +msgid "Current version: %s" +msgstr "" + +#. translators: %s: Version number +#: includes/Requirements.php:108 +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +#, fuzzy +msgid "WP Telegram" +msgstr "WP Telegram Comments" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "Код" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "Виключити" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "Типи записів" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "Будь ласка, прочитайте інструкцію нижче." + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "Конфігурація" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "Віджет з коментарями буде відображений на вибраному типі записів." + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by comma." +msgstr "" +"Щоб виключити специфічні записи введіть ідентифікатори постів або сторінок " +"розділені через кому." + +#. translators: 1 URL +#: languages/wptelegram-comments-js-translations.php:28 +msgid "Goto %s." +msgstr "Перейти до %s." + +#. translators: 1 menu name, 2, 3 buttons +#: languages/wptelegram-comments-js-translations.php:32 +msgid "Under %1$s click on %2$s or %3$s." +msgstr "Під %1$s натисніть на %2$s або %3$s." + +#. translators: 1 field name, 2 website address, 3 field name +#: languages/wptelegram-comments-js-translations.php:36 +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "Введіть назву вашого сайту в %1$s поле та %2$s в %3$s поле." + +#. translators: 1 button name +#: languages/wptelegram-comments-js-translations.php:40 +msgid "Click on %s and customize the appearance if you want." +msgstr "Натисніть на %s та налаштуйте вигляд як ви бажаєте." + +#. translators: 1, 2 button names +#: languages/wptelegram-comments-js-translations.php:44 +msgid "Click on %1$s and %2$s." +msgstr "Натисніть на %1$s та %2$s." + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "Вставити зкопійований код в поле нижче." + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "Зберегти зміни" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" +"Використовуйте віджет Коментарі з Telegram для ваших постів та сторінок у " +"WordPress." + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "Отримати підтримку в Telegram" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "ІНСТРУКЦІЇ!" + +#: languages/wptelegram-comments-js-translations.php:69 +#, fuzzy +msgid "Click here for instructions." +msgstr "Будь ласка, прочитайте інструкцію нижче." + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "Чи подобається вам %s?" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "Потрібна допомога?" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "Підписатися на %s" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "Приєднати %s" + +#. translators: 1, 2 Menu names +#: languages/wptelegram-comments-js-translations.php:97 +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in block " +"editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "Давайте виправимо спершу ці помилки." + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "Зміни збережені успішно." + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "Невірний %s" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "%s обов’язково." + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "Зміни не можуть бути збережені." + +#~ msgid "WP Telegram Comments" +#~ msgstr "WP Telegram Comments" diff --git a/plugins/wptelegram-comments/src/languages/wptelegram-comments.pot b/plugins/wptelegram-comments/src/languages/wptelegram-comments.pot new file mode 100644 index 00000000..d84572b0 --- /dev/null +++ b/plugins/wptelegram-comments/src/languages/wptelegram-comments.pot @@ -0,0 +1,278 @@ +# Copyright (C) 2023 WP Socio +# This file is distributed under the GPL-2.0+. +msgid "" +msgstr "" +"Project-Id-Version: WP Telegram Comments 1.1.9\n" +"Report-Msgid-Bugs-To: https://github.com/wpsocio/wptelegram-comments\n" +"POT-Creation-Date: 2023-12-07 11:56:56+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2023-12-7 11:560\n" +"Last-Translator: WP Telegram Comments\n" +"Language-Team: WP Telegram Comments\n" +"Language: en_US\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n\n" +"X-Poedit-Country: United States\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-KeywordsList: __;_e;_x;esc_attr__;esc_attr_e;esc_html__;esc_html_e\n" +"X-Poedit-Basepath: ..\n" +"X-Poedit-SearchPath-0: .\n" +"X-Poedit-Bookmarks: \n" +"X-Textdomain-Support: yes\n" +"X-Generator: node-wp-i18n\n" +"X-Poedit-SearchPathExcluded-0: assets\n" + +#: admin/Admin.php:47 +msgid "Telegram Comments" +msgstr "" + +#: includes/AssetManager.php:154 +msgid "" +"With this plugin, you can add comments to posts/pages on your WordPress " +"website by using Telegram Comments Widget." +msgstr "" + +#: includes/Requirements.php:85 +msgid "This plugin is not compatible with your website configuration." +msgstr "" + +#: includes/Requirements.php:87 +msgid "Missing requirements" +msgstr "" + +#: includes/Requirements.php:100 +#. translators: %s: Version number +msgid "Current version: %s" +msgstr "" + +#: includes/Requirements.php:108 +#. translators: %s: Version number +msgid "Minimum required version: %s" +msgstr "" + +#: includes/Requirements.php:120 +msgid "" +"Please contact your hosting provider to ensure the above requirements are " +"met." +msgstr "" + +#: includes/Utils.php:98 includes/Utils.php:99 +msgid "WP Telegram" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:5 +msgid "Code" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:8 +msgid "Exclude" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:11 +msgid "Post types" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:15 +msgid "Please read the instructions above." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:18 +msgid "Configuration" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:21 +msgid "The comments widget will be shown on the selected post types." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:24 +msgid "" +"To exclude the specific posts, enter the post or page IDs separated by " +"comma." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:28 +#. translators: 1 URL +msgid "Goto %s." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:32 +#. translators: 1 menu name, 2, 3 buttons +msgid "Under %1$s click on %2$s or %3$s." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:36 +#. translators: 1 field name, 2 website address, 3 field name +msgid "Enter your site name in %1$s field and %2$s in %3$s field." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:40 +#. translators: 1 button name +msgid "Click on %s and customize the appearance if you want." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:44 +#. translators: 1, 2 button names +msgid "Click on %1$s and %2$s." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:47 +msgid "Paste the copied code in the field below." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:51 +msgid "Save Changes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:54 +msgid "Use Telegram Comments widget for your WordPress posts or pages." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:57 +msgid "Get LIVE support on Telegram" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:60 +msgid "No" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:63 +msgid "Yes" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:66 +msgid "INSTRUCTIONS!" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:69 +msgid "Click here for instructions." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:72 +msgid "Do you like %s?" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:75 +msgid "Write a review" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:78 +msgid "Need help?" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:81 +msgid "Members Count:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:84 +msgid "Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:87 +msgid "Test Result:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:90 +msgid "Follow %s" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:93 +msgid "Join %s" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:97 +#. translators: 1, 2 Menu names +msgid "Goto %1$s and click/drag %2$s and place it where you want it to be." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:100 +msgid "Appearance" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:103 +msgid "Widgets" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:106 +msgid "" +"Alternately, you can use the below shortcode or the block available in " +"block editor." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:109 +msgid "Inside page or post content:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:112 +msgid "Inside the theme templates" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:115 +msgid "or" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:118 +msgid "Widget Info" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:122 +msgid "Please wait…" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:125 +msgid "Test Token" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:128 +msgid "Send Test" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:131 +msgid "Add" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:134 +msgid "Something went wrong" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:137 +msgid "Could not connect" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:140 +msgid "Error:" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:143 +msgid "" +"A message will be sent to the Channel/Group/Chat. You can modify the text " +"below" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:146 +msgid "This is a test message" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:149 +msgid "Success" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:152 +msgid "Lets fix these errors first." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:155 +msgid "Changes saved successfully." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:158 +msgid "Invalid %s" +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:161 +msgid "%s required." +msgstr "" + +#: languages/wptelegram-comments-js-translations.php:164 +msgid "Changes could not be saved." +msgstr "" \ No newline at end of file diff --git a/plugins/wptelegram-comments/src/shared/Shared.php b/plugins/wptelegram-comments/src/shared/Shared.php new file mode 100644 index 00000000..0cddfcdc --- /dev/null +++ b/plugins/wptelegram-comments/src/shared/Shared.php @@ -0,0 +1,134 @@ +plugin()->options()->get( 'attributes' ); + + $attributes_array['async'] = 'async'; + $attributes_array['data-page-id'] = $post->ID; + + foreach ( $attributes_array as $key => $value ) { + $attributes .= $value ? $key . '="' . esc_attr( $value ) . '" ' : $key; + } + + return $attributes; + } + + /** + * Set the comments Template. + * + * @since 1.0.0 + * @param string $template The path to the template file. + */ + public function set_comments_template( $template ) { + + global $post; + + if ( $this->rules_apply( $post ) ) { + + $overridden_template = locate_template( 'wptelegram-comments/comments.php' ); + + if ( $overridden_template ) { + /** + * The value returned by locate_template() is a path to file. + * if either the child theme or the parent theme have overridden the template. + */ + if ( Utils::is_valid_template( $overridden_template ) ) { + $template = $overridden_template; + } + } else { + /* + * If neither the child nor parent theme have overridden the template, + * we load the template from the 'partials' sub-directory of the directory this file is in. + */ + $template = $this->plugin()->dir( '/shared/partials/comments.php' ); + } + } + + return $template; + } + + /** + * Check if the rules apply to the post. + * + * @since 1.0.0 + * @param \WP_Post $post The current post. + * @return bool + */ + private function rules_apply( $post ) { + + if ( + ! $post + || ! is_object( $post ) + || ! comments_open( $post ) + || ! is_singular() + || ! post_type_supports( $post->post_type, 'comments' ) + ) { + $rules_apply = false; + } else { + // check if the rules apply to the post. + $rules_apply = $this->check_for_rules( $post ); + } + + return (bool) apply_filters( 'wptelegram_comments_post_rules_apply', $rules_apply, $post ); + } + + /** + * Check if the rules apply to the post. + * + * @since 1.0.0 + * @param \WP_Post $post The current post. + * @return bool + */ + private function check_for_rules( $post ) { + + $options = $this->plugin()->options(); + + $post_types = $options->get( 'post_types', [] ); + + if ( ! in_array( $post->post_type, $post_types, true ) ) { + return false; + } + + $excluded = array_map( 'intval', explode( ',', $options->get( 'exclude', '' ) ) ); + + if ( in_array( $post->ID, $excluded, true ) ) { + return false; + } + + return true; + } +} diff --git a/plugins/wptelegram-comments/src/shared/index.php b/plugins/wptelegram-comments/src/shared/index.php new file mode 100644 index 00000000..e71af0ef --- /dev/null +++ b/plugins/wptelegram-comments/src/shared/index.php @@ -0,0 +1 @@ + +
+ + + + + + + +
diff --git a/plugins/wptelegram-comments/src/uninstall.php b/plugins/wptelegram-comments/src/uninstall.php new file mode 100644 index 00000000..c637bb4f --- /dev/null +++ b/plugins/wptelegram-comments/src/uninstall.php @@ -0,0 +1,15 @@ +init(); + + define( 'WPTELEGRAM_COMMENTS_LOADED', true ); +} else { + add_filter( 'after_plugin_row_' . WPTELEGRAM_COMMENTS_BASENAME, [ Requirements::class, 'display_requirements' ] ); +} diff --git a/plugins/wptelegram-comments/tsconfig.json b/plugins/wptelegram-comments/tsconfig.json new file mode 100644 index 00000000..c556a2ad --- /dev/null +++ b/plugins/wptelegram-comments/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "lib": [ + "DOM", + "DOM.Iterable", + "ESNext" + ], + "jsx": "react-jsx", + "moduleResolution": "Bundler", + "module": "ESNext", + "noEmit": true, + }, + "include": [ + "js", + "vite.config.ts", + ] +} \ No newline at end of file diff --git a/plugins/wptelegram-comments/vite.config.ts b/plugins/wptelegram-comments/vite.config.ts new file mode 100644 index 00000000..3026a4b6 --- /dev/null +++ b/plugins/wptelegram-comments/vite.config.ts @@ -0,0 +1,10 @@ +import { createViteConfig, defineConfig } from '@wpsocio/dev/vite'; + +export default defineConfig( + createViteConfig({ + input: { + settings: 'js/settings/index.tsx', + }, + outDir: 'src/assets/build', + }), +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58468998..fb920282 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -32,6 +32,9 @@ importers: '@wordpress/components': specifier: ^25.12.0 version: 25.13.0(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0) + '@wpsocio/helpers': + specifier: workspace:* + version: link:../helpers react: specifier: ^18.2.0 version: 18.2.0 @@ -46,6 +49,28 @@ importers: specifier: ^18.2.15 version: 18.2.17 + packages/js/helpers: + dependencies: + '@wordpress/components': + specifier: ^25.12.0 + version: 25.13.0(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0) + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@types/jquery': + specifier: ^3.5.29 + version: 3.5.29 + '@types/react': + specifier: ^18.2.37 + version: 18.2.38 + '@types/react-dom': + specifier: ^18.2.15 + version: 18.2.17 + plugins/wp-test-plugin: dependencies: '@wordpress/block-editor': @@ -86,6 +111,46 @@ importers: specifier: ^5.2.2 version: 5.3.2 + plugins/wptelegram-comments: + dependencies: + '@wordpress/components': + specifier: ^25.12.0 + version: 25.13.0(@types/react@18.2.38)(react-dom@18.2.0)(react@18.2.0) + '@wordpress/element': + specifier: ^5.24.0 + version: 5.24.0 + '@wordpress/i18n': + specifier: ^4.47.0 + version: 4.47.0 + '@wpsocio/components': + specifier: workspace:* + version: link:../../packages/js/components + '@wpsocio/helpers': + specifier: workspace:* + version: link:../../packages/js/helpers + devDependencies: + '@types/jquery': + specifier: ^3.5.29 + version: 3.5.29 + '@types/react': + specifier: ^18.2.37 + version: 18.2.38 + '@types/react-dom': + specifier: ^18.2.15 + version: 18.2.17 + '@wpsocio/dev': + specifier: workspace:* + version: link:../../tools/dev + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + typescript: + specifier: ^5.2.2 + version: 5.3.3 + tools/cli: devDependencies: '@swc/core': @@ -1686,6 +1751,12 @@ packages: resolution: {integrity: sha512-9VZUA5omXBfn+hDxFjUDu1FOJTBM3LmvqfDey+Z6Aa8B8/JmF5SMj6FBrjfgJ/Q3YXOZd3qyTDfJyMZSs/wCUA==} dev: false + /@types/jquery@3.5.29: + resolution: {integrity: sha512-oXQQC9X9MOPRrMhPHHOsXqeQDnWeCDT3PelUIg/Oy8FAbzSZtFHRjc7IpbfFVmpLtJ+UOoywpRsuO5Jxjybyeg==} + dependencies: + '@types/sizzle': 2.3.8 + dev: true + /@types/mousetrap@1.6.15: resolution: {integrity: sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw==} dev: false @@ -1724,6 +1795,10 @@ packages: /@types/scheduler@0.16.8: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@types/sizzle@2.3.8: + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + dev: true + /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} dev: true @@ -1769,7 +1844,7 @@ packages: dependencies: '@babel/runtime': 7.23.4 '@wordpress/dom-ready': 3.46.0 - '@wordpress/i18n': 4.46.0 + '@wordpress/i18n': 4.47.0 dev: false /@wordpress/a11y@3.47.0: @@ -2370,7 +2445,7 @@ packages: engines: {node: '>=12'} dependencies: '@babel/runtime': 7.23.4 - '@wordpress/i18n': 4.46.0 + '@wordpress/i18n': 4.47.0 change-case: 4.1.2 dev: false @@ -2508,7 +2583,7 @@ packages: '@wordpress/deprecated': 3.46.0 '@wordpress/element': 5.24.0 '@wordpress/escape-html': 2.46.0 - '@wordpress/i18n': 4.46.0 + '@wordpress/i18n': 4.47.0 '@wordpress/keycodes': 3.46.0 memize: 2.1.0 react: 18.2.0 From d62de85599bc07e0dbea480250de50aa43c862a9 Mon Sep 17 00:00:00 2001 From: Irshad Ahmad Date: Thu, 14 Dec 2023 21:15:13 +0530 Subject: [PATCH 2/6] Move packages and domain over --- .../adapters/ColorPicker/ColorInputPicker.tsx | 81 + .../js/adapters/ColorPicker/ColorPicker.tsx | 12 + packages/js/adapters/ColorPicker/index.ts | 4 + packages/js/adapters/Input/NumberInput.tsx | 29 + packages/js/adapters/Input/TextInput.tsx | 44 + packages/js/adapters/Input/index.ts | 2 + packages/js/adapters/Link/Link.tsx | 6 + packages/js/adapters/Link/index.ts | 1 + packages/js/adapters/Modal/Modal.tsx | 79 + packages/js/adapters/Modal/index.ts | 1 + .../js/adapters/Multicheck/MultiCheck.tsx | 41 + packages/js/adapters/Multicheck/index.ts | 1 + packages/js/adapters/Radio/Radio.tsx | 48 + packages/js/adapters/Radio/index.ts | 1 + packages/js/adapters/Select/MultiSelect.tsx | 20 + .../js/adapters/Select/MultiSelectAsync.tsx | 25 + packages/js/adapters/Select/Select.tsx | 54 + packages/js/adapters/Select/SelectAsync.tsx | 24 + packages/js/adapters/Select/components.tsx | 8 + packages/js/adapters/Select/index.ts | 4 + packages/js/adapters/Tabs/Tabs.tsx | 65 + packages/js/adapters/Tabs/index.ts | 1 + packages/js/adapters/hooks/index.ts | 1 + packages/js/adapters/index.ts | 80 + packages/js/adapters/package.json | 33 + packages/js/adapters/theme/ThemeProvider.tsx | 15 + packages/js/adapters/theme/index.ts | 1 + packages/js/adapters/theme/styles.scss | 70 + packages/js/adapters/theme/variables.scss | 7 + packages/js/adapters/tsconfig.json | 18 + packages/js/adapters/types.ts | 10 + packages/js/components/BotTokenField.tsx | 51 + packages/js/components/Code.tsx | 16 + packages/js/components/ConfirmDialog.tsx | 68 + packages/js/components/Description.tsx | 9 + packages/js/components/InstructionsLink.tsx | 17 + packages/js/components/Smile.tsx | 7 + packages/js/components/VerticalDivider.tsx | 30 + packages/js/components/YouTubeVideo.tsx | 53 + packages/js/components/button/index.tsx | 7 - packages/js/components/code/index.tsx | 6 - packages/js/components/collapse/Collapse.tsx | 35 + packages/js/components/collapse/index.ts | 1 + packages/js/components/cols/Cols60x40.tsx | 5 + packages/js/components/cols/Cols75x25.tsx | 5 + packages/js/components/cols/Columns.tsx | 53 + packages/js/components/cols/index.ts | 3 + .../js/components/debug-data/DebugData.tsx | 48 + packages/js/components/debug-data/index.ts | 1 + packages/js/components/description/index.tsx | 8 - packages/js/components/index.ts | 24 +- .../components/instructions/Instructions.tsx | 27 + packages/js/components/instructions/index.ts | 1 + packages/js/components/package.json | 16 +- .../components/plugin-info/PluginHeader.tsx | 69 + .../components/plugin-info/PluginInfoCard.tsx | 122 + packages/js/components/plugin-info/index.ts | 2 + packages/js/components/plugin/header.tsx | 41 - packages/js/components/plugin/index.tsx | 1 - packages/js/components/plugin/styles.scss | 26 - .../components/section-card/SectionCard.tsx | 28 + packages/js/components/section-card/index.ts | 1 + packages/js/components/select/index.tsx | 1 - packages/js/components/select/types.ts | 8 - packages/js/components/stack/FeildStack.tsx | 18 + .../js/components/stack/FeildStackItem.tsx | 9 + packages/js/components/stack/index.ts | 2 + packages/js/components/submit/ResetButton.tsx | 5 + packages/js/components/submit/SubmitBar.tsx | 41 + .../js/components/submit/SubmitButton.tsx | 18 + .../js/components/submit/SubmitButtons.tsx | 23 + packages/js/components/submit/index.ts | 4 + packages/js/components/submit/styles.scss | 12 + .../test-result/MemberCountResult.tsx | 45 + .../components/test-result/MessageResult.tsx | 45 + .../js/components/test-result/TestResult.tsx | 28 + packages/js/components/test-result/index.ts | 3 + packages/js/components/useBotTokenTest.tsx | 141 + packages/js/components/useChatWithTest.tsx | 140 + .../js/components/widget-info/WidgetInfo.tsx | 74 + .../components/widget-info/WidgetInfoCard.tsx | 20 + .../components/widget-info/WidgetInfoItem.tsx | 14 + packages/js/components/widget-info/index.ts | 3 + .../wptg-social-icons/WPTGSocialIcons.tsx | 66 + .../js/components/wptg-social-icons/index.ts | 1 + .../components/wptg-social-icons/styles.scss | 23 + packages/js/form/Form.tsx | 39 + packages/js/form/FormDebug.tsx | 8 + packages/js/form/FormField.tsx | 24 + packages/js/form/adapters/Adapter.tsx | 73 + packages/js/form/adapters/ColorPicker.tsx | 17 + packages/js/form/adapters/Hidden.tsx | 7 + packages/js/form/adapters/MultiCheck.tsx | 17 + .../js/form/adapters/MultiSelectAsync.tsx | 32 + packages/js/form/adapters/Radio.tsx | 15 + packages/js/form/adapters/TextWithButton.tsx | 29 + packages/js/form/adapters/index.ts | 2 + packages/js/form/adapters/types.ts | 30 + packages/js/form/fields/Field.tsx | 36 + packages/js/form/fields/Group.tsx | 60 + packages/js/form/fields/Repeatable.tsx | 26 + packages/js/form/fields/index.ts | 5 + packages/js/form/hooks/index.ts | 2 + packages/js/form/hooks/useFieldConditions.ts | 34 + packages/js/form/hooks/useFieldError.ts | 9 + packages/js/form/index.ts | 17 + packages/js/form/package.json | 30 + packages/js/form/render/ErrorMessage.tsx | 13 + packages/js/form/render/RenderField.tsx | 107 + packages/js/form/render/RenderRepeatable.tsx | 127 + packages/js/form/render/index.ts | 2 + packages/js/form/styles.scss | 34 + packages/js/{helpers => form}/tsconfig.json | 13 +- packages/js/form/types.ts | 114 + packages/js/form/utils.ts | 98 + packages/js/helpers/index.ts | 1 - packages/js/helpers/package.json | 27 - packages/js/helpers/wp-admin.ts | 19 - packages/js/i18n/index.ts | 33 + packages/js/i18n/package.json | 11 + packages/js/i18n/tsconfig.json | 18 + packages/js/icons/SaveIcon.tsx | 12 + packages/js/icons/TelegramIcon.tsx | 9 + packages/js/icons/index.ts | 14 + packages/js/icons/package.json | 16 + packages/js/icons/tsconfig.json | 18 + packages/js/services/WithDOMData.tsx | 27 + packages/js/services/apiFetch/index.ts | 46 + packages/js/services/apiFetch/types.ts | 17 + packages/js/services/index.ts | 13 + packages/js/services/moduleStorage.ts | 32 + packages/js/services/package.json | 25 + packages/js/services/telegram/TelegramAPI.ts | 130 + .../js/services/telegram/TelegramUtils.ts | 202 + packages/js/services/telegram/index.ts | 3 + packages/js/services/telegram/types.ts | 50 + packages/js/services/tsconfig.json | 18 + packages/js/{helpers => services}/types.ts | 25 +- packages/js/services/useActiveTab.ts | 36 + packages/js/services/useDisplayFeedback.ts | 86 + packages/js/services/useLocalStorage.ts | 57 + packages/js/services/usePluginData.ts | 13 + packages/js/services/useSubmitForm.ts | 146 + packages/js/services/utils.ts | 23 + packages/js/utilities/blocks.ts | 11 + packages/js/utilities/constants.ts | 15 + .../js/utilities/createInterpolateElement.ts | 350 ++ packages/js/utilities/fields.ts | 47 + packages/js/utilities/hooks/index.ts | 1 + packages/js/utilities/hooks/usePrevious.ts | 11 + packages/js/utilities/index.ts | 8 + packages/js/utilities/misc.ts | 89 + packages/js/utilities/package.json | 18 + packages/js/utilities/tsconfig.json | 18 + packages/js/utilities/types.ts | 26 + plugins/wp-test-plugin/package.json | 8 +- plugins/wp-test-plugin/src/js/login/App.tsx | 9 +- plugins/wp-test-plugin/src/js/main/App.tsx | 10 +- .../wptelegram-comments/js/settings/App.tsx | 22 - .../js/settings/CodeField.tsx | 44 - .../js/settings/Configuration.tsx | 18 - .../js/settings/Instructions.tsx | 103 - .../js/settings/hooks/usePluginData.ts | 3 - .../wptelegram-comments/js/settings/index.ts | 1 + .../wptelegram-comments/js/settings/index.tsx | 20 - .../js/settings/services/fields.ts | 24 + .../js/settings/services/index.ts | 7 + .../js/settings/{ => services}/types.ts | 14 +- .../js/settings/services/useData.ts | 12 + .../js/settings/services/useInit.ts | 14 + .../js/settings/services/useOnInvalid.ts | 15 + .../js/settings/services/useOnSubmit.ts | 29 + .../js/settings/services/utils.ts | 19 + .../js/settings/styles.scss | 22 - .../js/settings/ui/App.stories.tsx | 43 + .../js/settings/ui/App.tsx | 57 + .../js/settings/ui/Code.tsx | 65 + .../js/settings/ui/Configuration.tsx | 38 + .../js/settings/ui/Header.tsx | 8 + .../js/settings/ui/Instructions.tsx | 91 + .../js/settings/ui/Sidebar.tsx | 32 + .../js/settings/ui/index.tsx | 23 + plugins/wptelegram-comments/package.json | 10 +- .../src/includes/AssetManager.php | 5 +- plugins/wptelegram-comments/tsconfig.json | 2 +- plugins/wptelegram-comments/vite.config.ts | 2 +- pnpm-lock.yaml | 4312 ++++++++--------- tools/dev/src/vite.ts | 14 +- 188 files changed, 7297 insertions(+), 2851 deletions(-) create mode 100644 packages/js/adapters/ColorPicker/ColorInputPicker.tsx create mode 100644 packages/js/adapters/ColorPicker/ColorPicker.tsx create mode 100644 packages/js/adapters/ColorPicker/index.ts create mode 100644 packages/js/adapters/Input/NumberInput.tsx create mode 100644 packages/js/adapters/Input/TextInput.tsx create mode 100644 packages/js/adapters/Input/index.ts create mode 100644 packages/js/adapters/Link/Link.tsx create mode 100644 packages/js/adapters/Link/index.ts create mode 100644 packages/js/adapters/Modal/Modal.tsx create mode 100644 packages/js/adapters/Modal/index.ts create mode 100644 packages/js/adapters/Multicheck/MultiCheck.tsx create mode 100644 packages/js/adapters/Multicheck/index.ts create mode 100644 packages/js/adapters/Radio/Radio.tsx create mode 100644 packages/js/adapters/Radio/index.ts create mode 100644 packages/js/adapters/Select/MultiSelect.tsx create mode 100644 packages/js/adapters/Select/MultiSelectAsync.tsx create mode 100644 packages/js/adapters/Select/Select.tsx create mode 100644 packages/js/adapters/Select/SelectAsync.tsx create mode 100644 packages/js/adapters/Select/components.tsx create mode 100644 packages/js/adapters/Select/index.ts create mode 100644 packages/js/adapters/Tabs/Tabs.tsx create mode 100644 packages/js/adapters/Tabs/index.ts create mode 100644 packages/js/adapters/hooks/index.ts create mode 100644 packages/js/adapters/index.ts create mode 100644 packages/js/adapters/package.json create mode 100644 packages/js/adapters/theme/ThemeProvider.tsx create mode 100644 packages/js/adapters/theme/index.ts create mode 100644 packages/js/adapters/theme/styles.scss create mode 100644 packages/js/adapters/theme/variables.scss create mode 100644 packages/js/adapters/tsconfig.json create mode 100644 packages/js/adapters/types.ts create mode 100644 packages/js/components/BotTokenField.tsx create mode 100644 packages/js/components/Code.tsx create mode 100644 packages/js/components/ConfirmDialog.tsx create mode 100644 packages/js/components/Description.tsx create mode 100644 packages/js/components/InstructionsLink.tsx create mode 100644 packages/js/components/Smile.tsx create mode 100644 packages/js/components/VerticalDivider.tsx create mode 100644 packages/js/components/YouTubeVideo.tsx delete mode 100644 packages/js/components/button/index.tsx delete mode 100644 packages/js/components/code/index.tsx create mode 100644 packages/js/components/collapse/Collapse.tsx create mode 100644 packages/js/components/collapse/index.ts create mode 100644 packages/js/components/cols/Cols60x40.tsx create mode 100644 packages/js/components/cols/Cols75x25.tsx create mode 100644 packages/js/components/cols/Columns.tsx create mode 100644 packages/js/components/cols/index.ts create mode 100644 packages/js/components/debug-data/DebugData.tsx create mode 100644 packages/js/components/debug-data/index.ts delete mode 100644 packages/js/components/description/index.tsx create mode 100644 packages/js/components/instructions/Instructions.tsx create mode 100644 packages/js/components/instructions/index.ts create mode 100644 packages/js/components/plugin-info/PluginHeader.tsx create mode 100644 packages/js/components/plugin-info/PluginInfoCard.tsx create mode 100644 packages/js/components/plugin-info/index.ts delete mode 100644 packages/js/components/plugin/header.tsx delete mode 100644 packages/js/components/plugin/index.tsx delete mode 100644 packages/js/components/plugin/styles.scss create mode 100644 packages/js/components/section-card/SectionCard.tsx create mode 100644 packages/js/components/section-card/index.ts delete mode 100644 packages/js/components/select/index.tsx delete mode 100644 packages/js/components/select/types.ts create mode 100644 packages/js/components/stack/FeildStack.tsx create mode 100644 packages/js/components/stack/FeildStackItem.tsx create mode 100644 packages/js/components/stack/index.ts create mode 100644 packages/js/components/submit/ResetButton.tsx create mode 100644 packages/js/components/submit/SubmitBar.tsx create mode 100644 packages/js/components/submit/SubmitButton.tsx create mode 100644 packages/js/components/submit/SubmitButtons.tsx create mode 100644 packages/js/components/submit/index.ts create mode 100644 packages/js/components/submit/styles.scss create mode 100644 packages/js/components/test-result/MemberCountResult.tsx create mode 100644 packages/js/components/test-result/MessageResult.tsx create mode 100644 packages/js/components/test-result/TestResult.tsx create mode 100644 packages/js/components/test-result/index.ts create mode 100644 packages/js/components/useBotTokenTest.tsx create mode 100644 packages/js/components/useChatWithTest.tsx create mode 100644 packages/js/components/widget-info/WidgetInfo.tsx create mode 100644 packages/js/components/widget-info/WidgetInfoCard.tsx create mode 100644 packages/js/components/widget-info/WidgetInfoItem.tsx create mode 100644 packages/js/components/widget-info/index.ts create mode 100644 packages/js/components/wptg-social-icons/WPTGSocialIcons.tsx create mode 100644 packages/js/components/wptg-social-icons/index.ts create mode 100644 packages/js/components/wptg-social-icons/styles.scss create mode 100644 packages/js/form/Form.tsx create mode 100644 packages/js/form/FormDebug.tsx create mode 100644 packages/js/form/FormField.tsx create mode 100644 packages/js/form/adapters/Adapter.tsx create mode 100644 packages/js/form/adapters/ColorPicker.tsx create mode 100644 packages/js/form/adapters/Hidden.tsx create mode 100644 packages/js/form/adapters/MultiCheck.tsx create mode 100644 packages/js/form/adapters/MultiSelectAsync.tsx create mode 100644 packages/js/form/adapters/Radio.tsx create mode 100644 packages/js/form/adapters/TextWithButton.tsx create mode 100644 packages/js/form/adapters/index.ts create mode 100644 packages/js/form/adapters/types.ts create mode 100644 packages/js/form/fields/Field.tsx create mode 100644 packages/js/form/fields/Group.tsx create mode 100644 packages/js/form/fields/Repeatable.tsx create mode 100644 packages/js/form/fields/index.ts create mode 100644 packages/js/form/hooks/index.ts create mode 100644 packages/js/form/hooks/useFieldConditions.ts create mode 100644 packages/js/form/hooks/useFieldError.ts create mode 100644 packages/js/form/index.ts create mode 100644 packages/js/form/package.json create mode 100644 packages/js/form/render/ErrorMessage.tsx create mode 100644 packages/js/form/render/RenderField.tsx create mode 100644 packages/js/form/render/RenderRepeatable.tsx create mode 100644 packages/js/form/render/index.ts create mode 100644 packages/js/form/styles.scss rename packages/js/{helpers => form}/tsconfig.json (61%) create mode 100644 packages/js/form/types.ts create mode 100644 packages/js/form/utils.ts delete mode 100644 packages/js/helpers/index.ts delete mode 100644 packages/js/helpers/package.json delete mode 100644 packages/js/helpers/wp-admin.ts create mode 100644 packages/js/i18n/index.ts create mode 100644 packages/js/i18n/package.json create mode 100644 packages/js/i18n/tsconfig.json create mode 100644 packages/js/icons/SaveIcon.tsx create mode 100644 packages/js/icons/TelegramIcon.tsx create mode 100644 packages/js/icons/index.ts create mode 100644 packages/js/icons/package.json create mode 100644 packages/js/icons/tsconfig.json create mode 100644 packages/js/services/WithDOMData.tsx create mode 100644 packages/js/services/apiFetch/index.ts create mode 100644 packages/js/services/apiFetch/types.ts create mode 100644 packages/js/services/index.ts create mode 100644 packages/js/services/moduleStorage.ts create mode 100644 packages/js/services/package.json create mode 100644 packages/js/services/telegram/TelegramAPI.ts create mode 100644 packages/js/services/telegram/TelegramUtils.ts create mode 100644 packages/js/services/telegram/index.ts create mode 100644 packages/js/services/telegram/types.ts create mode 100644 packages/js/services/tsconfig.json rename packages/js/{helpers => services}/types.ts (56%) create mode 100644 packages/js/services/useActiveTab.ts create mode 100644 packages/js/services/useDisplayFeedback.ts create mode 100644 packages/js/services/useLocalStorage.ts create mode 100644 packages/js/services/usePluginData.ts create mode 100644 packages/js/services/useSubmitForm.ts create mode 100644 packages/js/services/utils.ts create mode 100644 packages/js/utilities/blocks.ts create mode 100644 packages/js/utilities/constants.ts create mode 100644 packages/js/utilities/createInterpolateElement.ts create mode 100644 packages/js/utilities/fields.ts create mode 100644 packages/js/utilities/hooks/index.ts create mode 100644 packages/js/utilities/hooks/usePrevious.ts create mode 100644 packages/js/utilities/index.ts create mode 100644 packages/js/utilities/misc.ts create mode 100644 packages/js/utilities/package.json create mode 100644 packages/js/utilities/tsconfig.json create mode 100644 packages/js/utilities/types.ts delete mode 100644 plugins/wptelegram-comments/js/settings/App.tsx delete mode 100644 plugins/wptelegram-comments/js/settings/CodeField.tsx delete mode 100644 plugins/wptelegram-comments/js/settings/Configuration.tsx delete mode 100644 plugins/wptelegram-comments/js/settings/Instructions.tsx delete mode 100644 plugins/wptelegram-comments/js/settings/hooks/usePluginData.ts create mode 100644 plugins/wptelegram-comments/js/settings/index.ts delete mode 100644 plugins/wptelegram-comments/js/settings/index.tsx create mode 100644 plugins/wptelegram-comments/js/settings/services/fields.ts create mode 100644 plugins/wptelegram-comments/js/settings/services/index.ts rename plugins/wptelegram-comments/js/settings/{ => services}/types.ts (62%) create mode 100644 plugins/wptelegram-comments/js/settings/services/useData.ts create mode 100644 plugins/wptelegram-comments/js/settings/services/useInit.ts create mode 100644 plugins/wptelegram-comments/js/settings/services/useOnInvalid.ts create mode 100644 plugins/wptelegram-comments/js/settings/services/useOnSubmit.ts create mode 100644 plugins/wptelegram-comments/js/settings/services/utils.ts delete mode 100644 plugins/wptelegram-comments/js/settings/styles.scss create mode 100644 plugins/wptelegram-comments/js/settings/ui/App.stories.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/App.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/Code.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/Configuration.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/Header.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/Instructions.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/Sidebar.tsx create mode 100644 plugins/wptelegram-comments/js/settings/ui/index.tsx diff --git a/packages/js/adapters/ColorPicker/ColorInputPicker.tsx b/packages/js/adapters/ColorPicker/ColorInputPicker.tsx new file mode 100644 index 00000000..45cf087f --- /dev/null +++ b/packages/js/adapters/ColorPicker/ColorInputPicker.tsx @@ -0,0 +1,81 @@ +import { + Button, + ButtonProps, + InputAddonProps, + InputProps, + Popover, + PopoverBody, + PopoverContent, + PopoverTrigger, +} from '@chakra-ui/react'; +import { useCallback, useMemo, useState } from 'react'; +import { TextInput } from '../Input'; +import { useDebouncedCallback } from '../hooks'; +import { ColorPicker, ColorPickerProps } from './ColorPicker'; + +const addonBeforeProps: InputAddonProps = { px: '0px', py: '0px' }; + +export const ColorInputPicker: React.FC = ({ + value, + onChange, + ...props +}) => { + const [currentColor, setCurrentColor] = useState(value || ''); + + const buttonProps = useMemo( + () => ({ backgroundColor: currentColor }), + [currentColor], + ); + + const onChangeInput = useCallback>( + (event) => { + const newColor = event.target.value; + + onChange?.(newColor); + setCurrentColor(newColor); + }, + [onChange], + ); + + const onChangeColor = useCallback( + (newColor: string) => { + onChange?.(newColor); + setCurrentColor(newColor); + }, + [onChange], + ); + + const debouncedOnChangeColor = useDebouncedCallback(onChangeColor, 200); + + return ( + + + + + + + + + ); +}; diff --git a/packages/js/components/Description.tsx b/packages/js/components/Description.tsx new file mode 100644 index 00000000..60e6a6c1 --- /dev/null +++ b/packages/js/components/Description.tsx @@ -0,0 +1,9 @@ +import { Text, TextProps } from '@wpsocio/adapters'; + +export const Description: React.FC = ({ children, ...props }) => { + return ( + + {children} + + ); +}; diff --git a/packages/js/components/InstructionsLink.tsx b/packages/js/components/InstructionsLink.tsx new file mode 100644 index 00000000..86afe6c1 --- /dev/null +++ b/packages/js/components/InstructionsLink.tsx @@ -0,0 +1,17 @@ +import { Link } from '@wpsocio/adapters'; +import { __ } from '@wpsocio/i18n'; + +interface InstructionsLinkProps { + link: string; + text?: string; +} + +export const InstructionsLink: React.FC< + React.PropsWithChildren +> = ({ link, text, children }) => { + return ( + + {text || children || __('Click here for instructions.')} + + ); +}; diff --git a/packages/js/components/Smile.tsx b/packages/js/components/Smile.tsx new file mode 100644 index 00000000..7d531367 --- /dev/null +++ b/packages/js/components/Smile.tsx @@ -0,0 +1,7 @@ +export const Smile = () => { + return ( + + 🙂 + + ); +}; diff --git a/packages/js/components/VerticalDivider.tsx b/packages/js/components/VerticalDivider.tsx new file mode 100644 index 00000000..ed08eab9 --- /dev/null +++ b/packages/js/components/VerticalDivider.tsx @@ -0,0 +1,30 @@ +import { Box, Flex } from '@wpsocio/adapters'; + +export interface VerticalDividerProps { + height?: string; +} + +export const VerticalDivider: React.FC< + React.PropsWithChildren +> = ({ children, height = '1em' }) => { + const divider = ( + + ); + return ( + + {divider} + {children} + {divider} + + ); +}; diff --git a/packages/js/components/YouTubeVideo.tsx b/packages/js/components/YouTubeVideo.tsx new file mode 100644 index 00000000..6f534523 --- /dev/null +++ b/packages/js/components/YouTubeVideo.tsx @@ -0,0 +1,53 @@ +import type { CSSProperties } from 'react'; + +import { Box } from '@wpsocio/adapters'; + +type YouTubeVideoProps = { + videoId: string; + title: string; + asGridCol?: boolean; +}; + +const parentStyle: CSSProperties = { + position: 'relative', + paddingBottom: '56.25%' /* 16:9 */, + paddingTop: 25, + height: 0, +}; + +const iframeStyle: CSSProperties = { + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', +}; + +const gridColMS = { sm: '', md: 'auto' }; + +export const YouTubeVideo: React.FC = ({ + videoId, + title, + asGridCol, +}) => { + const output = ( + +