Compare commits
2 Commits
main
...
baghi/base
Author | SHA1 | Date | |
---|---|---|---|
3cbe5cbd06 | |||
db9a09ad38 |
3
.env
3
.env
|
@ -55,6 +55,7 @@ VITE_ENTITY_SYSTEM=entity-view-system
|
|||
VITE_BORHAN_SYSTEM=borhan-system
|
||||
VITE_THIQAT_SYSTEM=thiqat-system
|
||||
VITE_CHAT_SYSTEM=chat-system
|
||||
VITE_TASK_SYSTEM=task-system
|
||||
VITE_REPORT_SYSTEM=report-system
|
||||
VITE_ADMIN_SYSTEM=admin-panel
|
||||
VITE_TAHRIR_SYSTEM=tahrir-system
|
||||
|
@ -114,5 +115,3 @@ VITE_HELP_PAGE=راهنمای سایت
|
|||
# modules
|
||||
# [listRoutes, chatRoutes, tahrirRoutes, jahatRoutes, borhanRoutes, thiqatRoutes]
|
||||
VITE_BUILD_MODULES=listRoutes,tahrirRoutes,jahatRoutes,thiqatRoutes
|
||||
|
||||
NUXT_SESSION_PASSWORD=7a5eb85e8b5b43f6b09b73741bf9f6f9
|
|
@ -1,5 +1,4 @@
|
|||
# NUXT_PUBLIC_BASE_URL=http://192.168.23.161/
|
||||
NUXT_PUBLIC_BASE_URL=https://hadithai.ir/
|
||||
NUXT_PUBLIC_BASE_URL=http://192.168.23.161/
|
||||
|
||||
VITE_APP_NAME=Hadith
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
NUXT_PUBLIC_BASE_URL=Majles
|
||||
VITE_APP_NAME=Majles
|
||||
|
||||
|
||||
### Relative pathes for systems sass addressing ###
|
||||
|
@ -21,7 +21,6 @@ VITE_TAHRIR_PAGE_TITLE = قانون - سامانه ای برای سندنگار
|
|||
VITE_REPORT_PAGE_TITLE = قانون - سامانه گزارش گیری داده
|
||||
VITE_PERMISSION_PAGE_TITLE = قانون - سامانه کنترل وظایف
|
||||
VITE_CHAT_PAGE_TITLE = قانون - سامانه گفتگو
|
||||
VITE_TASK_PAGE_TITLE = قانون - سامانه وظایف
|
||||
VITE_RESEARCH_PAGE_TITLE = قانون - تحقیقات من
|
||||
VITE_AI_TOOLS_PAGE_TITLE = قانون - حاشیه نویسی
|
||||
|
||||
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -10,6 +10,3 @@
|
|||
[submodule "systems/chat_ui"]
|
||||
path = systems/chat_ui
|
||||
url = https://git2.tavasi.ir/front/chat_ui.git
|
||||
[submodule "systems/task_ui"]
|
||||
path = systems/task_ui
|
||||
url = https://git2.tavasi.ir/front/task_ui.git
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
Add new repo:
|
||||
git submodule add https://git2.tavasi.ir/front/chat_ui.git systems/chat_ui -f
|
||||
|
||||
clone from a single branch
|
||||
git clone --single-branch --branch rezae/feat/add-task-module --recurse-submodules https://git2.tavasi.ir/front/base_ui.git
|
||||
|
||||
Cloning a Repository with Submodules
|
||||
If you clone a repository that contains submodules, you'll need to initialize and update the submodules:
|
||||
git clone repository-url
|
||||
cd repository-directory
|
||||
git clone <repository-url>
|
||||
cd <repository-directory>
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
Or, you can do it in one step:
|
||||
git clone --recurse-submodules https://git2.tavasi.ir/front/base_ui.git
|
||||
|
||||
git clone --recurse-submodules <repository-url>
|
||||
|
||||
Updating Submodules
|
||||
To update a submodule to the latest commit on its branch:
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,6 +0,0 @@
|
|||
[{000214A0-0000-0000-C000-000000000046}]
|
||||
Prop3=19,2
|
||||
[InternetShortcut]
|
||||
URL=http://fontjo.com/
|
||||
IDList=
|
||||
HotKey=0
|
|
@ -1,6 +0,0 @@
|
|||
[{000214A0-0000-0000-C000-000000000046}]
|
||||
Prop3=19,2
|
||||
[InternetShortcut]
|
||||
URL=http://fontjo.com/
|
||||
IDList=
|
||||
HotKey=0
|
|
@ -1,5 +0,0 @@
|
|||
Thank you for downloading the file from the FonJo site
|
||||
--------------------------------------------------------------
|
||||
AllRight Reserved By Fontjo.com ~ Fontjo.ir
|
||||
--------------------------------------------------------------
|
||||
Copy Font files to Addree > C:\Windows\Fonts
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,929 +0,0 @@
|
|||
تغییرات فونت وزیر
|
||||
=================
|
||||
|
||||
در اینجا شما فهرستی از تغییرات بین هر نسخهی انتشار از فونت وزیر را مشاهده میکنید.
|
||||
|
||||
نسخه ۱۶.۱.۰
|
||||
-----------
|
||||
۲۰ مهر ۱۳۹۶
|
||||
|
||||
- رفع اشکال سرکش گاف
|
||||
- بهبود ی ـی ه
|
||||
- بهبود همزه روی حروف
|
||||
- کاهش ارتفاغ گیومه
|
||||
- بهبود هـ در حالت ضخیم
|
||||
- بهبود نقاط در حالت ضخیم
|
||||
- بهبود نقاط ژ ز
|
||||
|
||||
|
||||
نسخه ۱۶.۰.۱
|
||||
-----------
|
||||
۱۵ مهر ۱۳۹۶
|
||||
|
||||
- رفع اشکال س
|
||||
|
||||
|
||||
نسخه ۱۶.۰.۰
|
||||
-----------
|
||||
۱۵ مهر ۱۳۹۶
|
||||
|
||||
- بهبود کل اعراب
|
||||
- اصلاح ضخامت کـ ـکـ
|
||||
- بهبود متیرکهای فونت
|
||||
- بهبود ؟ ! ا ـه ص ط ء و همزه روی حروف
|
||||
- بهبود ارتفاع و ناحیه همپوشانی
|
||||
|
||||
|
||||
نسخه ۱۵.۱.۰
|
||||
-----------
|
||||
۲ مهر ۱۳۹۶
|
||||
|
||||
- بهبود ۹ ۵ ـد کـ ـکـ
|
||||
- اصلاح اعراب کـ ـکـ
|
||||
|
||||
|
||||
نسخه ۱۵.۰.۰
|
||||
-----------
|
||||
۹ شهریور ۱۳۹۶
|
||||
|
||||
- بهبود ضخامت
|
||||
- بهبود ر و ی
|
||||
- بهبود ارتفاع
|
||||
|
||||
|
||||
نسخه ۱۴.۰.۰
|
||||
-----------
|
||||
۳۱ مرداد ۱۳۹۶
|
||||
|
||||
- بهبود حروف و ارقام
|
||||
- اصلاح مشخصات فونتهای تفکیک شده بدون لاتین و حروف فارسی (با تشکر از @morealaz)
|
||||
|
||||
|
||||
نسخه ۱۳.۰.۱
|
||||
-----------
|
||||
۱۵ تیر ۱۳۹۶
|
||||
|
||||
- اصلاح ایراد ـآ ـأ
|
||||
- اصلاح نقاط ـه ه نقطهدار
|
||||
- اصلاح اعراب إ ـإ
|
||||
|
||||
|
||||
نسخه ۱۳.۰.۰
|
||||
-----------
|
||||
۱۵ تیر ۱۳۹۶
|
||||
|
||||
- بهبود دندانههای وسط و انتها
|
||||
- اصلاح فـ
|
||||
- بهبود فاصله بین واژهای
|
||||
- بهبود ضخامت ح ـح ع ـع
|
||||
|
||||
|
||||
نسخه ۱۲.۰.۰
|
||||
-----------
|
||||
۱۰ تیر ۱۳۹۶
|
||||
|
||||
- بهبود حروف کشیده
|
||||
- بهبود م ی ط ف
|
||||
- بهبود ـو ـق
|
||||
- تصحیح لیگچر الله
|
||||
- بهبود مکان نقاط
|
||||
|
||||
|
||||
نسخه ۱۱.۰.۱
|
||||
-----------
|
||||
۲۵ خرداد ۱۳۹۶
|
||||
|
||||
- اصلاح نام قلم در حالت نازک برای محیط دسکتاپ (با تشکر از @Javid-Izadfar)
|
||||
|
||||
|
||||
نسخه ۱۱.۰.۰
|
||||
-----------
|
||||
۱۸ خرداد ۱۳۹۶
|
||||
|
||||
- بهبود سـ ـسـ ـا ـی ی ـعـ
|
||||
- بهبود حالات م ک
|
||||
- اصلاح عرض ف
|
||||
- اضافه شدن نسخه باریک
|
||||
|
||||
|
||||
نسخه ۱۰.۰.۱
|
||||
-----------
|
||||
۱۵ خرداد ۱۳۹۶
|
||||
|
||||
- رفع ایراد عرض ـفـ ـقـ
|
||||
- اصلاح ضخامت مد در حالت نازک
|
||||
- رفع ایراد هینتینگ در woff و eot
|
||||
|
||||
|
||||
نسخه ۱۰.۰.۰
|
||||
-----------
|
||||
۶ خرداد ۱۳۹۶
|
||||
|
||||
- بهبود و بازطراحی در گلیفها
|
||||
- اضافه شدن نسخه وزن متوسط
|
||||
- اضافه شدن نسخه woff2
|
||||
|
||||
|
||||
نسخه ۱۰.۰.۰-بتا
|
||||
---------------
|
||||
۹ فروردین ۱۳۹۶
|
||||
|
||||
- اصلاح ضخامت خط کرسی در گلیفها (برابر شدن)
|
||||
- بهبود هـ در ضخیم
|
||||
- بهبود عرض ۹
|
||||
|
||||
|
||||
نسخه ۱۰.۰.۰-آلفا
|
||||
----------------
|
||||
۸ فروردین ۱۳۹۶
|
||||
|
||||
- تجدید نظر در سایز قلم
|
||||
- برابر شدن سایز وزنها
|
||||
- کاهش فاصله بین کلمات
|
||||
- بهبود ارقام
|
||||
- بهبود حروف و علائم
|
||||
|
||||
|
||||
نسخه ۹.۰.۰-بتا
|
||||
--------------
|
||||
۳۰ اسفند ۱۳۹۵
|
||||
|
||||
- کاهش فاصله بین کلمات
|
||||
- بازطراحی گیومه
|
||||
- بهبود فاصله طولی مـ ـه
|
||||
|
||||
|
||||
نسخه ۹.۰.۰-آلفا
|
||||
---------------
|
||||
۲۵ اسفند ۱۳۹۵
|
||||
|
||||
- تجدید نظر در ضخامت و اندازه قلم
|
||||
- اصلاح و بهبود گلیفها
|
||||
|
||||
|
||||
نسخه ۸.۲.۱
|
||||
----------
|
||||
۱۶ اسفند ۱۳۹۵
|
||||
|
||||
- اصلاح هـ عـ
|
||||
- اصلاح ط در ضخیم
|
||||
|
||||
|
||||
نسخه ۸.۲.۰
|
||||
----------
|
||||
۱۵ اسفند ۱۳۹۵
|
||||
|
||||
- بهبود ـعـ
|
||||
- اصلاح اعراب
|
||||
- اصلاح نقاط
|
||||
- اصلاح س
|
||||
|
||||
|
||||
نسخه ۸.۱.۰
|
||||
----------
|
||||
۱۳ اسفند ۱۳۹۵
|
||||
|
||||
- بهبود حالات خ
|
||||
- بهبود ارتفاع گلیفهای عمودی
|
||||
- بهبود نقطه ذ ـذ
|
||||
- بهبود ارتفاع م ـم
|
||||
- اصلاح ! در ضخیم
|
||||
|
||||
|
||||
نسخه ۸.۰.۰
|
||||
----------
|
||||
۱۲ اسفند ۱۳۹۵
|
||||
|
||||
- بهبود قوسها، اندازهها، طولها، شکلها و فاصلهها
|
||||
- رفع مشکل ـن (با تشکر از @Masishta)
|
||||
|
||||
|
||||
نسخه ۷.۱.۰
|
||||
----------
|
||||
۷ اسفند ۱۳۹۵
|
||||
|
||||
- اصلاح و بهبود د ـد ر ـر ـن مـ ـمـ ـفـ ـف هـ ـق ـو ّ ـت ف حـ ـحـ
|
||||
|
||||
|
||||
نسخه ۷.۰.۰
|
||||
----------
|
||||
۷ بهمن ۱۳۹۵
|
||||
|
||||
- افزایش سایز قلم جهت هماهنگی با سایر قلم های رایج
|
||||
- بهبود برخی گلیف ها و ارتفاع
|
||||
- اصلاح متریکها
|
||||
|
||||
|
||||
نسخه ۶.۳.۴
|
||||
----------
|
||||
۳ مهر ۱۳۹۵
|
||||
|
||||
- رفع ایراد زاویه سرکش گ
|
||||
- بهبود اتصال از راست ـط ـص
|
||||
- رفع ایراد X-Height
|
||||
|
||||
|
||||
نسخه ۶.۳.۳
|
||||
----------
|
||||
۲۳ آذر ۱۳۹۵
|
||||
|
||||
- رفع ایراد ضخامت کرسی ـح حـ ـحـ
|
||||
- رفع ایراد جهت در ضخیم
|
||||
|
||||
|
||||
نسخه ۶.۳.۲
|
||||
----------
|
||||
۱۶ آذر ۱۳۹۵
|
||||
|
||||
- رفع ایراد همخانواده نبودن نسخههای قلم
|
||||
|
||||
|
||||
نسخه ۶.۳.۱
|
||||
----------
|
||||
۱۵ آذر ۱۳۹۵
|
||||
|
||||
- اصلاح حالات ک در ضخیم
|
||||
- بهبود جزئی ـه
|
||||
|
||||
|
||||
نسخه ۶.۳.۰
|
||||
----------
|
||||
۱۵ آذر ۱۳۹۵
|
||||
|
||||
- بهبود ارتفاع
|
||||
- بهبود حـ ـحـ
|
||||
- اصلاح دندانه صـ ـصـ
|
||||
- بهبود ؟
|
||||
- افزایش فاصله نقاط در ضخیم
|
||||
|
||||
|
||||
نسخه ۶.۲.۰
|
||||
----------
|
||||
۱۲ آذر ۱۳۹۵
|
||||
|
||||
- بهبود ضخامت گلیف های عمودی
|
||||
- بهبود ارقام
|
||||
|
||||
|
||||
نسخه ۶.۱.۰
|
||||
----------
|
||||
۱۱ آذر ۱۳۹۵
|
||||
|
||||
- رفع اشکال ـت در ضخیم
|
||||
- بهبود ق
|
||||
- بهبود مکان نقاط
|
||||
|
||||
|
||||
نسخه ۶.۰.۰
|
||||
----------
|
||||
۱۰ آذر ۱۳۹۵
|
||||
|
||||
- بهبود قوسها و دندانهها و اندازهها و زوایا
|
||||
- بهبود شکل حروف
|
||||
- اصلاح همزه بر روی ه
|
||||
- افزایش فاصله بین واژهای
|
||||
|
||||
|
||||
نسخه ۵.۱.۱
|
||||
----------
|
||||
۱ آذر ۱۳۹۵
|
||||
|
||||
- بهبود عرض در ـسـ سـ ـس ـعـ
|
||||
|
||||
|
||||
نسخه ۵.۱.۰
|
||||
----------
|
||||
۱ آذر ۱۳۹۵
|
||||
|
||||
- بهبود ح ـح حـ ـحـ ـع ع ل ـل ی ـی ن ـن س ـس ص ـص ـهـ هـ ء
|
||||
- بهبود و اصلاح ارقام
|
||||
- بازگشت ـه از نسخه چهار
|
||||
|
||||
|
||||
نسخه ۵.۰.۰
|
||||
----------
|
||||
۳۰ آبان ۱۳۹۵
|
||||
|
||||
- بازطراحی برخی گلیف ها برای بازگشت به تایپ فیس وزیر یک
|
||||
- بهبود برخی گلیف ها (با تشکر از محمد)
|
||||
- اصلاح متریک در نسخه ضخیم
|
||||
- ایجاد دوباره نسخه ضخیم و سبک
|
||||
- اصلح ارقام ۴ ۵ ۶ در نسخه تمام ارقام فارسی
|
||||
|
||||
|
||||
نسخه ۴.۴.۱
|
||||
----------
|
||||
۷ آبان ۱۳۹۵
|
||||
|
||||
- بهبود فـ ف ق ـو و مـ ـمـ
|
||||
|
||||
|
||||
نسخه ۴.۴.۰
|
||||
----------
|
||||
۲۹ مهر ۱۳۹۵
|
||||
|
||||
- بهبود ارتفاع و فاصله و برخی نقاط
|
||||
- تصحیح صفر در ضخیم
|
||||
|
||||
|
||||
نسخه ۴.۳.۱
|
||||
----------
|
||||
۲۵ مهر ۱۳۹۵
|
||||
|
||||
- بهبود دندانه ها
|
||||
|
||||
|
||||
نسخه ۴.۳.۰
|
||||
----------
|
||||
۲۵ مهر ۱۳۹۵
|
||||
|
||||
- افزایش عرض مـ ـمـ لـ ـلـ ـی
|
||||
- بهبود ۹ فـ و ـفـ
|
||||
|
||||
|
||||
نسخه ۴.۲.۱
|
||||
----------
|
||||
۲۴ مهر ۱۳۹۵
|
||||
|
||||
- بهبود و در ضخیم
|
||||
- اصلاح ـقـ ٫
|
||||
- اضافه شدن گلیف ریال
|
||||
- تصحیح جهت
|
||||
|
||||
|
||||
نسخه ۴.۲
|
||||
--------
|
||||
۲۳ مهر ۱۳۹۵
|
||||
|
||||
- بهبود ضخامت در حالت توپر
|
||||
- بهبود دندانه ها و ارتفاع
|
||||
|
||||
|
||||
نسخه ۴.۱.۲
|
||||
----------
|
||||
۶ مهر ۱۳۹۵
|
||||
|
||||
- بهبود مـ ـه
|
||||
- اصلاح charset
|
||||
|
||||
|
||||
نسخه ۴.۱.۱
|
||||
----------
|
||||
۱۹ شهریور ۱۳۹۵
|
||||
|
||||
- بهبود بسیار جزيی قوس س ص ن
|
||||
- اصلاح دندانه صـ ـسـ
|
||||
- بهبود ـم
|
||||
|
||||
|
||||
نسخه ۴.۱.۰
|
||||
----------
|
||||
۷ شهریور ۱۳۹۵
|
||||
|
||||
- افزایش نواحی همپوشانی
|
||||
- کوچکتر شدن خط فاصله (تطویل)
|
||||
|
||||
|
||||
نسخه ۴.۰.۱
|
||||
----------
|
||||
۲۲ مرداد ۱۳۹۵
|
||||
|
||||
- اصلاح ۶
|
||||
- بهبود ح و دندانه های س در حالت ضخیم
|
||||
|
||||
|
||||
نسخه ۴.۰.۰
|
||||
----------
|
||||
۲۱ مرداد ۱۳۹۵
|
||||
|
||||
- باز طراحی و بهبود فونت
|
||||
- اضافه شدن حروف لاتین فونت روبوتو به قلم
|
||||
|
||||
|
||||
نسخه ۳.۱.۰
|
||||
----------
|
||||
۴ تیر ۱۳۹۵
|
||||
|
||||
- افزایش طولی فونت در برخی گلیف ها
|
||||
|
||||
|
||||
نسخه ۳.۰.۱
|
||||
----------
|
||||
۲۹ خرداد ۱۳۹۵
|
||||
|
||||
- اضافه شدن cdn
|
||||
|
||||
|
||||
نسخه ۳
|
||||
------
|
||||
۲۸ خرداد ۱۳۹۵
|
||||
|
||||
- بهبود بسیاری از گلیف ها
|
||||
- بهبود فاصله
|
||||
- اضافه شدن وزن های نازک و متوسط
|
||||
- اضافه شدن گلیف های الله و ریال
|
||||
- حذف داده های اضافی و کاهش حجم فایل
|
||||
|
||||
|
||||
نسخه ۲
|
||||
------
|
||||
۱۲ اردیبهشت ۱۳۹۵
|
||||
|
||||
- بهبود حالات س
|
||||
- بهبود بـ
|
||||
- پشتیبانی از bower با (تشکر از Nasser Rafie-geminorum)
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۱۳
|
||||
-------------------------
|
||||
۲ اردیبهشت ۱۳۹۵
|
||||
|
||||
- بهبود دندانه ها
|
||||
- بهبود ضخامت ها
|
||||
- بهبود فاصله در حالت توپر
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۱۲
|
||||
-------------------------
|
||||
۲۸ فروردین ۱۳۹۵
|
||||
|
||||
- بهبود ه و ـو ف فـ ـق ق ـد ر ـر
|
||||
- بهبود ارتفاع گلیف های عمودی و نقاط
|
||||
- اصلاح ؟ ! در حالت ضخیم
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۱۱
|
||||
-------------------------
|
||||
۲۳ فروردین ۱۳۹۵
|
||||
|
||||
- بهبود حالات ح ع
|
||||
- بهبود نقاط
|
||||
- اصلاح متریک های فونت
|
||||
- بهبود م
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۱۰
|
||||
-------------------------
|
||||
۲۰ فروردین ۱۳۹۵
|
||||
|
||||
- بهبود تک نقطه
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۹
|
||||
------------------------
|
||||
۱۸ فروردین ۱۳۹۵
|
||||
|
||||
- بهبود ٪
|
||||
- اصلاح کد پیج فونت (با تشکر از Saleh Souzanchi-zoghal و Saeed Rasooli-ilius)
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۸
|
||||
------------------------
|
||||
۱۳ فروردین ۱۳۹۵
|
||||
|
||||
- بهبود مـ ـمـ ی هـ ـه ـت
|
||||
- بهبود همزه (با تشکر از amin3d)
|
||||
- بهبود تک نقطه (با تشکر از Saleh Souzanchi-zoghal)
|
||||
- تصحیح ایراد فایل eot (با تشکر از Alireza Dabiri Nejad-alirdn)
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۷
|
||||
------------------------
|
||||
۲۶ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود فاصله ها
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۶
|
||||
------------------------
|
||||
۲۵ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود کرنینگ
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۵
|
||||
------------------------
|
||||
۲۲ اسفند ۱۳۹۴
|
||||
|
||||
- تصحیح نقاط ـت ـث
|
||||
- بهبود م
|
||||
- تصحیح ص
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۴
|
||||
------------------------
|
||||
۲۱ اسفند ۱۳۹۴
|
||||
|
||||
- بازنگری کلی در حالت ضخیم
|
||||
- بهبود م
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۳
|
||||
------------------------
|
||||
۲۱ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود هـ ـمـ مـ م ر ـر و ـو لا ـلا ـن ن ـق ق
|
||||
- بهبود حالات ط ص س
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۲
|
||||
------------------------
|
||||
۲۰ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود هـ
|
||||
- بهبود ـم در حالت ضخیم
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۱
|
||||
------------------------
|
||||
۱۷ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود نقاط
|
||||
- اصلاح ق ـق ـع
|
||||
- بهبود سرکش گاف در حالت ضخیم
|
||||
- اضافه شدن گلیف های ه همزه دار
|
||||
- اصلاح برخی اعراب
|
||||
|
||||
|
||||
نسخه ۲-کاندیدای انتشار ۰
|
||||
------------------------
|
||||
۱۶ اسفند ۱۳۹۴
|
||||
|
||||
- بزرگتر شدن کل فونت
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۵
|
||||
----------------------
|
||||
۱۵ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود هـ ـم
|
||||
- بهبود نقاط
|
||||
- بهبود نقطه در حالات خ
|
||||
- تصحیح ـفـ ـقـ
|
||||
- بهبود نقاط ـچ در حالت ضخیم
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۴
|
||||
----------------------
|
||||
۱۳ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود مـ ـمـ م سـ ـسـ هـ ـهـ و حالات ص
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۳
|
||||
----------------------
|
||||
۱۱ اسفند ۱۳۹۴
|
||||
|
||||
- تغییر شکل ـم و بهبود مـ ـمـ م ۶ همزه
|
||||
- تصحیح ـف در حالت ضخیم
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۲
|
||||
----------------------
|
||||
۸ اسفند ۱۳۹۴
|
||||
|
||||
- بهبود ح ـح حـ ـحـ بـ سـ س ق ن ـع ع ۷ ۸
|
||||
- بهبود نقطه ها
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۱
|
||||
----------------------
|
||||
۱۵ بهمن ۱۳۹۴
|
||||
|
||||
- اصلاح لا ـلا ی خ هـ طـ ـطـ ـق س ـسـ ـس سـ مـ ـمـ ـم طـ ـطـ
|
||||
- اصلاح مد
|
||||
- بازنگری در کرنینگ ارقام
|
||||
|
||||
|
||||
نسخه ۲-بتا-رفع اشکال ۰
|
||||
----------------------
|
||||
۱۲ دی ۱۳۹۴
|
||||
|
||||
- تصحیح اعراب
|
||||
- تصحیح کرنینگ
|
||||
- تصحیح گلیف ها و اندازه ها
|
||||
|
||||
|
||||
نسخه ۲-بتا
|
||||
----------
|
||||
۱۱ دی ۱۳۹۴
|
||||
|
||||
- تغییر کل سایز قلم
|
||||
- تغییر فاصله
|
||||
- تنظیم مجدد سایز ضخیم
|
||||
- تصحیح برخی گلیفها
|
||||
|
||||
نسخه ۲-آلفا
|
||||
-----------
|
||||
۲۹ آذر ۱۳۹۴
|
||||
|
||||
- تغییرات و باز طراحی گسترده در گلیفها
|
||||
|
||||
|
||||
نسخه ۱.۱۲.۱
|
||||
-----------
|
||||
۲۰ آذر ۱۳۹۴
|
||||
|
||||
- اصلاح اندازه ج
|
||||
- اصلاح سایز گلیف های علائم و ارقام در ضخیم
|
||||
- حذف ارقام لاتین
|
||||
- اصلاح د س ـسـ
|
||||
- اصلاحات جزئی در شکل گلیف ها
|
||||
|
||||
نسخه ۱.۱۲
|
||||
---------
|
||||
۲۰ آذر ۱۳۹۴
|
||||
|
||||
- اصلاحات زیاد بر روی گلیف ها و کرنینگ
|
||||
|
||||
نسخه ۱.۱۱
|
||||
---------
|
||||
۱۸ آذر ۱۳۹۴
|
||||
|
||||
- اصلاحات در فاصله ها
|
||||
- بهبود ح ـح ـع ع ـک ـکـ ف ق ۵
|
||||
|
||||
|
||||
نسخه ۱.۱۰.۸
|
||||
-----------
|
||||
۸ آذر ۱۳۹۴
|
||||
|
||||
- اصلاحاتی بر روی علائم و اندازه ها
|
||||
- اصلاح همزه
|
||||
|
||||
|
||||
نسخه ۱.۱۰.۷
|
||||
-----------
|
||||
۲۴ آبان ۱۳۹۴
|
||||
|
||||
- بهبود ـم
|
||||
|
||||
نسخه ۱.۱۰.۶
|
||||
-----------
|
||||
۲۱ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح گلیف های ـک ـکـ
|
||||
|
||||
نسخه ۱.۱۰.۵
|
||||
-----------
|
||||
۱۷ آبان ۱۳۹۴
|
||||
|
||||
- حذف عبارت کپی رایت اضافی
|
||||
|
||||
نسخه ۱.۱۰.۴
|
||||
-----------
|
||||
۱۵ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح مکان نقطه های پ چ
|
||||
|
||||
نسخه ۱.۱۰.۳
|
||||
-----------
|
||||
۱۵ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح دو نقطه و سه نقطه (نزدیکتر شدن به هم)
|
||||
- اصلاح ـم
|
||||
|
||||
نسخه ۱.۱۰.۲
|
||||
-----------
|
||||
۱۳ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح ـم
|
||||
|
||||
نسخه ۱.۱۰.۱
|
||||
-----------
|
||||
۱۳ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح گلیف ۶
|
||||
- اصلاح اعراب
|
||||
|
||||
نسخه ۱.۱۰
|
||||
---------
|
||||
۱۳ آبان ۱۳۹۴
|
||||
|
||||
-باز طراحی حرف ـم
|
||||
- اضافه شدن داده های هینتینگ با استفاده از نرم افزار ttfautohint (با تشکر از Salar Khalilzadeh-salarcode)
|
||||
|
||||
نسخه ۱.۹.۵
|
||||
----------
|
||||
۸ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح حرف ی برای رندر بهتر در فایرفاکس
|
||||
|
||||
نسخه ۱.۹.۴
|
||||
----------
|
||||
۸ آبان ۱۳۹۴
|
||||
|
||||
- ضخیم تر شدن حرف ی به مقدار کم
|
||||
|
||||
نسخه ۱.۹.۳
|
||||
----------
|
||||
۷ آبان ۱۳۹۴
|
||||
|
||||
- باز طراحی حرف ی
|
||||
|
||||
نسخه ۱.۹.۲
|
||||
----------
|
||||
۷ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح اعراب برخی حروف
|
||||
- تصحیح نقطه حرف ی عربی
|
||||
|
||||
نسخه ۱.۹.۱
|
||||
----------
|
||||
۷ آبان ۱۳۹۴
|
||||
|
||||
- اصلاحات مجدد در اندازه های فونت
|
||||
|
||||
نسخه ۱.۹
|
||||
--------
|
||||
۷ آبان ۱۳۹۴
|
||||
|
||||
- اصلاحات کلیدی و مهم در اندازه های فونت (با تشکر از A_O)
|
||||
|
||||
نسخه ۱.۸.۶
|
||||
----------
|
||||
۶ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح مکان نقطه های سه تایی
|
||||
- تصحیح جهت حرف حـ
|
||||
|
||||
نسخه ۱.۸.۵
|
||||
----------
|
||||
۵ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح مکان نقاط برخی حروف
|
||||
|
||||
نسخه ۱.۸.۴
|
||||
----------
|
||||
۵ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح شکل عدد ۳
|
||||
- حذف برخی ردیف های lookup اضافه
|
||||
|
||||
نسخه ۱.۸.۳
|
||||
----------
|
||||
۴ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح مشکل در هم رفتگی حروف متصل در حالت ضخیم
|
||||
|
||||
نسخه ۱.۸.۲
|
||||
----------
|
||||
۴ آبان ۱۳۹۴
|
||||
|
||||
- تصحیح مکان نقاط نویسههای چ و چـ
|
||||
|
||||
نسخه ۱.۸.۱
|
||||
----------
|
||||
۴ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح جزئی بر روی انتهای حروف کشیده برای نمایش بهتر و یا صاف تر
|
||||
- تصحیح مکان نقطه حروف یـ و ـيـ عربی
|
||||
|
||||
|
||||
نسخه ۱.۸
|
||||
--------
|
||||
۳ آبان ۱۳۹۴
|
||||
|
||||
- اضافه شدن نویسه های نیم فاصله و فاصله مجازی. (با تشکر از ahmadali shafiee-ahmadalli)
|
||||
- تصحیح مکان نقطه حرف ق
|
||||
|
||||
|
||||
نسخه ۱.۷.۸
|
||||
----------
|
||||
۲ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح سایز طول گلیف عدد صفر لاتین (طول اعداد یکسان باید باشد)
|
||||
|
||||
نسخه ۱.۷.۷
|
||||
----------
|
||||
۲ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح گلیف (ـ)
|
||||
|
||||
نسخه ۱.۷.۶
|
||||
----------
|
||||
۲ آبان ۱۳۹۴
|
||||
|
||||
- اصلاح حرف هـ
|
||||
- اصلاح مکان نقاط برخی حروف
|
||||
- اصلاحات بیشتر بر روی اعراب
|
||||
|
||||
نسخه ۱.۷.۵
|
||||
----------
|
||||
۱ آبان ۱۳۹۴
|
||||
|
||||
- اصلاحات مجدد اعراب با فواصل بهتر
|
||||
|
||||
نسخه ۱.۷.۴
|
||||
----------
|
||||
۱ آبان ۱۳۹۴
|
||||
|
||||
- اصلاحات فراوان اعراب
|
||||
|
||||
نسخه ۱.۷.۳
|
||||
----------
|
||||
۳۰ مهر ۱۳۹۴
|
||||
|
||||
- اصلاحات جزئی
|
||||
- اضافه شدن نسخه تمام اعداد فارسی
|
||||
|
||||
نسخه ۱.۷.۲
|
||||
----------
|
||||
۳۰ مهر ۱۳۹۴
|
||||
|
||||
- تصحیح گلیف های م و ـم
|
||||
|
||||
نسخه ۱.۷.۱
|
||||
----------
|
||||
۳۰ مهر ۱۳۹۴
|
||||
|
||||
- تصحیح اعراب
|
||||
- تصحیح حرف هـ
|
||||
- تصحیح حرف ـم
|
||||
|
||||
نسخه ۱.۷
|
||||
--------
|
||||
۳۰ مهر ۱۳۹۴
|
||||
|
||||
- باز طراحی گلیف ویرگول (با تشکر از Ebrahim Byagowi-ebraminio)
|
||||
- باز طراحی گلیف نقطه ویرگول
|
||||
- تصحیح اندازه و مکان اعراب کل حروف
|
||||
- تصحیح جزئی شکل حرف عـ
|
||||
|
||||
نسخه ۱.۶
|
||||
--------
|
||||
۲۸ مهر ۱۳۹۴
|
||||
|
||||
- تغییر شکل گلیف ممیز (با تشکر از Ebrahim Byagowi-ebraminio)
|
||||
- تنظیم مجدد فاصله های حروف در حالت ضخیم
|
||||
|
||||
نسخه ۱.۵.۳
|
||||
----------
|
||||
۲۷ مهر ۱۳۹۴
|
||||
|
||||
- اصلاحات کرنینگ
|
||||
|
||||
نسخه ۱.۵.۲
|
||||
----------
|
||||
۲۷ مهر ۱۳۹۴
|
||||
|
||||
- اصلاحات کرنینگ
|
||||
|
||||
نسخه ۱.۵.۱
|
||||
----------
|
||||
۲۷ مهر ۱۳۹۴
|
||||
|
||||
- برخی اصلاحات کرنینگ
|
||||
|
||||
نسخه ۱.۵
|
||||
----------
|
||||
۲۷ مهر ۱۳۹۴
|
||||
|
||||
- اضافه شدن کرنینگ برای حروف لازم
|
||||
|
||||
نسخه ۱.۴.۴
|
||||
----------
|
||||
۲۶ مهر ۱۳۹۴
|
||||
|
||||
- بهبود برخی از گلیف ها برای نمایش بهتر در فایرفاکس و اینترنت اکسپلورر (با تشکر از Salar Khalilzadeh-salarcode)
|
||||
|
||||
نسخه ۱.۴.۳
|
||||
----------
|
||||
۲۶ مهر ۱۳۹۴
|
||||
|
||||
- حل مشکل عدد ۹ در حالت نرمال
|
||||
- بهبود حرف ن در حالت ضخیم
|
||||
|
||||
نسخه ۱.۴.۲
|
||||
----------
|
||||
۲۶ مهر ۱۳۹۴
|
||||
|
||||
- اضافه شدن گلیف گیلکی دوم ۊ
|
||||
- برخی اصلاحات جزئي
|
||||
|
||||
نسخه ۱.۴.۱
|
||||
----------
|
||||
۲۵ مهر ۱۳۹۴
|
||||
|
||||
- تصحیح اندازه گلیف های غیر عربی از جمله اعداد
|
||||
- اضافه شدن فایل فونت فورج (با تشکر از Sasan Cooper-sasy360)
|
||||
|
||||
|
||||
نسخه ۱.۴
|
||||
--------
|
||||
۲۵ مهر ۱۳۹۴
|
||||
|
||||
- حرف ۊ از حروف گیلکی اضافه شد (با تشکر از ورگ v6rg).
|
||||
- مشکل اعراب حروف حل شد.
|
||||
|
||||
نسخه ۱.۳.۱
|
||||
----------
|
||||
۲۳ مهر ۱۳۹۴
|
||||
|
||||
- حل مشکل نمایش در مک. (با تشکر از Arvin Jenabi و Sajad Abedi)
|
||||
|
||||
نسخه ۱.۰
|
||||
--------
|
||||
۲۲ مهر ۱۳۹۴
|
||||
|
||||
- اولین نسخه
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,51 +0,0 @@
|
|||
Changes by Saber Rastikerdar are in public domain.
|
||||
Glyphs and data from Roboto font are licensed under the Apache License, Version 2.0.
|
||||
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||
a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute the
|
||||
Font Software, including without limitation the rights to use, copy, merge,
|
||||
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice shall
|
||||
be included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||
are renamed to names not containing either the words "Bitstream" or the word
|
||||
"Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or Font
|
||||
Software that has been modified and is distributed under the "Bitstream
|
||||
Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but no
|
||||
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||
FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
|
@ -1,111 +0,0 @@
|
|||
# Vazir-Font
|
||||
A Persian (Farsi) Font
|
||||
|
||||
[](https://travis-ci.org/rastikerdar/vazir-font)
|
||||
[](https://badge.fury.io/js/vazir-font)
|
||||
|
||||
|
||||
<p dir="rtl">
|
||||
فونت فارسی وزیر <br />
|
||||
|
||||
<p dir="rtl"><a href="http://rastikerdar.github.io/vazir-font/">نمایش فونت</a></p>
|
||||
<p dir="rtl"><a href="https://github.com/rastikerdar/vazir-font/releases">صفحه دریافت (دانلود) بسته فونت شامل فایل های ttf,woff,eot</a></p> <br />
|
||||
|
||||
<p dir="rtl">متن نمونه:</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="./sample.png">
|
||||
</p>
|
||||
|
||||
<br>
|
||||
|
||||
<p dir="rtl"> با تشکر از برنامه <a href="https://fontforge.github.io">FontForge</a></p>
|
||||
<p dir="rtl"> بر مبنای فونت <a href="http://dejavu-fonts.org">DejaVu Sans 2.35</a></p>
|
||||
|
||||
</p>
|
||||
<p lang="fa" dir="rtl" align="right">
|
||||
نسخه های بدون حروف لاتین یا تمام ارقام فارسی درون بسته فشرده موجود میباشد.
|
||||
</p>
|
||||
<h1 dir="rtl">
|
||||
طریقه استفاده در صفحات وب:
|
||||
</h1>
|
||||
|
||||
<p dir="rtl">
|
||||
کد زیر را در قسمت style یا فایل css وارد نمایید:
|
||||
</p>
|
||||
|
||||
|
||||
```css
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir.eot');
|
||||
src: url('Vazir.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir.woff') format('woff'),
|
||||
url('Vazir.ttf') format('truetype');
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Bold.eot');
|
||||
src: url('Vazir-Bold.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Bold.woff') format('woff'),
|
||||
url('Vazir-Bold.ttf') format('truetype');
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: Vazir;
|
||||
src: url('Vazir-Light.eot');
|
||||
src: url('Vazir-Light.eot?#iefix') format('embedded-opentype'),
|
||||
url('Vazir-Light.woff') format('woff'),
|
||||
url('Vazir-Light.ttf') format('truetype');
|
||||
font-weight: 300;
|
||||
}
|
||||
```
|
||||
|
||||
## Install
|
||||
|
||||
#### Download
|
||||
Grab the [latest release](https://github.com/rastikerdar/vazir-font/releases/latest) file.
|
||||
|
||||
#### Bower
|
||||
```
|
||||
bower install vazir-font --save
|
||||
```
|
||||
|
||||
#### npm
|
||||
```
|
||||
npm install vazir-font
|
||||
```
|
||||
Fonts will be copied to `npm_modules/vazir-font/dist` directory
|
||||
|
||||
#### CDN
|
||||
Link fonts from the [RawGit](https://rawgit.com) CDN:
|
||||
|
||||
```html
|
||||
<link href="https://cdn.rawgit.com/rastikerdar/vazir-font/v[X.Y.Z]/dist/font-face.css" rel="stylesheet" type="text/css" />
|
||||
```
|
||||
|
||||
Replace [X.Y.Z] with the latest version (e.g. 16.1.0) and integrate the font into your CSS:
|
||||
|
||||
```
|
||||
font-family: 'Vazir', sans-serif;
|
||||
```
|
||||
|
||||
#### Homebrew
|
||||
You can install the font on macOS machines by tapping the caskroom/fonts repo:
|
||||
|
||||
```shell
|
||||
brew tap caskroom/fonts
|
||||
brew install font-vazir
|
||||
```
|
||||
|
||||
#### Arch Linux
|
||||
Arch user's could use [vazir-fonts](https://aur.archlinux.org/packages/vazir-fonts/) package from [AUR](https://aur.archlinux.org/) repository to install vazir font.
|
||||
Use your favourite [AUR helper](https://wiki.archlinux.org/index.php/AUR_helpers) like pacaur or yaourt for installing package:
|
||||
|
||||
```shell
|
||||
pacaur -S vazir-fonts
|
||||
```
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24" height="24" viewBox="0 0 24 24"><defs><linearGradient id="a" x1="0.5" y1="0.124" x2="0.5" y2="1" gradientUnits="objectBoundingBox"><stop offset="0" stop-color="#bdc7d2"/><stop offset="1" stop-color="#bdc7d2"/></linearGradient></defs><g transform="translate(-62.872 2.5)"><g transform="translate(67.741 4.901)"><path d="M91.379,146.986H80.858a1.954,1.954,0,0,0-1.947,2.117l.911,10.866a1.954,1.954,0,0,0,1.947,1.79h8.7a1.954,1.954,0,0,0,1.947-1.79l.911-10.866a1.954,1.954,0,0,0-1.947-2.117Zm.518,2-.911,10.866a.52.52,0,0,1-.518.477h-8.7a.52.52,0,0,1-.518-.477l-.911-10.866a.52.52,0,0,1,.518-.564H91.379A.52.52,0,0,1,91.9,148.983Z" transform="translate(-78.888 -146.969)" fill="url(#a)"/><path d="M89.983,161.292h-8.7a1.97,1.97,0,0,1-1.963-1.806L78.41,148.62a1.97,1.97,0,0,1,1.963-2.135H90.895a1.97,1.97,0,0,1,1.963,2.135l-.911,10.866a1.97,1.97,0,0,1-1.963,1.806Zm-9.609-14.773a1.937,1.937,0,0,0-1.93,2.1l.911,10.866a1.937,1.937,0,0,0,1.93,1.775h8.7a1.937,1.937,0,0,0,1.93-1.775l.911-10.866a1.937,1.937,0,0,0-1.93-2.1H80.374Zm9.609,13.34h-8.7a.54.54,0,0,1-.535-.492L79.839,148.5a.537.537,0,0,1,.535-.582H90.895a.537.537,0,0,1,.535.582l-.911,10.866A.54.54,0,0,1,89.983,159.858Zm-9.609-11.906a.5.5,0,0,0-.5.546l.911,10.866a.506.506,0,0,0,.5.461h8.7a.506.506,0,0,0,.5-.461L91.4,148.5a.5.5,0,0,0-.5-.546Z" transform="translate(-78.404 -146.485)" fill="url(#a)"/></g><g transform="translate(67.372)"><path d="M68.589,4.627H82.321a.717.717,0,0,0,0-1.433h-2.6v-.74A1.956,1.956,0,0,0,77.765.5H73.146a1.956,1.956,0,0,0-1.954,1.954v.74h-2.6a.717.717,0,1,0,0,1.433Zm4.037-2.173a.52.52,0,0,1,.52-.52h4.619a.52.52,0,0,1,.52.52v.707h-5.66Z" transform="translate(-67.855 -0.483)" fill="url(#a)"/><path d="M81.838,4.16H68.105a.733.733,0,0,1,0-1.467h2.586V1.97A1.973,1.973,0,0,1,72.662,0h4.619a1.973,1.973,0,0,1,1.97,1.97v.723h2.586a.733.733,0,1,1,0,1.467ZM68.105,2.727a.7.7,0,0,0,0,1.4H81.838a.7.7,0,1,0,0-1.4h-2.62V1.97A1.939,1.939,0,0,0,77.281.033H72.662A1.939,1.939,0,0,0,70.725,1.97v.757Zm9.713-.032H72.125V1.97a.538.538,0,0,1,.537-.537h4.619a.537.537,0,0,1,.537.537Zm-5.66-.033h5.626V1.97a.5.5,0,0,0-.5-.5H72.662a.5.5,0,0,0-.5.5v.691Z" transform="translate(-67.372)" fill="url(#a)"/></g><g transform="translate(70.992 8.423)"><path d="M177.505,252.894a.717.717,0,1,0-1.43.095l.416,6.3a.717.717,0,0,0,.714.669l.048,0a.717.717,0,0,0,.668-.762Z" transform="translate(-176.057 -252.208)" fill="url(#a)"/><path d="M176.721,259.49a.735.735,0,0,1-.731-.685l-.416-6.3a.733.733,0,1,1,1.464-.1l.416,6.3a.734.734,0,0,1-.684.78Zm-.415-7.731-.047,0a.7.7,0,0,0-.652.745l.416,6.3a.7.7,0,1,0,1.4-.092l-.416-6.3A.7.7,0,0,0,176.306,251.759Z" transform="translate(-175.572 -251.726)" fill="url(#a)"/></g><g transform="translate(74.238 8.423)"><path d="M273.8,252.226a.717.717,0,0,0-.717.717v6.3a.717.717,0,0,0,1.433,0v-6.3A.717.717,0,0,0,273.8,252.226Z" transform="translate(-273.065 -252.209)" fill="url(#a)"/><path d="M273.315,259.49a.734.734,0,0,1-.733-.733v-6.3a.733.733,0,1,1,1.467,0v6.3A.734.734,0,0,1,273.315,259.49Zm0-7.731a.7.7,0,0,0-.7.7v6.3a.7.7,0,1,0,1.4,0v-6.3A.7.7,0,0,0,273.315,251.759Z" transform="translate(-272.582 -251.726)" fill="url(#a)"/></g><g transform="translate(77.068 8.423)"><path d="M358.833,252.226a.717.717,0,0,0-.762.668l-.416,6.3a.717.717,0,0,0,.668.762l.048,0a.717.717,0,0,0,.714-.669l.416-6.3A.717.717,0,0,0,358.833,252.226Z" transform="translate(-357.636 -252.208)" fill="url(#a)"/><path d="M357.887,259.49l-.049,0a.734.734,0,0,1-.684-.78l.416-6.3a.733.733,0,0,1,1.464.1l-.416,6.3A.735.735,0,0,1,357.887,259.49Zm.415-7.731a.7.7,0,0,0-.7.654l-.416,6.3a.7.7,0,1,0,1.4.092l.416-6.3a.7.7,0,0,0-.652-.745Z" transform="translate(-357.153 -251.726)" fill="url(#a)"/></g></g><path d="M0,0H24V24H0Z" fill="none"/></svg>
|
Before Width: | Height: | Size: 3.7 KiB |
|
@ -1,11 +1,11 @@
|
|||
@font-face {
|
||||
font-family: var(--font);
|
||||
font-family: IRANSansX;
|
||||
src: url("../fonts/iransans/woff/IRANSansXFaNum-Bold.woff") format("woff"),
|
||||
url("../fonts/iransans/woff2/IRANSansXFaNum-Bold.woff2") format("woff2");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: var(--font);
|
||||
font-family: IRANSansX;
|
||||
src: url("../fonts/iransans/woff/IRANSansXFaNum-Regular.woff") format("woff"),
|
||||
url("../fonts/iransans/woff2/IRANSansXFaNum-Regular.woff2") format("woff2");
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
@font-face {
|
||||
font-family: estedad;
|
||||
src: url("../fonts/Estedad-v5.0/Estedad.ttf");
|
||||
src: url("../fonts/Estedad-v5.0/Estedad.woff2") format("woff2"),
|
||||
url("../fonts/Estedad-v5.0/Estedad.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
|
@ -1,3 +1,2 @@
|
|||
@import "../fonts/tavasi/style";
|
||||
@import "../img/icomoon/style";
|
||||
@import "./sahel";
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
@font-face {
|
||||
font-family: sahel;
|
||||
src: url("../fonts/sahel/Farsi-Digits/Sahel-FD.eot");
|
||||
src: url("../fonts/sahel/Farsi-Digits/Sahel-FD.eot?#iefix")
|
||||
format("embedded-opentype"),
|
||||
url("../fonts/sahel/Farsi-Digits/Sahel-FD.woff2") format("woff2"),
|
||||
url("../fonts/sahel/Farsi-Digits/Sahel-FD.woff") format("woff"),
|
||||
url("../fonts/sahel/Farsi-Digits/Sahel-FD.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
@font-face {
|
||||
font-family: vazir;
|
||||
src: url("../fonts/vazir-font-v16.1.0/Farsi-Digits-Without-Latin/Vazir-FD-WOL.ttf");
|
||||
src: url("../fonts/vazir-font-v16.1.0/Farsi-Digits-Without-Latin/Vazir-FD-WOL.eot?#iefix")
|
||||
format("embedded-opentype"),
|
||||
url("../fonts/vazir-font-v16.1.0/Farsi-Digits-Without-Latin/Vazir-FD-WOL.woff2") format("woff2"),
|
||||
url("../fonts/vazir-font-v16.1.0/Farsi-Digits-Without-Latin/Vazir-FD-WOL.woff") format("woff"),
|
||||
url("../fonts/vazir-font-v16.1.0/Farsi-Digits-Without-Latin/Vazir-FD-WOL.ttf") format("truetype");
|
||||
font-weight: normal;
|
||||
}
|
46
assets/common/vendors/counter/counter.js
vendored
Normal file
46
assets/common/vendors/counter/counter.js
vendored
Normal file
|
@ -0,0 +1,46 @@
|
|||
(function ($) {
|
||||
$.fn.countTo = function (options) {
|
||||
// merge the default plugin settings with the custom options
|
||||
options = $.extend({}, $.fn.countTo.defaults, options || {});
|
||||
|
||||
// how many times to update the value, and how much to increment the value on each update
|
||||
var loops = Math.ceil(options.speed / options.refreshInterval),
|
||||
increment = (options.to - options.from) / loops;
|
||||
|
||||
return $(this).each(function () {
|
||||
var _this = this,
|
||||
loopCount = 0,
|
||||
value = options.from,
|
||||
interval = setInterval(updateTimer, options.refreshInterval);
|
||||
|
||||
function updateTimer() {
|
||||
value += increment;
|
||||
loopCount++;
|
||||
$(_this).html(value.toFixed(options.decimals));
|
||||
|
||||
if (typeof options.onUpdate == "function") {
|
||||
options.onUpdate.call(_this, value);
|
||||
}
|
||||
|
||||
if (loopCount >= loops) {
|
||||
clearInterval(interval);
|
||||
value = options.to;
|
||||
|
||||
if (typeof options.onComplete == "function") {
|
||||
options.onComplete.call(_this, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$.fn.countTo.defaults = {
|
||||
from: 0, // the number the element should start at
|
||||
to: 100, // the number the element should end at
|
||||
speed: 1000, // how long it should take to count between the target numbers
|
||||
refreshInterval: 100, // how often the element should be updated
|
||||
decimals: 0, // the number of decimal places to show
|
||||
onUpdate: null, // callback method for every time the element is updated,
|
||||
onComplete: null, // callback method for when the element finishes updating
|
||||
};
|
||||
})(jQuery);
|
|
@ -43,8 +43,8 @@
|
|||
bottom: 0;
|
||||
}
|
||||
.inner-wrapper {
|
||||
// max-width: 47.5em;
|
||||
// margin: 0 auto;
|
||||
max-width: 47.5em;
|
||||
margin: 0 auto;
|
||||
text-align: center;
|
||||
|
||||
.title {
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
}
|
||||
@media only screen and (min-width: 768px) and (max-width: 991.98px) {
|
||||
.search-section .top-content .inner-wrapper {
|
||||
// padding-top: 10em;
|
||||
padding-top: 10em;
|
||||
}
|
||||
/* استایلهای مربوط به اندازههای بین 768 تا 991 پیکسل */
|
||||
}
|
||||
|
|
|
@ -5,8 +5,9 @@
|
|||
<header>
|
||||
<majles-navbar></majles-navbar>
|
||||
</header>
|
||||
<div class="inner-wrapper d-flex flex-column col-12">
|
||||
<div class="">
|
||||
|
||||
<div class="inner-wrapper">
|
||||
<div class="d-md-none d-lg-block">
|
||||
<img
|
||||
src="assets/majles/img/logo_200x200.png"
|
||||
:alt="appLongTitle()"
|
||||
|
@ -18,32 +19,44 @@
|
|||
<h1 class="sub-title">
|
||||
{{ title2 }}<span style="font-size: 1.5rem">{{ title3 }}</span>
|
||||
</h1>
|
||||
<div class=" d-flex justify-content-center">
|
||||
<form
|
||||
class="ms-search-form px-3 col-12 col-sm-8 col-xl-6"
|
||||
role="search"
|
||||
@submit.prevent="searchNavigateList"
|
||||
>
|
||||
<auto-complation
|
||||
dir="ltr"
|
||||
contentKey="qasection"
|
||||
:showAppend="false"
|
||||
:showPrepend="true"
|
||||
:showAppendSearchButton="false"
|
||||
@onSearchStart="searchNavigateList"
|
||||
@on-search-navigate-list="searchNavigateList"
|
||||
:placeholder="'جستجو در هزاران محتوای قوانین'"
|
||||
ref="autoComplationRef"
|
||||
></auto-complation>
|
||||
<!-- :listAutocomplate="listAutocomplate" -->
|
||||
<!-- @selectAutocomplate2="selectAutocomplate2" -->
|
||||
<!-- </div> -->
|
||||
</form>
|
||||
</div>
|
||||
<form
|
||||
class="ms-search-form px-3"
|
||||
role="search"
|
||||
@submit.prevent="searchNavigateList"
|
||||
>
|
||||
<div class="input-group mb-5" dir="ltr">
|
||||
<div class="input-group-prepend">
|
||||
<button
|
||||
dir="rtl"
|
||||
class="btn"
|
||||
type="button"
|
||||
id="button-addon2"
|
||||
@click.prevent="searchNavigateList()"
|
||||
>
|
||||
جستجو
|
||||
<span class="tavasi tavasi-Component-198--1"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<input
|
||||
v-focus
|
||||
class="form-control"
|
||||
ref="search-input"
|
||||
dir="rtl"
|
||||
v-model.trim="searchText"
|
||||
type="search"
|
||||
id="search-query"
|
||||
placeholder="جستجو در قوانین ..."
|
||||
name="search-query"
|
||||
size="60"
|
||||
@keyup.enter="searchNavigateList"
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="center-content">
|
||||
<my-counter-list></my-counter-list>
|
||||
<!-- <my-counter-list title=""></my-counter-list> -->
|
||||
</div>
|
||||
<div class="footer-content">
|
||||
<div class="container-fluid">
|
||||
|
@ -73,7 +86,7 @@
|
|||
<div class="col-sm-6 mb-2 mb-sm-0 col-md mb-sm-2 mb-md-0">
|
||||
<div class="link-item-container">
|
||||
<NuxtLink
|
||||
:to="urlResolver('qq308235')"
|
||||
:to="urlResolver('qq308235')"
|
||||
target="_blank"
|
||||
class="btn link-item"
|
||||
>
|
||||
|
@ -93,7 +106,7 @@
|
|||
<div class="col-sm-6 mb-2 mb-sm-0 col-md">
|
||||
<div class="link-item-container">
|
||||
<NuxtLink
|
||||
:to="urlResolver('qq38162')"
|
||||
:to="urlResolver('qq38162')"
|
||||
target="_blank"
|
||||
class="btn link-item"
|
||||
>
|
||||
|
@ -113,7 +126,7 @@
|
|||
<div class="col-sm-6 mb-2 mb-sm-0 col-md">
|
||||
<div class="link-item-container">
|
||||
<NuxtLink
|
||||
:to="urlResolver('qq233930')"
|
||||
:to="urlResolver('qq233930')"
|
||||
target="_blank"
|
||||
class="btn link-item"
|
||||
>
|
||||
|
@ -257,18 +270,6 @@ export default {
|
|||
// return routeData.href;
|
||||
},
|
||||
},
|
||||
components: {
|
||||
MyCounterList: defineAsyncComponent(() =>
|
||||
import("@components/other/MyCounterList.vue")
|
||||
),
|
||||
AutoComplation: defineAsyncComponent(() =>
|
||||
import("@search/components/global/AutoComplation.vue")
|
||||
),
|
||||
|
||||
// Navbar: () => import("@dashboard/majles/components/Navbar"),
|
||||
// MySystem: () => import("@dashboard/default/pages/MySystem"),
|
||||
// MyCircleProgress: () => import("@components/MyCircleProgress"),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -285,14 +286,6 @@ export default {
|
|||
// .main-page__content{
|
||||
// margin-right: 0px !important;
|
||||
// }
|
||||
.ms-search-form {
|
||||
.input-group {
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.subtitle {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.dropdown-menu {
|
||||
float: right;
|
||||
min-width: 13rem;
|
||||
|
@ -320,4 +313,4 @@ export default {
|
|||
margin-right: 0 !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</style>
|
|
@ -9,7 +9,6 @@
|
|||
data-toggle="dropdown"
|
||||
aria-haspopup="true"
|
||||
aria-expanded="false"
|
||||
data-bs-toggle="dropdown"
|
||||
>
|
||||
<span class="tavasi tavasi-more-vert"></span>
|
||||
</button>
|
||||
|
@ -35,8 +34,7 @@
|
|||
>
|
||||
<!-- put below line if authorization is ok. -->
|
||||
<!-- v-can="action.can" -->
|
||||
<MyNuxtImg :iconName="action.icon"></MyNuxtImg>
|
||||
<!-- <NuxtImg :src="prepareIcon(action)" alt="" class="img-fluid" /> -->
|
||||
<NuxtImg :src="prepareIcon(action)" alt="" class="img-fluid" />
|
||||
{{ action.title }}
|
||||
</button>
|
||||
</div>
|
||||
|
@ -50,7 +48,7 @@
|
|||
>
|
||||
<!-- put below line if authorization is ok. -->
|
||||
<!-- v-can="action.can" -->
|
||||
<MyNuxtImg :iconName="action.icon"></MyNuxtImg>
|
||||
<NuxtImg :src="prepareIcon(action)" alt="" class="img-fluid" />
|
||||
{{ action.title }}
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
<template>
|
||||
<NuxtImg :src="imgSrc" alt="" class="img-fluid" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* @vue-prop {Array} list - لیست
|
||||
* @vue-prop {*} clickedItem - آیتمی که کلیک شده است
|
||||
* @vue-prop {*} contextMenu - منو که از سمت والد دریافت میگردد
|
||||
* @vue-prop {*} parentComponent - کامپوننت والد
|
||||
*/
|
||||
|
||||
export default {
|
||||
// contextMenu: right click actions
|
||||
// list: folder or file list.
|
||||
// clickedItem: selected item in the loop.
|
||||
props: ["iconName"],
|
||||
async mounted() {
|
||||
let res = "";
|
||||
|
||||
try {
|
||||
res = await import(`assets/common/img/${this.iconName}.svg`);
|
||||
} catch (err) {
|
||||
res = await import(`assets/common/img/icomoon/SVG/${this.iconName}.svg`);
|
||||
}
|
||||
|
||||
this.imgSrc = res.default;
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
imgSrc: "",
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
|
@ -54,7 +54,7 @@ export default {
|
|||
.co-name {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid var(--primary,#00a762);
|
||||
border-bottom: 1px solid var(--primary);
|
||||
padding-bottom: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
padding-left: 2em;
|
||||
|
@ -85,10 +85,10 @@ export default {
|
|||
width: 1.2em;
|
||||
height: 1.2em;
|
||||
margin: 0.1em;
|
||||
border: 0.1em solid var(--primary,#00a762);
|
||||
border: 0.1em solid var(--primary);
|
||||
border-radius: 50%;
|
||||
animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
|
||||
border-color: var(--primary,#00a762) transparent transparent transparent;
|
||||
border-color: var(--primary) transparent transparent transparent;
|
||||
}
|
||||
|
||||
.lds-ring div:nth-child(1) {
|
||||
|
|
|
@ -5,10 +5,10 @@
|
|||
class="col-sm-12 col-md mb-5 mb-md-0 text-center"
|
||||
v-for="(counter, index) in list"
|
||||
>
|
||||
<my-counter-list-item
|
||||
<!-- <my-counter-list-item
|
||||
:counter="counter"
|
||||
:key="index + render"
|
||||
></my-counter-list-item>
|
||||
></my-counter-list-item> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -19,13 +19,13 @@
|
|||
import repoApi from "~/apis/repoApi";
|
||||
|
||||
export default {
|
||||
// props: {
|
||||
// listData: {
|
||||
// default() {
|
||||
// return [];
|
||||
// },
|
||||
// },
|
||||
// },
|
||||
props: {
|
||||
listData: {
|
||||
default() {
|
||||
return [];
|
||||
},
|
||||
},
|
||||
},
|
||||
async beforeMount() {
|
||||
try {
|
||||
const { $api } = useNuxtApp();
|
||||
|
@ -73,11 +73,6 @@ export default {
|
|||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
MyCounterListItem: defineAsyncComponent(() =>
|
||||
import("@components/other/MyCounterListItem.vue")
|
||||
),
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
class="d-md-flex justify-content-sm-center align-items-center"
|
||||
>
|
||||
<h2 class="counter-number mb-2 mb-md-0">
|
||||
<span>{{ displayValue }}</span>
|
||||
<span :class="counter.key + '-timer'">{{ counter.count }}</span>
|
||||
</h2>
|
||||
<div class="d-flex flex-column align-items-center align-items-lg-start">
|
||||
<p class="counter-text">{{ counter.title }}</p>
|
||||
|
@ -15,62 +15,36 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import "assets/common/vendors/counter/counter.js";
|
||||
|
||||
export default {
|
||||
props: ["counter"],
|
||||
data() {
|
||||
return {
|
||||
displayValue: 0,
|
||||
interval: null,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.startCount();
|
||||
},
|
||||
beforeUnmount() {
|
||||
if (this.interval) clearInterval(this.interval);
|
||||
const vm = this;
|
||||
|
||||
$(`.${vm.counter.key}-timer`).countTo({
|
||||
from: 0,
|
||||
to: vm.counter.total,
|
||||
speed: 7000,
|
||||
refreshInterval: 50,
|
||||
onComplete: function (value) {
|
||||
// console.debug(this);
|
||||
},
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
startCount() {
|
||||
const from = 0;
|
||||
const to = this.counter.total;
|
||||
const speed = 7000;
|
||||
const refreshInterval = 50;
|
||||
const decimals = 0;
|
||||
|
||||
const loops = Math.ceil(speed / refreshInterval);
|
||||
const increment = (to - from) / loops;
|
||||
|
||||
let value = from;
|
||||
let loopCount = 0;
|
||||
|
||||
this.interval = setInterval(() => {
|
||||
value += increment;
|
||||
loopCount++;
|
||||
this.displayValue = value.toFixed(decimals);
|
||||
|
||||
if (loopCount >= loops) {
|
||||
clearInterval(this.interval);
|
||||
this.displayValue = to.toFixed(decimals);
|
||||
}
|
||||
}, refreshInterval);
|
||||
},
|
||||
|
||||
goToRouteName() {
|
||||
this.$router.push({
|
||||
name: "search",
|
||||
name: "searchResult",
|
||||
query: {
|
||||
q: undefined,
|
||||
key: this.counter.routeName,
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
urlResolver() {
|
||||
|
||||
|
||||
const routeData = this.$router.resolve({
|
||||
name: "search",
|
||||
name: "searchResult",
|
||||
query: {
|
||||
q: undefined,
|
||||
key: this.counter.routeName,
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
import type { UseFetchOptions } from 'nuxt/app'
|
||||
|
||||
export function useApi<T>(
|
||||
url: string | (() => string),
|
||||
options?: UseFetchOptions<T>,
|
||||
) {
|
||||
return useFetch(url, {
|
||||
...options,
|
||||
$fetch: useNuxtApp().$api as typeof $fetch
|
||||
})
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
// // composables/useAuth.js
|
||||
|
||||
// export function useAuth() {
|
||||
// const token = ref(sessionStorage.getItem('id_token'));
|
||||
|
||||
// const setToken = (newToken) => {
|
||||
// token.value = newToken;
|
||||
// localStorage.setItem('id_token', newToken);
|
||||
// };
|
||||
|
||||
// const clearToken = () => {
|
||||
// token.value = null;
|
||||
// localStorage.removeItem('id_token');
|
||||
// sessionStorage.removeItem('id_token');
|
||||
// };
|
||||
|
||||
// return {
|
||||
// token,
|
||||
// setToken,
|
||||
// clearToken,
|
||||
// };
|
||||
// }
|
|
@ -1,81 +0,0 @@
|
|||
import type { FetchOptions } from 'ofetch'
|
||||
import { useStorage } from '@vueuse/core'
|
||||
|
||||
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'
|
||||
|
||||
interface HttpRequestOptions<T = unknown> extends FetchOptions {
|
||||
data?: T
|
||||
}
|
||||
|
||||
export const useHttpService = () => {
|
||||
const config = useRuntimeConfig()
|
||||
const token = useStorage('id_token', 'GuestAccess')
|
||||
|
||||
/**
|
||||
* Constructs the full API URL
|
||||
*/
|
||||
const getFullUrl = (endpoint: string): string => {
|
||||
return `${config.public.NUXT_PUBLIC_BASE_URL}${config.public.NUXT_PUBLIC_API_NAME}${endpoint}`
|
||||
}
|
||||
|
||||
/**
|
||||
* Base fetch method with common configuration
|
||||
*/
|
||||
const baseFetch = async <T = any>(
|
||||
method: HttpMethod,
|
||||
url: string,
|
||||
options: HttpRequestOptions = {}
|
||||
) => {
|
||||
const headers = {
|
||||
...options.headers,
|
||||
...(token.value ? { Authorization: token.value } : {})
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await $fetch<T>(getFullUrl(url), {
|
||||
method,
|
||||
headers,
|
||||
...options,
|
||||
body: options.data || options.body
|
||||
})
|
||||
|
||||
return response
|
||||
} catch (error) {
|
||||
// Handle errors globally or rethrow for specific handling
|
||||
console.error(`HTTP ${method} error for ${url}:`, error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
/**
|
||||
* GET request
|
||||
*/
|
||||
getRequest: <T = any>(url: string, options?: HttpRequestOptions) =>
|
||||
baseFetch<T>('GET', url, options),
|
||||
|
||||
/**
|
||||
* POST request
|
||||
*/
|
||||
postRequest: <T = any>(url: string, data?: any, options?: HttpRequestOptions) =>
|
||||
baseFetch<T>('POST', url, { ...options, data }),
|
||||
|
||||
/**
|
||||
* PUT request
|
||||
*/
|
||||
putRequest: <T = any>(url: string, data?: any, options?: HttpRequestOptions) =>
|
||||
baseFetch<T>('PUT', url, { ...options, data }),
|
||||
|
||||
/**
|
||||
* PATCH request
|
||||
*/
|
||||
patchRequest: <T = any>(url: string, data?: any, options?: HttpRequestOptions) =>
|
||||
baseFetch<T>('PATCH', url, { ...options, data }),
|
||||
|
||||
/**
|
||||
* DELETE request
|
||||
*/
|
||||
deleteRequest: <T = any>(url: string, options?: HttpRequestOptions) =>
|
||||
baseFetch<T>('DELETE', url, options)
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ export const useHadithaSearchComposable = <T>(url: string, options = {}) => {
|
|||
// const token = useCookie('auth-token') // Assuming you store the token in a cookie
|
||||
let token = useStorage("id_token", "GuestAccess");
|
||||
const config = useRuntimeConfig();
|
||||
console.info(config);
|
||||
|
||||
const baseURL =
|
||||
config.public.NUXT_PUBLIC_BASE_URL + config.public.NUXT_PUBLIC_API_NAME;
|
||||
|
@ -22,12 +23,4 @@ export const useHadithaSearchComposable = <T>(url: string, options = {}) => {
|
|||
baseURL,
|
||||
headers,
|
||||
});
|
||||
|
||||
// return useAsyncData(keyName, async () => {
|
||||
// return await $fetch(url, {
|
||||
// ...options,
|
||||
// baseURL,
|
||||
// headers,
|
||||
// });
|
||||
// });
|
||||
};
|
||||
|
|
|
@ -1,118 +0,0 @@
|
|||
// composables/useInfiniteScroll.ts
|
||||
import { ref, onMounted, onBeforeUnmount } from "vue";
|
||||
|
||||
export default function useInfiniteScroll(
|
||||
callback: () => Promise<void>,
|
||||
elementId?: string
|
||||
) {
|
||||
const route = useRoute();
|
||||
const isFetching = ref(false);
|
||||
const infiniteScroll = ref<HTMLElement | Window | null>(null);
|
||||
|
||||
// Throttle function to limit scroll event frequency
|
||||
const throttle = (func: (...args: any[]) => void, limit: number) => {
|
||||
let lastFunc: ReturnType<typeof setTimeout>;
|
||||
let lastRan: number;
|
||||
return function (this: any, ...args: any[]) {
|
||||
const context = this;
|
||||
if (!lastRan) {
|
||||
func.apply(context, args);
|
||||
lastRan = Date.now();
|
||||
} else {
|
||||
clearTimeout(lastFunc);
|
||||
lastFunc = setTimeout(() => {
|
||||
if (Date.now() - lastRan >= limit) {
|
||||
func.apply(context, args);
|
||||
lastRan = Date.now();
|
||||
}
|
||||
}, limit - (Date.now() - lastRan));
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
const checkScrollPosition = () => {
|
||||
if (isFetching.value || !infiniteScroll.value) return;
|
||||
|
||||
let scrollPosition: number;
|
||||
let threshold: number;
|
||||
let clientHeight: number;
|
||||
let scrollHeight: number;
|
||||
|
||||
if (infiniteScroll.value === window) {
|
||||
scrollPosition = window.scrollY || window.pageYOffset;
|
||||
clientHeight = document.documentElement.clientHeight;
|
||||
scrollHeight = document.documentElement.scrollHeight;
|
||||
} else {
|
||||
const el = infiniteScroll.value as HTMLElement;
|
||||
scrollPosition = el.scrollTop;
|
||||
clientHeight = el.clientHeight;
|
||||
scrollHeight = el.scrollHeight;
|
||||
}
|
||||
|
||||
threshold = scrollHeight - 100;
|
||||
const currentPosition = scrollPosition + clientHeight;
|
||||
|
||||
if (currentPosition >= threshold) {
|
||||
isFetching.value = true;
|
||||
callback().finally(() => {
|
||||
isFetching.value = false;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Throttled version of scroll handler
|
||||
const throttledScrollHandler = throttle(checkScrollPosition, 200);
|
||||
|
||||
const handleTouchEnd = () => {
|
||||
setTimeout(throttledScrollHandler, 100);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
console.info(route.name)
|
||||
|
||||
if (route.name == "hadithaSearch" || route.name == "hadithaLibrary") {
|
||||
const targetElement = elementId
|
||||
? document.getElementById(elementId)
|
||||
: window;
|
||||
|
||||
if (!targetElement) {
|
||||
console.warn(
|
||||
`Element ${elementId || "window"} not found for infinite scroll`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
infiniteScroll.value = targetElement;
|
||||
|
||||
if (targetElement === window) {
|
||||
window.addEventListener("scroll", throttledScrollHandler);
|
||||
window.addEventListener("touchend", handleTouchEnd);
|
||||
} else {
|
||||
targetElement.addEventListener("scroll", throttledScrollHandler);
|
||||
targetElement.addEventListener("touchend", handleTouchEnd);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (route.name == "hadithaSearch" || route.name == "hadithaLibrary") {
|
||||
if (!infiniteScroll.value) return;
|
||||
|
||||
if (infiniteScroll.value === window) {
|
||||
window.removeEventListener("scroll", throttledScrollHandler);
|
||||
window.removeEventListener("touchend", handleTouchEnd);
|
||||
} else {
|
||||
(infiniteScroll.value as HTMLElement).removeEventListener(
|
||||
"scroll",
|
||||
throttledScrollHandler
|
||||
);
|
||||
(infiniteScroll.value as HTMLElement).removeEventListener(
|
||||
"touchend",
|
||||
handleTouchEnd
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return { isFetching };
|
||||
}
|
|
@ -1,46 +0,0 @@
|
|||
// composables/useInfiniteScrollObserver.ts
|
||||
import { onBeforeUnmount, onMounted, ref } from "vue";
|
||||
|
||||
export default function useInfiniteScrollObserver(callback) {
|
||||
const observer = ref<IntersectionObserver | null>(null);
|
||||
const isFetching = ref(false);
|
||||
const infiniteScroll = ref<HTMLElement | null>(null);
|
||||
console.info("useInfiniteScrollObserver");
|
||||
|
||||
const initObserver = () => {
|
||||
console.info("useInfiniteScrollObserver");
|
||||
|
||||
observer.value = new IntersectionObserver(
|
||||
(entries) => {
|
||||
console.info("useInfiniteScrollObserver");
|
||||
|
||||
if (entries[0].isIntersecting && !isFetching.value) {
|
||||
isFetching.value = true;
|
||||
callback().finally(() => {
|
||||
isFetching.value = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
rootMargin: "200px", // Load when 200px away from viewport
|
||||
threshold: 0.1,
|
||||
}
|
||||
);
|
||||
|
||||
if (infiniteScroll.value) {
|
||||
observer.value.observe(infiniteScroll.value);
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
initObserver();
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (observer.value && infiniteScroll.value) {
|
||||
observer.value.unobserve(infiniteScroll.value);
|
||||
}
|
||||
});
|
||||
|
||||
return { isFetching, infiniteScroll };
|
||||
}
|
|
@ -1,38 +0,0 @@
|
|||
// composables/useLocalStorage.ts
|
||||
import { ref, watchEffect } from "vue";
|
||||
|
||||
export const useLocalStorage = <T>(key: string, defaultValue: T) => {
|
||||
const state = ref<T>(defaultValue);
|
||||
|
||||
// Only run on client-side
|
||||
if (process.client) {
|
||||
const readValue = () => {
|
||||
try {
|
||||
const item = window.localStorage.getItem(key);
|
||||
return item ? (JSON.parse(item) as T) : defaultValue;
|
||||
} catch (error) {
|
||||
console.warn(`Error reading localStorage key "${key}":`, error);
|
||||
return defaultValue;
|
||||
}
|
||||
};
|
||||
|
||||
state.value = readValue();
|
||||
|
||||
watchEffect(() => {
|
||||
try {
|
||||
window.localStorage.setItem(key, JSON.stringify(state.value));
|
||||
} catch (error) {
|
||||
console.warn(`Error setting localStorage key "${key}":`, error);
|
||||
}
|
||||
});
|
||||
|
||||
// Handle storage events from other tabs
|
||||
window.addEventListener("storage", (event) => {
|
||||
if (event.key === key) {
|
||||
state.value = readValue();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return state;
|
||||
};
|
11
dockerfile
11
dockerfile
|
@ -2,16 +2,13 @@ FROM node:22
|
|||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . .
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
|
||||
COPY . .
|
||||
RUN npm run build-haditha
|
||||
|
||||
RUN npm install -g pm2
|
||||
RUN pm2 start .output/server/index.mjs --name "nuxt-app"
|
||||
RUN pm2 save
|
||||
RUN pm2 startup
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["pm2-runtime", ".output/server/index.mjs"]
|
||||
CMD ["node", ".output/server/index.mjs"]
|
|
@ -6,7 +6,6 @@ import chat from "./routes/chat";
|
|||
import haditha from "./routes/haditha";
|
||||
import search from "./routes/search";
|
||||
import research from "./routes/research";
|
||||
import task from "./routes/task";
|
||||
|
||||
const envs = import.meta.env;
|
||||
let sassEnvVariables = "";
|
||||
|
@ -31,7 +30,7 @@ export default defineNuxtConfig({
|
|||
buildName.length - 1
|
||||
)}_ui/assets/${buildName}/images`
|
||||
); // Source folder (e.g., assets/images)
|
||||
const targetDir = path.resolve(__dirname, `public/img/${buildName}`); // Target folder (e.g., public/img)
|
||||
const targetDir = path.resolve(__dirname, `public/img/${buildName}`); // Target folder (e.g., public/images)
|
||||
|
||||
// Ensure the target directory exists
|
||||
fs.ensureDirSync(targetDir);
|
||||
|
@ -45,14 +44,14 @@ export default defineNuxtConfig({
|
|||
|
||||
"pages:extend"(pages) {
|
||||
// Add custom routes
|
||||
pages.push(...search, ...research, ...haditha, ...chat, ...task);
|
||||
pages.push(...search, ...research, ...haditha, ...chat);
|
||||
},
|
||||
},
|
||||
|
||||
nitro: {
|
||||
compressPublicAssets: true,
|
||||
prerender: {
|
||||
routes: ["/haditha", "/haditha/about-us", "/haditha/contact-us"], // Pre-render these routes
|
||||
routes: ["/haditha/about-us", "/haditha/contact-us"], // Pre-render these routes
|
||||
},
|
||||
},
|
||||
|
||||
|
@ -71,7 +70,7 @@ export default defineNuxtConfig({
|
|||
// "vuejs-paginate",
|
||||
],
|
||||
devtools: {
|
||||
enabled: true,
|
||||
enabled: process.env.NODE_ENV === "development",
|
||||
vscode: {
|
||||
reuseExistingServer: true,
|
||||
},
|
||||
|
@ -80,7 +79,7 @@ export default defineNuxtConfig({
|
|||
features: {
|
||||
inlineStyles: false,
|
||||
},
|
||||
debug: true,
|
||||
debug: false,
|
||||
// Modules and plugins
|
||||
modules: [
|
||||
"@pinia/nuxt",
|
||||
|
@ -93,23 +92,17 @@ export default defineNuxtConfig({
|
|||
"@nuxtjs/color-mode",
|
||||
"@nuxt/test-utils/module",
|
||||
// 'nuxt-delay-hydration',
|
||||
// "@nuxtjs/supabase",
|
||||
// "@nuxt/icon",
|
||||
"@nuxt/image",
|
||||
"nuxt-auth-utils"
|
||||
// "@nuxtjs/supabase",
|
||||
],
|
||||
icon: {
|
||||
// iconifyApiEndpoint: "iconifyApi",
|
||||
fallbackToApi: "client-only",
|
||||
// provider: "iconify",
|
||||
localApiEndpoint: "/iconifyapi/_nuxt_icon",
|
||||
customCollections: [
|
||||
{
|
||||
prefix: "haditha",
|
||||
dir: `./systems/${buildName.substring(
|
||||
0,
|
||||
buildName.length - 1
|
||||
)}_ui/assets/${buildName}/images/font-icons`,
|
||||
)}_ui/assets/${buildName}/font-icons`,
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -177,10 +170,8 @@ export default defineNuxtConfig({
|
|||
"@research": "~/systems/research_ui",
|
||||
"@haditha": "~/systems/hadith_ui",
|
||||
"@chat": "~/systems/chat_ui",
|
||||
"@task": "~/systems/task_ui",
|
||||
},
|
||||
vite: {
|
||||
assetsInclude: ["**/*.svg"],
|
||||
resolve: {},
|
||||
// optimizeDeps: {
|
||||
// exclude: ["vue-demi"],
|
||||
|
@ -357,4 +348,4 @@ function customStyleLoader() {
|
|||
)}_ui/assets/${buildName}/scss/${buildName}.css`;
|
||||
|
||||
return mainStyle;
|
||||
}
|
||||
}
|
||||
|
|
1460
package-lock.json
generated
1460
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
|
@ -15,7 +15,6 @@
|
|||
"build-haditha": "env-cmd -f .env.haditha nuxt build"
|
||||
},
|
||||
"dependencies": {
|
||||
"@iconify/vue": "^4.3.0",
|
||||
"@nuxt/image": "^1.8.1",
|
||||
"@nuxt/ui": "^3.0.0-alpha.12",
|
||||
"@nuxtjs/supabase": "^1.4.5",
|
||||
|
@ -46,7 +45,6 @@
|
|||
"mitt": "^3.0.1",
|
||||
"npm": "^11.1.0",
|
||||
"nuxt": "^3.15.4",
|
||||
"nuxt-auth-utils": "^0.5.20",
|
||||
"nuxt-echarts": "^0.2.3",
|
||||
"pinia-plugin-persistedstate": "^4.1.1",
|
||||
"qrcode": "^1.5.4",
|
||||
|
@ -74,7 +72,6 @@
|
|||
"devDependencies": {
|
||||
"@iconify-json/lucide": "^1.2.28",
|
||||
"@iconify-json/vscode-icons": "^1.2.16",
|
||||
"@nuxt/icon": "^1.12.0",
|
||||
"@nuxt/test-utils": "^3.14.4",
|
||||
"@nuxtjs/i18n": "^9.0.0-rc.2",
|
||||
"@types/bootstrap": "^5.2.10",
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
import { useAuthStore } from "~/stores/authStore";
|
||||
import { useStorage } from "@vueuse/core";
|
||||
|
||||
// let lsToken = useStorage("token", "GuestAccess");
|
||||
// if (lsToken == null || lsToken == "" || lsToken == undefined)
|
||||
// lsToken = "GuestAccess";
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
const config = useRuntimeConfig();
|
||||
|
||||
const id_token = useCookie("id_token");
|
||||
const token = id_token.value ?? "GuestAccess";
|
||||
|
||||
const baseUrl =
|
||||
config.public.NUXT_PUBLIC_BASE_URL + config.public.NUXT_PUBLIC_API_NAME;
|
||||
|
||||
// const { session } = useUserSession();
|
||||
// const authStore = useAuthStore();
|
||||
let token = useStorage("id_token", "GuestAccess").value;
|
||||
const api = $fetch.create({
|
||||
// baseURL: baseUrl,
|
||||
onRequest({ request, options, error }) {
|
||||
options.baseURL = baseUrl + options.baseURL;
|
||||
|
||||
// options.baseURL = options.baseURL;
|
||||
options.baseURL =
|
||||
config.public.NUXT_PUBLIC_BASE_URL +
|
||||
config.public.NUXT_PUBLIC_API_NAME +
|
||||
options.baseURL;
|
||||
|
||||
if (token) {
|
||||
const headers = (options.headers ||= {});
|
||||
|
||||
if (Array.isArray(headers)) {
|
||||
headers.push(["Authorization", token]);
|
||||
} else if (headers instanceof Headers) {
|
||||
|
|
|
@ -6,10 +6,12 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|||
const config = useRuntimeConfig();
|
||||
|
||||
const api = $fetch.create({
|
||||
baseURL: config.public.NUXT_PUBLIC_BASE_URL +
|
||||
config.public.NUXT_PUBLIC_API_NAME,
|
||||
|
||||
onRequest({ request, options, error }) {
|
||||
options.baseURL =
|
||||
config.public.NUXT_PUBLIC_BASE_URL +
|
||||
config.public.NUXT_PUBLIC_API_NAME +
|
||||
options.baseURL;
|
||||
|
||||
if (token) {
|
||||
const headers = (options.headers ||= {});
|
||||
if (Array.isArray(headers)) {
|
||||
|
@ -36,11 +38,10 @@ export default defineNuxtPlugin((nuxtApp) => {
|
|||
|
||||
// Add custom methods for GET, POST, and DELETE
|
||||
const http = {
|
||||
getRequest: (url: string, options = {}) =>
|
||||
api(url, { method: "GET", ...options }),
|
||||
postRequest: (url: string, body: any, options = {}) =>
|
||||
getRequest: (url, options = {}) => api(url, { method: "GET", ...options }),
|
||||
postRequest: (url, body, options = {}) =>
|
||||
api(url, { method: "POST", body, ...options }),
|
||||
deleteRequest: (url: string, options = {}) =>
|
||||
deleteRequest: (url, options = {}) =>
|
||||
api(url, { method: "DELETE", ...options }),
|
||||
};
|
||||
|
||||
|
|
|
@ -1,384 +0,0 @@
|
|||
export default defineNuxtPlugin(() => {
|
||||
console.info("persina number plugin");
|
||||
});
|
||||
|
||||
// const oneDigit = [
|
||||
// "صفر",
|
||||
// "یک",
|
||||
// "دو",
|
||||
// "سه",
|
||||
// "چهار",
|
||||
// "پنج",
|
||||
// "شش",
|
||||
// "هفت",
|
||||
// "هشت",
|
||||
// "نه",
|
||||
// ];
|
||||
// const twoDigits = {
|
||||
// 10: "ده",
|
||||
// 11: "یازده",
|
||||
// 12: "دوازده",
|
||||
// 13: "سیزده",
|
||||
// 14: "چهارده",
|
||||
// 15: "پانزده",
|
||||
// 16: "شانزده",
|
||||
// 17: "هفده",
|
||||
// 18: "هجده",
|
||||
// 19: "نوزده",
|
||||
// 20: "بیست",
|
||||
// 30: "سی",
|
||||
// 40: "چهل",
|
||||
// 50: "پنجاه",
|
||||
// 60: "شصت",
|
||||
// 70: "هفتاد",
|
||||
// 80: "هشتاد",
|
||||
// 90: "نود",
|
||||
// };
|
||||
// const threeDigits = {
|
||||
// 100: "صد",
|
||||
// 200: "دویست",
|
||||
// 300: "سیصد",
|
||||
// 400: "چهارصد",
|
||||
// 500: "پانصد",
|
||||
// 600: "شش صد",
|
||||
// 700: "هفت صد",
|
||||
// 800: "هشت صد",
|
||||
// 900: "نه صد",
|
||||
// };
|
||||
|
||||
// const types = ["تلیارد", "میلیارد", "میلیون", "هزار", ""];
|
||||
// const decimalTypes = ["دهم", "صدم", "هزارم", "ده هزارم"];
|
||||
// let numbers = [];
|
||||
// let decimals = [];
|
||||
|
||||
// //Convert Number To Words
|
||||
// const convert = (number) => {
|
||||
// let negative = "";
|
||||
// let decNumber = "";
|
||||
// let decimal = "";
|
||||
// let percent = "";
|
||||
|
||||
// if (isPercent(number)) {
|
||||
// number = number.replace("%", "");
|
||||
// percent = " درصد";
|
||||
// }
|
||||
|
||||
// number = getString(number);
|
||||
// if (number == "") return "";
|
||||
// sliceNumber(number);
|
||||
// if (isNegative(number)) negative = "منفی ";
|
||||
// number = number.replace("-", "");
|
||||
|
||||
// if (isDecimal(number)) {
|
||||
// let index = number.indexOf(".");
|
||||
// let decNumberStr = "";
|
||||
|
||||
// decNumber = number.substr(index + 1, number.length);
|
||||
// number = number.substr(0, index);
|
||||
// decNumberStr = parseInt(decNumber).toString();
|
||||
|
||||
// if (decNumberStr.length === 1 && decNumberStr != "0") {
|
||||
// decimal += oneDigit[decNumberStr] + " ";
|
||||
// decimal += decimalTypes[decNumber.length - 1];
|
||||
// } else {
|
||||
// decimal = calculateDigits(decimals);
|
||||
// decimal += " " + decimalTypes[decNumber.length - 1];
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (number.length === 1) {
|
||||
// if (!decimal) {
|
||||
// return negative + oneDigit[number] + percent;
|
||||
// }
|
||||
|
||||
// if (number == "0") {
|
||||
// return negative + decimal + percent;
|
||||
// }
|
||||
|
||||
// return negative + oneDigit[number] + " ممیز " + decimal + percent;
|
||||
// }
|
||||
|
||||
// if (!decimal) {
|
||||
// return negative + calculateDigits(numbers) + percent;
|
||||
// }
|
||||
|
||||
// return negative + calculateDigits(numbers) + " ممیز " + decimal + percent;
|
||||
// };
|
||||
|
||||
// //split number 3 by 3 with a separator (123456789.3025=>123,456,789.3,025) Do Not Give It Persian Numbers
|
||||
// const sliceNumber = (number, separator = ",") => {
|
||||
// let percent = "";
|
||||
// let neg = "";
|
||||
// let dNum = "";
|
||||
// let n = "";
|
||||
// let d = "";
|
||||
|
||||
// if (isPercent(number)) {
|
||||
// number = number.replace("%", "");
|
||||
// percent = "%";
|
||||
// }
|
||||
|
||||
// number = getString(number);
|
||||
|
||||
// if (number == "") return "";
|
||||
// if (isNegative(number)) neg = "-";
|
||||
|
||||
// number = number.replace("-", "");
|
||||
|
||||
// if (isDecimal(number)) {
|
||||
// let index = number.indexOf(".");
|
||||
// dNum = number.substr(index + 1, number.length);
|
||||
// number = number.substr(0, index);
|
||||
// }
|
||||
|
||||
// n = putSeparator(number, separator);
|
||||
// numbers = n.split(separator);
|
||||
|
||||
// if (!dNum) return neg + n + percent;
|
||||
|
||||
// d = putSeparator(dNum, separator);
|
||||
// decimals = d.split(separator);
|
||||
|
||||
// return neg + n + "." + d + percent;
|
||||
// };
|
||||
|
||||
// //Puts a separator between the chunks of the given numString.
|
||||
// const putSeparator = (numString, separator = ",") => {
|
||||
// if (typeof numString !== "string") return "";
|
||||
// if (numString.length < 4) return numString;
|
||||
|
||||
// let result = "";
|
||||
// for (let i = numString.length - 1, counter = 0; i >= 0; i--) {
|
||||
// if (counter == 3) {
|
||||
// result += separator;
|
||||
// counter = 0;
|
||||
// }
|
||||
// result += numString[i];
|
||||
// counter++;
|
||||
// }
|
||||
|
||||
// result = result.split("").reverse().join("");
|
||||
// return result;
|
||||
// };
|
||||
|
||||
// //Processing on Digits of A Number
|
||||
// const calculateDigits = (arrNum) => {
|
||||
// let result = "";
|
||||
// for (let i = 0; i < arrNum.length; i++) {
|
||||
// let parsedNum = parseInt(arrNum[i]);
|
||||
// let number = parsedNum;
|
||||
// let sadgan = Math.floor(number / 100) * 100;
|
||||
// number = number % 100;
|
||||
// let dahgan = Math.floor(number / 10) * 10;
|
||||
// let yekan = number % 10;
|
||||
// result += i !== 0 && parsedNum ? " و " : "";
|
||||
|
||||
// result +=
|
||||
// getPersian(sadgan, dahgan, yekan, i, arrNum) + " " + getType(i, arrNum);
|
||||
// }
|
||||
|
||||
// return result.trim();
|
||||
// };
|
||||
|
||||
// //Main Process That Turn a Number Into a String(122=>100+20+2)
|
||||
// const getPersian = (sadgan, dahgan, yekan, index, numbers) => {
|
||||
// let flag = false;
|
||||
// let result = "";
|
||||
// let dahganPlusYekan = dahgan + yekan;
|
||||
|
||||
// if (threeDigits[sadgan]) {
|
||||
// result +=
|
||||
// yekan > 0 || dahgan > 0
|
||||
// ? threeDigits[sadgan] + " و "
|
||||
// : threeDigits[sadgan];
|
||||
// }
|
||||
|
||||
// if (twoDigits[dahganPlusYekan]) {
|
||||
// result += twoDigits[dahganPlusYekan] + " ";
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (twoDigits[dahgan]) {
|
||||
// result += twoDigits[dahgan] + " و ";
|
||||
// }
|
||||
|
||||
// if (
|
||||
// numbers.length === 2 &&
|
||||
// index === 0 &&
|
||||
// yekan === 1 &&
|
||||
// dahgan === 0 &&
|
||||
// sadgan === 0
|
||||
// ) {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (
|
||||
// numbers.length > 2 &&
|
||||
// index === numbers.length - 2 &&
|
||||
// yekan === 1 &&
|
||||
// dahgan === 0 &&
|
||||
// sadgan === 0
|
||||
// ) {
|
||||
// return result;
|
||||
// }
|
||||
|
||||
// if (yekan > 0) result += oneDigit[yekan] + " ";
|
||||
|
||||
// return result;
|
||||
// };
|
||||
|
||||
// //getting The Type Of Each Number (Billion, Million,...)
|
||||
// const getType = (i, numbers) => {
|
||||
// let parsedNum = parseInt(numbers[i]);
|
||||
// if (isNaN(parsedNum)) return "";
|
||||
// if (!parsedNum) return "";
|
||||
// let length = numbers.length - i;
|
||||
// let index = types.length - length;
|
||||
// return types[index];
|
||||
// };
|
||||
|
||||
// //Calculate if number:String is Negative Or Not
|
||||
// const isNegative = (number) => {
|
||||
// number = getString(number);
|
||||
// if (!number) return false;
|
||||
// if (number[0] != "-") return false;
|
||||
// number = number.replace("-", "");
|
||||
// return number != "0";
|
||||
// };
|
||||
|
||||
// //Calculate if number:String has '%' as Percent
|
||||
// const isPercent = (string) => {
|
||||
// if (typeof string !== "string") return false;
|
||||
// let index = string.indexOf("%");
|
||||
// let lIndex = string.lastIndexOf("%");
|
||||
// if (index != lIndex) return false;
|
||||
// return index > 0;
|
||||
// };
|
||||
|
||||
// //is number:String:Number is a Valid Number? if type is Number turn it to String And Return it
|
||||
// const getString = (number) => {
|
||||
// if (number === undefined) return "";
|
||||
// if (number === null) return "";
|
||||
// if (isNaN(number)) return "";
|
||||
// if (typeof number === "number") return number.toString();
|
||||
// return number.trim();
|
||||
// };
|
||||
|
||||
// //Calculate if number:String has Decimal Point Or Not
|
||||
// const isDecimal = (number) => {
|
||||
// number = getString(number);
|
||||
// if (number == "") return false;
|
||||
// let index = number.indexOf(".");
|
||||
// let lIndex = number.lastIndexOf(".");
|
||||
// if (index != lIndex) return false;
|
||||
// return index > 0;
|
||||
// };
|
||||
// //Convert English Numbers To Persian Numbers
|
||||
// const convertEnToPe = (number) => {
|
||||
// if (number == null || number == undefined) return "";
|
||||
// if (typeof number == "number") number = number.toString();
|
||||
// let res = "";
|
||||
// for (let i = 0; i < number.length; i++) {
|
||||
// switch (number[i]) {
|
||||
// case "\u0030":
|
||||
// res += "\u06F0";
|
||||
// break;
|
||||
// case "\u0031":
|
||||
// res += "\u06F1";
|
||||
// break;
|
||||
// case "\u0032":
|
||||
// res += "\u06F2";
|
||||
// break;
|
||||
// case "\u0033":
|
||||
// res += "\u06F3";
|
||||
// break;
|
||||
// case "\u0034":
|
||||
// res += "\u06F4";
|
||||
// break;
|
||||
// case "\u0035":
|
||||
// res += "\u06F5";
|
||||
// break;
|
||||
// case "\u0036":
|
||||
// res += "\u06F6";
|
||||
// break;
|
||||
// case "\u0037":
|
||||
// res += "\u06F7";
|
||||
// break;
|
||||
// case "\u0038":
|
||||
// res += "\u06F8";
|
||||
// break;
|
||||
// case "\u0039":
|
||||
// res += "\u06F9";
|
||||
// break;
|
||||
// default:
|
||||
// res += number[i];
|
||||
// }
|
||||
// }
|
||||
// return res;
|
||||
// };
|
||||
// //Convert Persian Numbers To English Numbers
|
||||
// const convertPeToEn = (number) => {
|
||||
// if (number == null || number == undefined) return "";
|
||||
// let res = "";
|
||||
// for (let i = 0; i < number.length; i++) {
|
||||
// switch (number[i]) {
|
||||
// case "\u06F0":
|
||||
// res += "\u0030";
|
||||
// break;
|
||||
// case "\u06F1":
|
||||
// res += "\u0031";
|
||||
// break;
|
||||
// case "\u06F2":
|
||||
// res += "\u0032";
|
||||
// break;
|
||||
// case "\u06F3":
|
||||
// res += "\u0033";
|
||||
// break;
|
||||
// case "\u06F4":
|
||||
// res += "\u0034";
|
||||
// break;
|
||||
// case "\u06F5":
|
||||
// res += "\u0035";
|
||||
// break;
|
||||
// case "\u06F6":
|
||||
// res += "\u0036";
|
||||
// break;
|
||||
// case "\u06F7":
|
||||
// res += "\u0037";
|
||||
// break;
|
||||
// case "\u06F8":
|
||||
// res += "\u0038";
|
||||
// break;
|
||||
// case "\u06F9":
|
||||
// res += "\u0039";
|
||||
// break;
|
||||
// default:
|
||||
// res += number[i];
|
||||
// }
|
||||
// }
|
||||
// return res;
|
||||
// };
|
||||
|
||||
// const e2p = (s) => s.replace(/\d/g, (d) => "۰۱۲۳۴۵۶۷۸۹"[d]);
|
||||
// const e2a = (s) => s.replace(/\d/g, (d) => "٠١٢٣٤٥٦٧٨٩"[d]);
|
||||
|
||||
// const p2e = (s) => s.replace(/[۰-۹]/g, (d) => "۰۱۲۳۴۵۶۷۸۹".indexOf(d));
|
||||
// const a2e = (s) => s.replace(/[٠-٩]/g, (d) => "٠١٢٣٤٥٦٧٨٩".indexOf(d));
|
||||
|
||||
// const p2a = (s) =>
|
||||
// s.replace(/[۰-۹]/g, (d) => "٠١٢٣٤٥٦٧٨٩"["۰۱۲۳۴۵۶۷۸۹".indexOf(d)]);
|
||||
// const a2p = (s) =>
|
||||
// s.replace(/[٠-٩]/g, (d) => "۰۱۲۳۴۵۶۷۸۹"["٠١٢٣٤٥٦٧٨٩".indexOf(d)]);
|
||||
|
||||
// export {
|
||||
// convert,
|
||||
// sliceNumber,
|
||||
// convertEnToPe,
|
||||
// convertPeToEn,
|
||||
// e2p,
|
||||
// e2a,
|
||||
// p2e,
|
||||
// a2e,
|
||||
// p2a,
|
||||
// a2p,
|
||||
// };
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user