├── logo.png
├── 128x128.png
├── 440x280.png
├── 1400x560.png
├── fonts
├── Shabnam-FD.eot
├── Shabnam-FD.ttf
├── Shabnam-FD.woff
└── Shabnam-FD.woff2
├── manifest.json
├── loading.svg
├── heart.svg
├── LICENSE
├── background.js
├── index.html
├── README.md
├── script.js
├── style.css
└── content.js
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/logo.png
--------------------------------------------------------------------------------
/128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/128x128.png
--------------------------------------------------------------------------------
/440x280.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/440x280.png
--------------------------------------------------------------------------------
/1400x560.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/1400x560.png
--------------------------------------------------------------------------------
/fonts/Shabnam-FD.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/fonts/Shabnam-FD.eot
--------------------------------------------------------------------------------
/fonts/Shabnam-FD.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/fonts/Shabnam-FD.ttf
--------------------------------------------------------------------------------
/fonts/Shabnam-FD.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/fonts/Shabnam-FD.woff
--------------------------------------------------------------------------------
/fonts/Shabnam-FD.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pouriasabaghi/kojachande_extension/HEAD/fonts/Shabnam-FD.woff2
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifest_version": 3,
3 | "name": "Koja Chande",
4 | "version": "1.7",
5 | "description": "بهترین قیمت رو پیدا کن",
6 | "permissions": ["activeTab", "contextMenus"],
7 | "background": {
8 | "service_worker": "background.js"
9 | },
10 | "host_permissions": [
11 | "https://www.digikala.com/*",
12 | "https://www.amazon.com/*"
13 | ],
14 | "action": {
15 | "default_popup": "index.html"
16 | },
17 | "icons": {
18 | "16": "128x128.png",
19 | "48": "128x128.png",
20 | "128": "128x128.png"
21 | },
22 | "content_scripts": [
23 | {
24 | "matches": ["https://www.digikala.com/*", "https://www.amazon.com/*"],
25 | "js": ["content.js"]
26 | }
27 | ]
28 | }
29 |
--------------------------------------------------------------------------------
/loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/heart.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Pouria Sabaghi
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/background.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Opens the popup and sends product data.
3 | * @param {{ name: string, price: number, origin: string }} product - The product object containing name, price, and origin.
4 | */
5 |
6 | const openPopup = async (product) => {
7 | try {
8 | await chrome.action.openPopup();
9 | } catch (error) {
10 | console.error(error, "Popup is already open");
11 | }
12 |
13 | if (product.name) {
14 | chrome.runtime.sendMessage({
15 | action: "get_prices",
16 | product: product,
17 | });
18 | }
19 | };
20 |
21 | chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
22 | if (request.action === "open_popup") {
23 | openPopup(request.product);
24 | return true;
25 | }
26 | });
27 |
28 | // Create context menu
29 | chrome.runtime.onInstalled.addListener(function () {
30 | chrome.contextMenus.create({
31 | id: "get_prices_context_menu",
32 | title: "کجا چنده",
33 | contexts: ["selection"],
34 | });
35 | });
36 |
37 | // Event listener for context menu item click
38 | chrome.contextMenus.onClicked.addListener(function (info, tab) {
39 | if (info.menuItemId === "get_prices_context_menu" && info.selectionText)
40 | openPopup({ name: info.selectionText });
41 | });
42 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Chande
7 |
8 |
9 |
10 |
11 |
12 |
کجا چنده؟
13 |
14 | کجا چنده
15 | یک اکستنشن کروم است که به شما کمک میکند هنگام خرید، قیمت محصول مورد
17 | نظر خود را با بقیه فروشگاه ها مقایسه و بهترین خرید را داشته باشید.
19 |
20 |
21 | برای شروع بالا سمت چپ در صفحه محصول بر روی دکمه
22 |
23 | کلیک کنید.
24 |
25 |
26 |
27 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 📌 کجا چنده
2 |
3 | اکستنشن کجا چنده به شما کمک میکند تا قیمت محصول مورد نظر خود را در فروشگاههای مختلف بررسی کنید و ببینید که آیا میتوانید آن را با قیمت ارزانتری تهیه کنید یا خیر.
4 |
5 | ---
6 |
7 | ## 🚀 ویژگیها
8 | ✅ مقایسه قیمت محصول در فروشگاههای مختلف به صورت خودکار
9 | ✅ نمایش قیمت فعلی محصول در فروشگاهی که بازدید میکنید
10 | ✅ رابط کاربری ساده و سریع
11 | ✅ دکمهای برای بررسی قیمت در سایر فروشگاهها
12 | ✅ قابلیت مخفی و نمایش مجدد ویجت اکستنشن
13 |
14 | ---
15 |
16 | ## 📥 نصب و راهاندازی
17 | [نصب از کروم وب استور](https://chromewebstore.google.com/detail/koja-chande/gaacdleodfajpcdoffbmnkijnabjocac?utm_source=ext_app_menu)
18 |
19 | ---
20 |
21 | ## 🔧 نحوه استفاده
22 |
23 | 1. وارد صفحه محصول مورد نظر خود در فروشگاه شوید.
24 | 2. روی دکمهی **"کجا چنده؟"** که در صفحه اضافه شده است کلیک کنید.
25 | 3. اکستنشن قیمت این محصول را در سایر فروشگاهها بررسی میکند و شما را مطلع میکند که آیا جای ارزانتری برای خرید آن وجود دارد یا نه.
26 | 4. اگر قیمت بهتری پیدا شد، میتوانید با کلیک روی لینک فروشگاه ارزانتر، به آنجا منتقل شوید.
27 |
28 | ## 👨💻 گزارش خرابی
29 |
30 | توجه داشته باشید که عملکرد افزونه ممکن است بسته به بهروزرسانیهای فروشگاهها دچار اختلال شود، اما جای نگرانی نیست! ما بهصورت مستمر در حال بهروزرسانی و افزودن قابلیتهای جدید هستیم. در صورت وجود هرگونه مشکل، از طریق Issues با ما در ارتباط باشید.
31 |
32 | ## ارتباط
33 | - [Linkedin](linkedin.com/in/pouria-sabaghi-ba052730b)
34 | - [Email](mailto:pouirasabaghi@gamil.com)
35 | - [Telegram](https://t.me/p_nightwolf)
36 |
37 | ---
38 |
39 | ## 📜 مجوز
40 | این پروژه تحت مجوز **MIT** منتشر شده است. برای اطلاعات بیشتر به فایل `LICENSE` مراجعه کنید.
41 |
42 | ---
43 |
44 | ❤️ اگر این پروژه برای شما مفید بود، لطفاً ⭐️ آن را در گیتهاب ثبت کنید!
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
2 | if (request.action === "get_prices") {
3 | const { name, price } = request.product;
4 |
5 | const main = document.body.querySelector("main");
6 | const fetchData = async () => {
7 | try {
8 | main.innerHTML = loading();
9 | const response = await fetch("https://api.kojachande.ir/api/v1/prices", {
10 | method: "POST",
11 | headers: {
12 | Accept: "application/json",
13 | "Content-Type": "application/json",
14 | },
15 | body: JSON.stringify({ product_name: name, product_price: price }),
16 | });
17 |
18 | const data = await response.json();
19 |
20 | if (!response.ok) throw new Error(data.message);
21 |
22 | main.innerHTML = loading(false);
23 |
24 | data.forEach((item) => {
25 | if (!item.error) {
26 | const list = `