diff --git a/addons/havari_arabic_fonts/__init__.py b/addons/havari_arabic_fonts/__init__.py new file mode 100644 index 0000000..a5ca2ee --- /dev/null +++ b/addons/havari_arabic_fonts/__init__.py @@ -0,0 +1,3 @@ +# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.548137 +from .pyarmor_runtime_009742 import __pyarmor__ +__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00_\x04\x00\x00\x12\t\x05\x00\xe2\xf5bdff\x8b\xfd@x\xee\xd0\xcf\x91\x97E\x00\x00\x00\x00\x00\x00\x00\x007\t{\xa7Q\xfb#\x11\x9f\x7f\xd1\x7f\\\x9d\x84\xbd\xa4\x1bS\xed\xc1S\x12E\xce\xd4 \x0c\xbf\xf0P\xca\xdf\x88O<\xb3\x19\x16)\xaba\xce\xdc\xed\xc8\x9e\xf8\xd6\xb4T\xdb^\x02\xe9\x13\xd9\x05p\x86\xccr0#\x04\xb9\xc8 \'\xe9V\xe7\x03\xda\xec\xf2ol\x99\xb37pc\xc8\xaeip\xb8\xb0U\x03\x02\xb6+H\xda\xff\xb3j\xcf\xd6\x1e\xf7VU\x19\x90\xd9\x07e\xa9\xcc\xd6\x15T`\x88\x90B\xd3/\x10\xe4\xe6b\xa0\x19\x0c\x14\xf9\x1b\xd9]\xd6=\xb9\xc9U\xe1\xe4\xd6b-\x9f\xd7\x12\x13\xdd\xc6\xda\xa4\xd9\xa9\x8f3\x02\xda\xcd\xf0E*Z\xfd\xe2\xba\xd6T\x0eQ\xfd\'XM\xc2#i \xb8O!4\xab\xfd\xacS\xda^\x08\xcf\xb1\x9c\xa4\xcb\x00\x06\x89\xafI\xcd>F\x8e\x91.\xeb\x94+E\x89\t\xf9e\xea\xa1FxD+c\xe4V\x14\xe74\xd2\x8e\xf9\',\xe1\xfck,\x14:0\xba?q\x10\xdc\xee;Y\xa7\x1e\x14\x93h\xc5xg]F\x06J\xae\xfa\xa5c\x91n\t\x0c#\x1f+>\xa9\xd8\x03kB\xe6\xb3\x8cyc\xdc!\x92\xfa\x1da\xf1K\x85t$\xd2\xf6\xb2\x8b\x0bH_\xacSq\xbe\xb4\xb3yVq\xe3\xbb\x8c.)\\\xf2\xc6\xb2\x1d>y\xbf\xea-b\xe6l\r\x9cPnTu`\x13!\x14\x8bj\x94N\xf4\x94\x16\x19\x8bih\xca.G\x19Ys\x01\xb1\x15\xce\xfbk\xd0\xe6\xd6\xa8n\x8eK+\x9f\x85\xc7\x02\xc4"T\xd7\x98s\x08tw:\xfa\x08\xcd\xc9F\xa1Hr\x03\xf6u\x8f\xcdE\xdbdb\xe6\xfd\x8a[VI1I\x8e\x9f\xf7\xc3\x1a5\xeb\xa0\xa5a0\xb1\xf5je\x0e\xf3\xebe\xf0\xb0\x83b{S/\xebO\xf3\xd2p\xb5<\xe1\xbb\xd5\xf4\xcds\xbdwO \xc9\xbfA\xa1\xfbT`\xf4<\x10\x02\xb1-\x88\xe9H\xcd\x19d\xbdEP\x17\xde\x1a\xe4/\xd0\xb7\xbf\xf1m\x12U\xb7zD\x03\xbf\xd5\xf1\x80/\xa1\x1d\xa0\n,\xdb>vk\x1e\xd3\xb3\xe9\xe8b\x01\xf9U\xad\xad4\xbd%\xeb}\x83\xb5\x1e\xdfo\x0e~6\xa9\xbcE\xab\xc9\xd9\x93@5\xe5T\x05\x82\x03\xcf\xa4@\xa0\xe9\xbc\xc0\x9b\x04\xf3\x90K\xe9]6\x96\xa4\x8c\xff9m35\x03\x16\xdc\x91} c\x89r\xed0\xea\xc6\x1f\x06#\xbf\x8e\xd9\xb8\x9b9l\x1a8\xb8\xb5+\x1a\xdd@x3\xb0*\xe8\xc0F[bG\x9d\x86\xd0n\x0b.\x06\x8a\xd3-U\xdd>\xb7\xc23D\n\\\x7fY\xc1\x80\xbe7\xd4\x85\xf9\xdf\xf5\xa3\xd7\xeb\x92\xdd:\xbc\xf7e %BK4\x95\x9c\t\xe5\x01N\xfa\x7f\x16\x82"_\xb0\x0c$\xf2f1h\xd6\xb4\xd8@\x0f\x8e\xa8') diff --git a/addons/havari_arabic_fonts/__manifest__.py b/addons/havari_arabic_fonts/__manifest__.py new file mode 100644 index 0000000..1831676 --- /dev/null +++ b/addons/havari_arabic_fonts/__manifest__.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Odoo Arabic Fonts', + 'version': '16.0.2.0.0', + 'summary': 'إدارة موحدة للخطوط العربية - 6 خطوط', + 'description': ''' + Odoo Arabic Fonts - إضافة لتحسين الخطوط العربية في أودوو + ======================================================== + + المميزات: + --------- + * 6 خطوط عربية احترافية: + - دبي (Dubai) - عصري + - الجزيرة (Al Jazeera) - إخباري + - القاهرة (Cairo) - احترافي + - تجوال (Tajawal) - أنيق + - أميري (Amiri) - نسخي تقليدي + - المراعي (Almarai) - سعودي احترافي + * إعدادات مرنة لأحجام الخطوط + * ثلاثة أنماط جاهزة (مدمج - متوازن - مريح) + * دعم خطوط الطباعة والتقارير + * تحسين واجهة المستخدم للغة العربية + * توحيد إدارة الخطوط للباك إند والتقارير + ''', + 'category': 'Tools', + 'author': 'Mostafa Elhavari', + 'website': 'https://havari.me', + 'maintainer': 'Mostafa Elhavari ', + 'support': 'm@havari.me', + 'license': 'LGPL-3', + # Developer Contact: +90 543 774 3103 (WhatsApp) + 'depends': ['base', 'web', 'havari_license_client'], + 'data': [ + 'security/ir.model.access.csv', + 'views/assets.xml', + 'views/res_config_settings_views.xml', + 'views/base_document_layout_views.xml', + 'report/report_templates.xml', + ], + 'assets': { + 'web.assets_backend': [ + 'havari_arabic_fonts/static/src/scss/fonts.scss', + 'havari_arabic_fonts/static/src/scss/variables.scss', + 'havari_arabic_fonts/static/src/scss/backend.scss', + 'havari_arabic_fonts/static/src/scss/presets/balanced.scss', + 'havari_arabic_fonts/static/src/js/font_settings.js', + 'havari_arabic_fonts/static/src/js/font_preview_simple.js', + ], + 'web.report_assets_common': [ + 'havari_arabic_fonts/static/src/scss/fonts.scss', + 'havari_arabic_fonts/static/src/scss/report.scss', + ], + }, + 'installable': True, + 'auto_install': False, + 'application': True, + 'post_init_hook': '_register_license', +} diff --git a/addons/havari_arabic_fonts/models/__init__.py b/addons/havari_arabic_fonts/models/__init__.py new file mode 100644 index 0000000..54ddf3a --- /dev/null +++ b/addons/havari_arabic_fonts/models/__init__.py @@ -0,0 +1,3 @@ +# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.569512 +from ..pyarmor_runtime_009742 import __pyarmor__ +__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xee\x01\x00\x00\x12\t\x05\x00\x10;\xe8\x1eTQ\xc6\xb2\xaf!\xa74\xdf\xcfb\xed\x00\x00\x00\x00\x00\x00\x00\x00\xe7Z+\xff}\xef\xcc\x08\x82\\h\xeei\xc2\x08C\xba<\x94\x0fW\xd4\xc3\xf7\xf2,\x17E\xe7\xee\x89\x9fW\xc3H\xba\xb7\x98\xe5\xef~I\xb1H\xf0\xd6s\xeb\x1e!I\xcd\xd1{\x16\x14\xeb\xf7@XW\xe9p\x1eXu\xed\xe7\xbb\x1d\xa9\xb5B\x1c\xf2\xa0\x19\xc1s9\xf4\xce\x119\xd3\x0c\xb4\x13P\x85z\xd9\x8b\xdc\xf1\x8c\xa4\x83U{\xad\xf8a@H\xdb}!|z\x80^\x8dy\'A\xf1\xaf\xf8\x81\x08\x03\xf6\xa4\x9c\xb8h\xbb\x17\x8c\xf9\xe7\xc0\xc1\x9cuCJX~\x10\xcam1F~kb\x12\xb5\xedf\x80\xd8s\xc8C\x13o\xbbx\xecG\xcc\xc8\x035\xf6\xd9\xd9\xd7\x80\x8ad\x87y\x86k\xef\xe0\xbc\xde\x08\xbe!\xaeV\x7f\xd4\xa3\xcf\x1fi(\r\x92\xc0\x9bW\xfc%\\;50\x85\xc7\xd6D\xa4\x96&\xec\x88\xbb\xefu4O\xb4w;\xaav\xe6\xc61\x13>q\x8c,Lu\xefu\xdf\xd9\xd9\x11bZ\xb6f\xf5\x0c\xc3\xbc\xf4\x9dE\x1cI\xd2&\xfb\xd9\x8d\x03\x05!a\xb1\xbe\x10A\x8e\xb5\x81\x0e\xe6\xe2\r)\xd5\xf3\x12\x99\x07\xb0\x8f\xcb=:\x9f\xec\xa0B\x19\xe2\x1fJ\\yq\xb5\xfa\r\xd3\xe1\'W\xfaI\x16Ij\xaa*\xd2\x9c\xeb\xf4\x81\xedJ\x80\t+\x89\xa8\xb5\x9e-\xbe\xbf\xde)\xf2W\xeb\xd7\xf4UF\xfe\x1d\x7fX\xb9[^\x14\x8a;\xf1\xacsr\xe0\xd5\x92dy\xf8T\xd9s\xad2Z\'\xa9h\xb5\xb6\x81\xeb] \xfe\x88\x8d\xc5\x99\xcd\xb5C\xdc;l\xe5\xf8x?\xa6A\xc85\xa4\xa1\xe3\xc3n\x12\x14Q1\n\xc1|\xf7\x87VS5\xb9\x00S\xd1\xe6a\xc0\xd9+\xca1\x92(\x1d\x93\x7fdD\x0c\x80\x93W\xe3\xec\x94\xcaI\xda\x19}\x7fVT\xf2\xa5\xd5\x96\xd6\x1e#\x03b\xa2\xc1\x85"\x86\xd6_\x02\xca[\x16\xcf\x1c\x92tN\xf4Dd\x8ej4s\xe5\xd0\x856h<\x1a\x83\xfc\x85\xb3^\x99\xa3\x92P\x96\x9bQ\x8d\x9f\\$') diff --git a/addons/havari_arabic_fonts/models/base_document_layout.py b/addons/havari_arabic_fonts/models/base_document_layout.py new file mode 100644 index 0000000..03fb3b1 --- /dev/null +++ b/addons/havari_arabic_fonts/models/base_document_layout.py @@ -0,0 +1,3 @@ +# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.562657 +from ..pyarmor_runtime_009742 import __pyarmor__ +__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\xbd\x03\x00\x00\x12\t\x05\x00NR}\xb1\xe1\xf4Q\xf5\xa18\xbf%\xd8>\xabq\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x1d5J_\'\xd8-\x14\x12M5&X[\xa0\r(\x9c2\nD\x0f\x12\x03\x17\xcb,2\xcdHl\xfcj\xba\xb5\x8dE\x13\xaepw\x1bN\x8b\xd2\x8dW6s\xe5\xd5\xa2\x11fs\xdfx\x8c\'\x83B\xb8\x93cQ\xdaQ\x05[\xafl\x81]I\xd9^t\xe7\xb8\xfb^\x04Z\xf6\xd5\xbdo\x8f\xdfuI\xf6k\xe6\x1fJ\xde\xbc\xd7\xdf\xf1{a\xcbI\x91\xfd\xfd\x904\xb6\x85:nQ\xde\x13\xd3o\xbaqi\xc4^0Q\xc2J\x1e\x0fo\x83(d\xba--\x97A\x1b\x14q\xc6\x05\xa4\x06\xda}\x12\x00\xa7q\xf3\x7f\x07\xf3\xba\x8dM\xbekd-\x1d\xf1\xa7\xd5\x03-T\xc8\x1b"\x0f\x10$\xfb\x08\x98\xa7\x10\xbeLy\xa915\x07\x1c\xd5\x91OSU\x80\xc1\xba\xcd\x00\x8a\xe9 \xcc;\xfa\x9bIQ<\xca{\n\xf2\xa2J\x0f\xd4\xa5\x8e\xbbV\xf5\xa2H\x9eeL?\x0c\xfa\xa4Sj\x00\xffF!\x0f\x90\xb5T\xe3\x17\x02\x057\x13\x00\xe2\x95\xff\xaf=\x10\xa9\x17\xad%u\xcb\x7f8\x88(\xedk\xfe\x12\xf4C\x9cR_\xa7\xb4\xe2N\x0cNCD\xcb>P\xc4Fv\x03\'\xd3\x14@\x893\x94\x1f\xc8\xf4U\x99e\xcb\x9a\xae((\xebR\x08;E\xbd\x91u\xd8!m\xeb\x8f2\xb0\xda\xad\xe9\x83[Z\x944Hc\x87\xf8\x9csK#[\'m\xd4m\xac\x88\x9c\xea\xfbmu\x83`\x01\x81\xdf\xc9m\xa7\xec\xf1\x87r\xfbj\xcd_\xed\xa2\x08\xf4\xcd\x06\xb9\x08\xd5B\x89\xa6g\xf8Rz\xe4\x1d\xab?cw\x11\xea\xadl6\x92\x0e*\xb6\xdc4\xd0U\xd6X\xbf&R}\x08_\x13\xb9\xa3:[lH^\x83\xa9\x01J\xab\x8aB:F2\xd9\xcd\xf7\x82\xec\x82\xd0\xdbx[\x95\x99\xa9\xfb=\x0c\r\x90k\xd6\x07\xd5v\xd0\x97\xed\xe5Z\x1dJ\xc6\xa8z?\x08J?\x15\x98\x80\xd8 \x8dq\\\xb8\'\xfa\xe6e(\x99\x13b\x95\xee\xf9\xfbc\x05\xf1\xba\x8dD\xd6\xbf\xad\x1a\xd8X\xdf/\xae\xf8v\x1b7\x8c\x1d\xd8\xf5\x92$db/\x03wx\x98)\xdee\xb5\r\x19cf\xe0lM\x89+xl{\x81O\xe1\'\xa4\x8d\xab\x1c,k\x89\xe7\x16\xa2\x1b\x00\xb42\x950\xe4+e\x16\x9c\xaa%\xa2\x0bj{D\x0cm\x10\x8fq\xd2\xa9\xe6ax\xff^!&F\x1b\xc1Y\xba\xbcB\xc2\xe3qm\xf4+\xe8m\xf26l\x01\xd73\x91\x10&\xf4\xab\x0e\x99>\x1c\x88\xcdG_F\xacA]~b\x02F\xd1\xea[\x87\x84E\x1c\xdb\x18\xb47b6\x8ehv\x022d\x02\xf6b\xc4\xd8vU\xa6^\x1d\xb7\xff\xd1\x87\xd3R\x8b\xa9\xabvx\x81\xe6\xb8:%2{]p\xc0y*\x90\xfd\xf5)\x1b\xfdE\x1d\xfd\xd2~\rRC,\xb2\xe7%\x1d\x83\'\xe5\xbf\x83\x82\x11\xf3\xb6z\x80u\xe5\x12\\\x07\xa1\x91\x11\xd1\x1dj\xd2[x\x91\x01\xc4\xb67\xff\x99\xc6\n^7\\\xf4\xee\x05\xe1~R\x8d_1\xb0\xd2\xe9\x04g\x05\x85\x90\xd9\x1d\x7f\xd5]\xd1\x7f\x8fJ\xb3P\x00H\xf8\xdb\x10\xf6\xa3\xe0\xa2\x13a\xdf\xe39\\\x15\x97\xfa\xbd`U\xb7\x88\x87\xef\x00\xc1\x84\xb3\x87\nH#\xc8\xbf\xd1\x10\xa1\xca\xe4\xddm@\xd5\xb4D\x98GRN\xb9\xf1x=&D\xd1vY\xf1F{\xf1\xe7\xf4j+\x19Aj\xb1\xc5\xcdZ]:\xdd\xeb\\h\x87\xa9\xcey0\xc1\x18\x03\x82\xbd\r[\x04(o\xdd\xf0\xf2\x98\xaf\x11\x8et\xc7*\xbb\xf3;s\x86\r\xa9-,%\xc1\x7f.B;\xe1B\x80\xf5\xfai$S\xefe\x9c\xefU\xd7\x9a\xe2\xdd.\x10\xd8\x88\x18`\xb2\xf2)\xfd\xeb\x08^\x87S\x8c\xa23\x1eM\xf8/m]h\x8aP\xe5\x88\x94A\x12V\xf7S\xc8\x13q2+\xda!n6\xf0\xb3x\xdb\xc5\x90;\x16\xd9\x93\xbc\xf5\xe9.!\x8f\x96\xae@') diff --git a/addons/havari_arabic_fonts/models/ir_qweb.py b/addons/havari_arabic_fonts/models/ir_qweb.py new file mode 100644 index 0000000..aadd37a --- /dev/null +++ b/addons/havari_arabic_fonts/models/ir_qweb.py @@ -0,0 +1,3 @@ +# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.589002 +from ..pyarmor_runtime_009742 import __pyarmor__ +__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00x\r\x00\x00\x12\t\x05\x00$7\xaa\x13\x8ac\x1d\xedo.\n_\xe3\x8d\xe58\x00\x00\x00\x00\x00\x00\x00\x00\x83\xa4V\xa3-O\xac\x98\x18\x9d\x0c\xd1\xc0l\x17i\xd1\xaa\xad\x15\xd8\x96\xa1$\xfd\x8f6X\x1fq\xfe*\xebl\xca\xbc\xab\xfb\x80\xb2Ij\xa7\xcd\xead\xe6\x9f\xa4Q\xc7\x94$\xe2\x00\xa9\x06\xef\xbaK3\x1b\xa9\x91\x8c\xc8\xe6d8K\xb8\x84x\x9e\xf9\xdc\xb0\x90\x9b\x9f\x87\x88Ah\xaaY\x83\xb4\x92\xd6\xe2\xf2%\xbaQj\x8d\xa2\xd90\xd3\x7f\xe9D\xa71q?\x8d|\x08\xcd\x01(\xdd\xecV\x11k\xabR\x90\xd0%\x0c,\t\x7f\xa0\xe8\\\xbd|\xea9\x92\xbd\xd4\xf1\x13\xad\xe1\xaf8:\npX2jH1\xce\x88`,nr\xca\n\x10\x07W\xf5\xf7_\x97\xa6\xf5D\xf0\xaa-\xe9\xa1\xba4M\x01C\xee\xfad\xb4\xe4\xdby\xe8.\xd1i\x85\xe9\xd4\x12\xa6\xd1\t\x9f\xf8\x8di\x9bI03\x93\x1f\xdf\xc2\xc4)\xdbk\xdc\xab\xb2\xb7\x98E\x8c\xa8j\xa3\x89AM\xb5\xb83\x10\xf8\xd9\x967\xc8\xc6k\xf4\xfe\xa5\xc0%\xad\xc5i\x7f\xe3\xc0\xc5\xb2\x90T\xf7|\x94\xbc\xa7c\xe2\xb1\xb9m\xc9\x8d\x1c\xa2\xdcXg\x8fn|X\xcf1\x93f\xe6>\xf7:\xee\x97\xf7\xc6?&\xf9\x95\xe2\t\xee\xb9I\xdf3]#7\x06\xee\x9a\x1c6\x01%Gg\xbe\xc21j>\xa99C]\xa8o\xb1\x1a\xeb\x94\xa9cZ\xde\xfb\xf3\x03T\xd7\x01\x07\xfeR\xe4?\x1f>\xa4\xdb\x82\x1fo\xa9_!f1<\xa2*\xca\xa4\x9aI\x93\x87m\x9c,\x05\xc8\xa9\xa1#\xa2\xc5\xd5\x02\x9a\xb3\x93\xb5[\x93{\xc6\xba\x98\xd4\xb4\xab2\xa0\xcd-4\xb2\xbf\xfc\xe5\x16#\xec\x14\xb0\xb0\x8a\xd2\xae\xa6\x895>\xe0\x0f@\xccJ\x8f\x19\x07\t\x98\xe2#\xc1\xbd\xb1\xc6\xfe\xf8\xa0JI\xe8R\xd5\x98|S\x87m\x8f[h\xc6\x82\xea\xad\xfc\x05\xff\xcb\xa5\x19`\x15p\xd7\x86\xb2\xb5\x86n\n\xa9\xf6\xd5c<\xa0\xf2}\xbc+\'\xcd~hZ\x14hv\xd3\xa2\xe2\xb3l\xebt\xc7\x0eU:n\xafXum\x11r\xe7\xa5\xb3\xa8\xbd\xfd\xfcvX\xa9\x808X\xe9%\xddz\x91\',\xcf\xf8\x0e\xa9\xc0\xa1\xcf\xebS\xda\xdf7\xd5\x0bJ\xac\xfb\x95\xf7\xf8\xb4r-\xc1\xff\xdf\xe4\x97,$\x1b\xe6E\xf7\x90\x8c\xd8\xed\x8c\xa0;\x14\x1f\xf4\xdb\xeeS\x88\xc3w\xa5,\xa0i\xfe\xf3\xceF+\xa6\x17\xea<\x13\xc6h\xb4M\xee\x8b\x9fZc%\x08\xc4\xc2\x84j\xc5L\xfd\x81\xe05"\x8e\x0f\x18\xbe\x07\xc1>\xe9\xacR\xb6\xfc\x8am\x1e\x9b\x9b\x8a\xb7i\xc5\x19\x0f\xbf\xdfI\x91\xc9\xb6\x8fF\xba|\x96\x90\xd0\xb74\xdb>\xde\xa0\xb7EN\x07kj:e\xfe\xdbZ*R\xbe\xdcm]bz\xf7\xb03*#}\xe2\xae_\xed\x14E\xfe\xef\xef\x7fCl\xdc8\xb1\xb3\xb2\x94\x0ed\xa8mr\xfd\xc4O\xe9N\xfc]d\xecXp\xfd\xca\xc6{\x04\xb6 \xe5!\xd2\xf4A\xfb]7\xe5\xfdb\x15#\xe9\r\r\xc9\x93\x9b\x80\x84\'X\\\xeb\x8c\xde\xd4=\xe5q\xbe-\xf0\xc5\xaa0f9\x1e\xb5\x8a\xfd\x8a\xdd\xccx88\xf7\xa8\tfg\x89)#\x0f\x90oa\xec$\x8f/\xe4\x1e#b\xe1er+r5\xd4\xdb\xe3\xd5Z\x04\x9e\x92U\x97\x83Q)\xd4\xda\x1fn\x19Q\xff{\x00\xbf\xdb)\xdf\xfa\x8a\xeap\x8a\xc9rI\x84\xef\x13\x93\xbdY0A\xad\r\xf5\xdf\x81\xb6[\xde\xf3B\xd2\x91\xdb]%\xd9\x97\xac\x94]\xc3L8\x8e\xe5\x17X[\xc0\xb7?D\xf2Q~a1Y\xb8\x9e\xb7\xfb\x93\x97\xa2\xdd\xf9\xa0\xc0\xd1\xf9\x88;\x94!:!\x85"\xe0\xd0\x0f\xfd~Q\x83\xd9z\x91\xb1\xb7+\xcd\x0c-)\x86\xac\x98\xd8\xec\xc6\x830\x93\x8d\xd5cN\xe2\xc1\xe0\xa2s\x9d\xdb\xd2Cx\x0bQ\xd2\r\xc7F\xefUa\xe7[dy\x12FL\nX|dne\x0b0a^\x1a\xe1\xc9\xc2\xf3+hCw\x84\xb5\xcb^}\xf0\xfc1\xf7[\xb2\xccV\x9co\xbf\xe6\x1dv\xe1\xe46%CCDF\x9dC\xfc\x1c\xe8m~\xd3&V\x16;\xbf\x81\xb8\xf92\x87!\x06\xaa\x1f2OO\x01\xfd9\xadR< \x1b$B\xd2\xb9\xaf\r8\xb4\xae\xba<\x88k\x94\xee\xa8T\xce\xf4\'L\xe5\xd4R6Ht\xe0Z\xf2\xb9\x97\xb6\x87\xd2\xecI\xb9I\x17\x93\xe1\xf1z907 \xca\xc7\x8dX\xeaK+\xc1\xd7\xb75\x0e\x82\x8f\tc~\xd7}\xa9\x9e\xd9\x1ew}\xf28,\xfca\xaf\x1b\xeb\x08\xcf\xf4\x8bm\x85\r\xfc\x91D\xa7\x05\x85+\x0fM\xa4\x18\xa1{#)\xa9$G\x00\xf8\xf7\xfa/L\x06\x84\x99I\x8e\xfd)|*\x14\xee\xa3\x0bZi@{3\xec\x94\xf4\xab\x12\xf4\xc3\xba\xedK\xebv\x00+\xff"\x07]#\xc0\x86S\x0c\xe6,[B\x94\xaa\xf6\xd7\xb2\xa0\x11\x01Z\xb2&\x94]\xbc\xff\x10\x13,O\xd6\x16\xdd\xec\x1c\x16\x8e\xb2\x8f}!\xe4u\x8f\x11\xb3\x08\xc4aO\xa3\x81\xc5&\xeb\x82\xbc\xd7\'d\xc1Wq#\x81\xa8\xe7x\x12A\xc8\xe6h\x06hJ\'\x9e\xdd\x7f\xc0:.6\xcc\xbf\xa8\xbb\x0eT\x16\xe3\x0c\x93\xdd\xd1.\xae\x84\xcf\x0f\xea\xec\x05\x06\x15\xb1\xd8/D:Ko~\x85\xbd&nh\xf0\xfeRSa\xfb[5S)\xd1\xa9\xdd\x03\xa8\xad\xf2\x87\x00\xfa3 \xf0@4\xe9\xc4\xe8N|\xa2\xc6>k\x8d\x98\xce\xf4\xd6\x13\xa6"X\x10\xc5|\x17K(\xbb\xa4\x18\xaa\xbel\xf8`\xccc\xd5\xd0\xb0\xc2\xba\x84\x7f\xe6 \x86\xec\xceKy\x9e\x9d\xc7P8\xcan\xb3;>\xdf\r\x95D8\xc6\x00\xff\x05\x92Y\x8aT\xcbF\x14T\x8ar\xc6\x9c\x03\xad\xf9\xc3Q\x93\xda\x1d>\xc1Z\xc8\x0c\xbd\xe5Y\xd99&\xb3\xa9\xad;\xc7\xc9\x95\xeb0=\xe3\xf5\xbb\x141\x8a\nysM\xed*\x85.\xe9\xb1\x85\xb5^\x00\x92||\xadS\xe5\xc8N\xc097\xcb\x87\xad\xa9D\x8e\xee\xd5=\x05\xaf\xe4\xa3\x0c\xeay\xaf\xc9\xf0\xaa\xe2=j%\xcbI\x0e)>\xd9\'\xac6\xde\xb26\xea<\xdc\xf4f\xe4\x01\\\xd6\xd2\xc1\x8d\x8c\x91\x7f\xbb\x01\xdc\xc4B\xa0\xb9?\xb2x\xb3\x8e\xf5\xe8#\xb1\xb8\x8f\x01*\'\xd6}\xc0~8\xa6\x9f\x9a\xe7{j\xe1\xe1\x1e\xc1\xccg\xed\x87i\'\x13\xc3\xb4\xd1Dl0\x16yc\x14u\xc6\x88\xd8\x90V\x94\x94\xadiJj\x18T\xda>\xaa\xd6\xca\x9dH\n\x9f\xb7\xf64\xfeP[ \xb5\x15\x0b\xbfx\xdc`.\xe6\xad\xb4L\x1ew?K\xc5E\x85\xfe7\xd3\x1dy\xb3\\KI\x04!,\xdad{87\x0e\xf8\xc7{\xfb\xce\x15Q\x86\xef\x93\x90\xab\xdfJ\r^\\Jf\n\x14\x88T\xeb\xe6\xdd\xaf\x04\x8c$\x9a\xc5kP\x0c)\xb14\xb8x\x02d-\xa9\x18\x05\xeb\xdd`d\xcd%\x95Q\xdf\xc1\r.\xb6\x167;\x8a0Z\x8fF%\xf1~h\xe4`\xcb\x85{\x1c\xbb0\xc8<\xc7\x96\x8e\xb7\xa50\x96/\xd69\xb0.\x96\x9d\xae\x81\x1eL`\x88\x9e\xdd\x18DA\xfe\xc6\xeb\x87i\x99\xd5\x12$\xd3Yp\xd0\x9a\x1e\xf3$p\x85p8gM\x12\x8d2\xa7\xa5\xc1\x8b\xc5\x1b\xb0.\x1acE$\xdd\xfc\x9cg\xda\x9a@\xa1\xdduF\xbfw\xabo#\xeek\xa8\xb6r@\x12\x1f[a\xd8m\x83q`\x82hs\x92\xf0\xb1q\xb9\xbc\x0cTB\x8b\xea\xf5t\x0e{\x1d(\xa1\x97\xe4F\xa4\xa65\xdd.\x87\x18\xc7\xa3\xdeu\xb5\xa0%:6\x91\xff\xae#|\xb5P\xa0\x0f\xf3\xc0\xd5 %\x9f\x93c\xe6\x99V\xdbR\x18I\xbe\xca\xe3\xc2\xf4\xbaD\xc2Sd\x9f\xdd\xa8T2-\x19\xa1\xcbkG\x16NfZ\xea\xf8+\x13\x8c,[\xce\xf1ql\x7fDh\x94m\xda\xf9\xc7p\xd4\x8eW\xfeJ\xe3\xb4\x99X\xcf\xed\xd8\x9c5\xf0\xbb\x1e{\xfa5\x0e\xb3\xdb\xf2\\\xde\x18\x80\x9e\xfdl\x06\xe6\xc7y?\xd5N]\xad5\xef\xd5\xae`\x81\xc0\x8f\xe5\x93\xb0vn;\xa0c\x88\xd9K\x83\xf3\x85\xceaJ\xc0H\xf1\xac`\\O\x99\xde\x8a\xc3\xd4\x8f\xfc\x95\xc5\xde\xb4\xbe`\xb0WdVF\x17\'\x87pW\x8c\xcet\x82\x1ax\xbf\xe9\xd27\xb24\n\xe7\x0c\xae/~\x80\xcd\xbel9\xd7\xe5!\xf1\xf0\xaf\x81`\x86R\xb6Da\xae\xf9K\xac\xe3\xa6\x12\r\xb7\xb2C\x04{$\xb1\x0f\xacG\x9e\xabS\xb7\xe7{\xfd\xe0s\xea=\xaa\xca\x02\x90\xdb0\x9fA\xdfZ\xd5\xcd$\xffN\x85-\x1d9\xdc$\xab\xe1:\x919dB\xfa\xccH>^\x83v#P\xca\xb4\'\xf86\x0e\x8e\x8a\xf0H\xbd\xd8L\x88\xcc:K\x84\xe1\x84\xa84\x80\x973X\xf1Y\x10M\x0e\x08Z\xfc\xc2\xb0\xe9e\x1b\xc9\xb6\x88\xc8\x82\xd5\x8b\xd6\xe2\xe6\x986\x87\x1f\xa8\xe2\xdd\xe2!\x16\x0f@\xf5\x8d\xea\xf6\xb7z\x82\xa9\xd7\x927P),\xdd\xfd\x8db\xe8\r\x08\xe4\xdd\x1b\xf58\xac\xc7P\x7f\xb8m\x0e\xc5\x06XC\xc6\xad\x0eK"h\x17{h\xd2\xeb2\xb2#\xbf\xbf\x99bp\x07m\xe6\xac\xb7\x10\xf2\x0f\x809\xb9\x803\xcd\xf1U\xa1a\xec\xb5\xdb\xb7R$\x82\xf0\xd2c\xdfy\xf0N\xf1C\x92\xb3o\x8c\x97\xc6\xec\xea\x17\xab\xf2\xb9\xbbQ\xe8\x91\xbbd1\x91\xcf,\xfd\x14s\xde\xfa~S(e2a[\xc8\xfb\xd2g\xfd\xa0\xcb\xa6\x83)DdC\x8b\'\x0c\x98ER?\x8b\xc4T\x93\x7f\xb5\x90"\x8b\xbd\x15>z\xb0\x0cGW\xeb$h\x06\xa1\x05 T\xa1s,\xc7\xc9+\xa4\xf3\xc2T\xfd\xd3R\xb0\xda{\x1c\xeaU,\xdb,\x18\xcf\xce\x19\x911\xe0\xaaD\xf2\xaf\xe8\xf5\xfb\x96\x8b\xef\xcd\xa9|_\xaa\xdf\xa0\xd0\xf6\x15-\xba\xe2\x96\xef7\xd4\xcc-~N\xe0\x8e\xc7&\x97\xe4\x0ck\xc1\xc9\xe6\xb6\xe1\xfd\xa2\x90Kp\xdd\x1a\xbd\xbd_\x9d\xe4\x0etV \xf7\xf7\xe5\xe5~\xef}\xb1\xb8u\x10aa\x8c\xf8\x1a\\\x88\x939l\x0b\xe6\x9e\x15\x8c\x98\x97\xedV4\\\xe5\x12\xfcBCB\x9do\x15\xf8\xeb\x1b\xddH\xdb\\\xe1\x99B3\xdfHK\xd7\xd6v\x04\xb6(\xc7L/G\x9cJ\xc64Gd\xcd@.\xc6\x83\xfe\xbc\xf1}vM\xb4\x04\x8b"\xc5$\xee9\x12\xd1H\x9c\xe1\xf9\xf2O\x1e\x14\x06\xe9\xe0M\xd7\x164\xc9l.\xef\x9dG\xa8\x05|\x01\xd1\xf5\xeb\xe8\x8dnMq\xa4\xa2\xb4Z\x91\x05dN\xe7f\xa0\xdf\xf8\xf6\x87\xf3R\xc0\xe84\rgc\xad\x8bOl`\x1e\x171\xda\x00\x93{\xb7\xe5\x95\xde\xbb\x98\xa5\x95y\x85PML\xa2>\x03\x14\xa52!/\xe3^\x82F\x11\x97\xf5_\xc3\x18${\xe0\xfe\xcc\x83`\xffNu\xcc~\xd8\x19\xde\xa5\xad\x95"\\O\xc2\xa2t\x04\x00\xf9\xed\xa5\xa2\x04!\xec\xf3(\xc6S\x8f=>,\x82\x1f\x8b\x82M\xd4\nu\xf1]\x9f\xd2\x1f\xa1n\x97\xd1\x1dv\x87\x01\xcc\x973\xc0\x88\xce\xee\xf0\xe5\xe1\xf9\xcb\x94\x198\x9a\x0ec\x9b\x18\xf5PG\x9b\xf4\xd2M\x05\x9bI\x00nm\x9f\xf3d\xb7\x98Ig3\xb8P\xbb\xfa3R\xe9\nS\xbf\xd3\xb7\x00\x1d\xf1\xc6\xcd\xb7\x91t\'\x05\x1d;\x9f\xe9\x0b\xfc\x94\xecY-\xe9\x0f\x16\xc3\x8a\xd5\xb2\x15\x86J\xd6\xd1\xe2\x0c\x9b\xec\xfd\xc9\xd4Y=\xcf\xd6\xb5\x88\x94\xa3\xeb\xc0\x94\x8cJ]\xe5m7]\xa1\x93[\xceT\xf5\x01\x16\xe5#\xab\xf0UG\x14\x04(7E4\xfb\xc2$\x18\x89\xe8\xf3v\xe0\x0c|\xba\xeeD\xf5\xbfu\xa05K\x15\x0f\x0fh\xe7\r\xff\x89\xf0\xd4\xc3\xcf\x9c|(\xa7\x9e\x9c\x06\xa9K\r\xe5\xf7\x9c\xf5\x94\x1bL\x90\xb9\x02\xde_\x853a\xa4\x17:\xc7\\]B\xb1\x185\xfe\x05\xd5\x8e\xb4P\xf7\xe8P\xbb\x84\x91Z\xed\x04Z\xfc\xcf\xa2d]\x8c[\x15\x82\x83N\x81\x89v\xfc@\x14[\xa4\xa3&\x95P\xb1\x1b\x97rd\xc3\xe0\xe1\x8b>\xdc\xf0C\xc8\xc84\xd9N\xf6\x15V&$\x946\x1a\x0c\xe8\x7fi\x90c\x81\xef.xO\x90\x1e\xef\x8f\xb3 \n\xad\xe5\x9b\xdf\xe1Pa\xd8Y|R\x87\xd06\xcb\r\xe3\x1d8^\xa9\xba(\xd9%\xbf\xfa\x81Y\x9e\x8dk\xb1\x10\xc5\xbdT1\xb0\xf8\x9dM\x1f\xa68~\xd0\x06\xed\xfb&!/3\xc3V\xc2\xd4.V`\xf3\xa6\xe8xg<\x08\x04\x9d\xe8\xe1\x7f\x91\x1b\x02g\x93\xfd\xed\xef\xd1\xe2\x042\xe1\xc2,\xe9\xaf\x0c\x1eX\x96&\x84\xc0\x1b\x844\x96\x13+WDc\xc2\xd1\xe2\xf5^x\t\xbc\x18i\xc4\xf1o\x9eD\xd441\x95ts\x97\x0b\r\xfc\xc6\x893\xd4\x82\xd7i\xc4\xaf\xf9A\xacX\x06mI>\xb4\x7f)\xd8t\xd5\x11\xc2sgZ)\xc2\x84\x8e\xc1u\x91\x995\xcc\xa3tF\x83g\x01\x92\xeb8\xce\xde\xe6\x0f\x0f=J\xd1\xef\x15_\xe6\x9d\xdf\xfb|\xf1\x93(R\xdb\xbfY0P\xb6\xa5\x19\xf4L\x050t\xa65\x06\x88\x9b\x88\xd0b\x18\x8aVY\xea\';\xb9\x81\x95\xe9\x9dt\x11\x907\t\x04\x9b\xd2\rX\xe88\xeb+\xa8\x1d\xf7\xcc\x80\xc7\x1d\xf7t\x14O\x1d\xb2\x95\xeaX\x05\x96\x08\x9b\xadu\x9do\x03C\xce\x0ct\xe4\xab\x81\xca\xf7\xa9\x01$\xb9F\x17\x87\xf7\xf5\xe1\xa3\n\x98\xb2\xd6\xed\xa0H,\xa7\xcci\x99X\x94\xac]\xcd\xdbW\x070\x11\xea\xa9\x12\xc8\x91\xf3nk\xd4\x1b:\xa5\xef\xe0\xd6\x1d\xd9W\x98\xbbfv\xb5#\x90t\xc1)\x96\x02A\x93\x1c\x0c\x83|-\x96!\xd1\x9fZ`A\xb5N\xc3\xf4k\xaaY\xd4\xc5\x80') diff --git a/addons/havari_arabic_fonts/models/res_company.py b/addons/havari_arabic_fonts/models/res_company.py new file mode 100644 index 0000000..c8a0407 --- /dev/null +++ b/addons/havari_arabic_fonts/models/res_company.py @@ -0,0 +1,3 @@ +# Pyarmor 9.2.3 (basic), 009742, subscription_packages, 2026-03-02T02:54:00.576354 +from ..pyarmor_runtime_009742 import __pyarmor__ +__pyarmor__(__name__, __file__, b'PY009742\x00\x03\t\x00a\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x00\x0c\x03\x00\x00\x12\t\x05\x00\xd0\xdb\xb0v\xde\x07j}[\xe6\xb3\xd4\x9d\x0c\xad4\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x8f\xde#\x94\xc5\xce<\xb7\x0c50\xcax\xefC\xe1[\xb6.<~\xb8M\xd3\x0b{e\x96\x9e\x87\xc1{H\x01Vo\xd6\x8f\xdd\xe6\xd8\xe4\xe3\x9e?X\xa2\xe9\xa3$Q\xfa\xab\xdeg\\d1%\xb8j\xb5C\xc0^\x8f\xddV\xe9a\xa8K\x19\xe3+\x94[\x8e\xbd\xe7\xb7\xa2\xc3\xf6\xab\x01f7\x18\xaau\x91\xd2\xb4&\x95\x1c:\x19i^\xf9Z\xe6!\x8e6\t\x01\x0e\xa7\x9a\x1a:\x7fqqOj\x06\xad)g\x11\xbc\x00\xa3\xc4O\x06\x82\x089\x96`\x1e\x00\xcfh\xe5S\x91\x83\xf1+\xe1\xacmOk\xdd0\xc5n\x1b\x92\xca\xc4\xfb\xd5Z\x00d\x0f\x0fj\x81\xff6\xcf\xf7\xcf\xa8i\xb1\xebg\xa3\xf0\xd2|\xc6\x83\xda\x94moW\x96NK\x86%\xcf_\n$|\x057=3\x8bK\xf0cS \xf8%k\xcd\xb5\xb8\xf5\x97\xa3\xa3\x15\x008\x87\x99%\x10af`\xe7\xad\xcb\x08\x01\x7f\xcca\xd7\x14mh\xa4\x03\xfd\xa2\xfbM`\x95\x97\x89\x9d\x8fY\x87\xd5h`\x07\x18\xc9\xe3\x0e\xfe\xdf\xeb\xf4s\xeb\xcc\x02@\xc5I$qU)2U\xd7]\x8ef*N\x9dR\xd5^d+\x93\xba\xff\x91C\x1f\x8bX\xd9y\xb0\xbd\xb2\xfc\x00SN\xa8cM\xe7\x05M\xc6\xa6\x996k\x9c\xb0`\x10#Af!\xdb`o\xf1\xec\x12\xb8\x10-\xf7\xf6\x14R\xdb\x84\x85\xdb\xbb\x03\xab\xdb\x98\xef\xcd\xc1c\xf7\xcd\xe3_\x17\xe2\x83\xca\xc3`n2\\\xc0w\xd1\x8a!|L\xc8U\xd7\x9d\x11\xac\xa0\xc7\xc6\xe5\x17\xff\x9bw6\xad\xb9n\x84&\xf9\xdc4x\x02eWa\xb1\xb3\x13\xae7\nj\xd8J\x86\'\x99s\x91\x0f\xde8!\xd1\xa7\n%@\x19\xf5[=\no\x03sBT?=\xd6\x0c\xb6+\x9c\xe6\x0f6\x9e\xe3 \xd8\x12D\xe8\xe6\ry\x08\xb0\xe8g]){\xdb\xe3o\xa2\xc7hp\xd0@n\x96\xc1\xeby|\x966\x8a\xc7\xc9\t\xcf1\x95\xb2\xf2\xa1\xd4p\xd0Pal\x99\xb4\xbcY\x02\xbb\xed\xf5`\x01/\xa2\x16>\xa0e5\xf8"\x11\xd7m\xad\x0fb\xce\xf8\xa5\xc1\xee\xe0P_2\xb4\x01\x89\x926\x07\x8f9\x94\xf0\xba\x10\x9e"\xd2H\x18\x07\xe5N\x00\xf0\xcf\xf2|\xbb\xb2\x9cxzf\xe3$~\xfa\xa9\xc21\x06F\xe1\xf3\xac\xc9\xbd\xd3\x8a\x15\n5\xe0g=\x0bv+\xd6\xe1`5\x9b\xa3\xfcSk\x00\xa9\x18\x94o\x99\r\xccz\xefL\xf3G\xefa\x06d&4\x1e\xf8\x10\xa6 \x81P\xbb\xcd\xda\xf0\xda\xca6\xfa\xdeh!\x8d\x93\xc2\x7fM\xd5\x81;\xf0\x1f>*\xc6z\x1dVw\xaa\x8fJ\xb6h1\x18z\x1e;^#\x8e\x9fd\xdaL\xaf\xb1\xaaQ\x07\xbaH\x91\xd0.\xcfR\x7f\x97OD\xc7EA|\x95\x1e\xdaa$\xa3}V\x92\x84\x97\xa2/\xc4\x8f\x13<\\D\x9a@\xfd\xe8^x\xd4\x1a\xaa\x1e\xd7j\xed\x01\x0b\xc4\xb5\xff\x12\xaf/m\x1a\x18?9\n\xffrX\xd2\xbdN{,t\xda\x94\xb4`N\xa5\xd9\x1d\xb3C\xae\x07\xae\x144/\xdas\xc4[\xe9\xb0\xf8\xe3\xa2\xe9\x84\'\x85`r\x12X\x17\xa3\xf8g\xf6~U\xe9}GH"i\x87\x87^R=\xd9\xc6)\x06z\xe0@\x81\x03\xca\xe0\xa9\xbb\xf8\x8ft\x11oU\xa0#b<\x9f\x1c\xe9p\xe0m\xaa\xf6 :\xdf\x1a\x7fP_\t\x93\xf5\x7f\x0bL_\xf5\x0em\'#%\x89w\xfe\x1e\\S(\xb8\xc9Z\xf5!"ncAe\x92\x891\xdfk\x11k\xe9Ls\x1d\x98\xd2\xeb=a\x9a\xbb\xa7\x82\xff$D\xe6\x8d\xdd\x01\xa8\x944\xc1>L\xd0\xfe\xea\xdf&t\xfd\xf5\x89.\xf3m\xa5f&\xfd]\xcd\x81\xdf]<\x11|W\xf7\x01\xa9\x9d\xe0aQ9\xa6P\xea)\xa7\t\xb1\x03\x86\xfa\x83\xeci\xee\xde]\x16\xee\xd2M\x7f\xe0\x10I\xfaQ\x8aD\x82\xbeRN\xc61\x81T\xcasy)z%\xf6rg-\xdb\xc2\xeb6\xe2\xd4\x81\x1a\x9dFZ\x15\rO\xa9$\x02\x8dm\xb44\x04+0\xff_\xed\x90\xe3\x8fKH\x9d\x0fMcu\x08\xc4\x08\xe7\xb6}\x92\xdcl\xe1pJ\xb4\x97\x197H\xf7\x86\xc7\x8cv\xa5\x10}4n@\xa7>\xce\x03\x16\xd9\xc0S\xff%\\\xcf7\x15>\xdb\xb1>\xacCYy\x8f\x7fL\x8az\x94\xfc\xd0r\x9d\xa8\xb1\xe8\x03sK\xfb\xe3@=#\xd7\x1a\x06&h\x14\xe2\xc7\xa3\xd1\xb5\x88*\x07\xe0\x1f\xb5\xcf\x84:\xb9\xc8\x13R2\xafb9\xb3\x1a\x1c\x97\xdf0\x99)\xc4\xf1\x1b\x9bS\x02\x1b \xe3\xec\x82"]+`\x9d\x81\xb8G\x16O\xb7S?-\xa8\x9f.|\x15\x060\x03\x9aadY\x1a\xbe\xe6\x1c\xac\xdf\xce\x8d\xff&\x85\x92=e\xbd\x10\xb8a\xe1\x98\xd2\\\x91\xc4B\x07\x03\xa3=\xb3`\x0b\xf5\xfel\x0c\xe7\xa3\xd5\x1cT\x8e*\xa6R\x83\xac\x9d>\xbe\x8b%kf\xccU\x8bp\x04*\xfd\xef\xffd6DZ\xac\xfa\xa1g\x9c\x0e\xe8Th\r\x1cq\x1aO~|U\xd8\x96\xbf\xb3\x12Wm\xb9\xe2\xa2\x07\xea\xc8\xdf\xf5IdO(\x88\xac\xb3\x1c\xcf\xe9\x1f\x11M\xd3h \xddb\xb8\xa6+\x9d\x18\x9a\xe4\xf8Jx t\x06\xa9\xcc\xb1\xd52\xa0\xcfM\xba\xb8\xa0\xb1\x16\xd6\x8f\x0e\x99V\x11\x1e\xe4\xcd,\xc9\x1bb|P\x92\x0c\xa5\x1f\xfc\xcf1\x92O\xae\xd6\x10\xea\xb8\xff\xef\x8f\xd7f\x8aD\xd5O\x86\xde5\x12\xc3 \xb5\xba\xc4\xd6{\xb7y\xf6\xf8\r\xdd\xb2D$\xce\xada\x11\xbfifS\xbeb\xb3\x0e^n\xb6\xa6\xb8k\x05\x05\'\xbb\xfb\xb3\xa1\xee\xf0\xadXH\xce\xe7\xce\x13\x03\x8e\xd3F\nm\x85\xa5\x8f\xc5\x90\xa71\x84C\xad\xbc\x80\x87\xc0\x18\xa5-\x1fX\xf5\x82\x8f\xdcB\x0e\x7f\xe6b3\x15\x00=\xc5P\x8a\xd8T\x18i\xb2~m\xb4\xa0\x86^\x8e\x94\xa4\xa9\xcd\x0f[q9\xbcd}\x9cpY\xbf\x99s\xf8\x86\xef\xd8\xd04\xea\'iov\x10\xb7\x83\x1b\xb5\xbf\xa1\xce\xb1\xf3\xfarLB\xa9[\x19-\xfc\x1c\xb5\xcd\x1bP\xb4\x90\x0fC-\x98\xc3\x0e\xd6\xa8 \xa4\x88\xc2\x9em\xbd\xa5\x13\x04\x94\x1b\xdb\x11k\xedrq\xc1XE\x8d\x97\x84G\x93\xebqvUEP.O(\xff+\xe0\x9a\xa3@\xfe\x13cO\x8f\xe28%A\x1f\xea\xf6\xe82\xd1\x0e\xedu\'\x99TdcR\x18:\x99\xe4\'\x82{\xde\xf0\xf8\xab\xb0\xd0\xe53o\x9e\xd0\xcf\xed[\xf1\x008\x08\x95rs\x15\xe3]\x96g\x033\x17\xed\x05\x8fUi\'R\x86h(\x82\x02\xbc\xed\x1cK\x03k=)\x87\x0f\xea\xd5H1\x0e\x8fT9PK\xe7\xb5\xe6hR)c\xfa\xa2$\xee.\xcaa\xd1\nr\x89\x99\xe1az\xed\x12\xedC\xac\xb0^w\xe2\xd1 \x02Y\x85\x7fv%tPK\xcb.\xd5_\xb4\x03%\xa0:\x87:lc+\xba\xc1\x19\xb6\x80\xf3\x0elv\xd1\xa3\xb5d\xeb\xe5\x974\xd7\xa3\nvKa\xe3\x1b\xd1\xecD@qK\x81H\x07+\x8c@\xc4\xe7\xfa\x98OoHDy\xba\x07\xd6\xaa\xeeF\xec\xbaa\xfe\x11D\x8f\x19P\xa0\xe72\xe3\t\x01\x19t\xf2\x9e\x99\xef]\xa1\x14Q\xc4\xfb7\xb0\xdbNH\xcf\x8e^\xd2\xaf\x8eN\x0f\x13\xe6S\xea\xf8u`6p\xc5\xc28;\xebC\xf5\xf6\xe3\xb6\xf4\x9fTdQ\xd62\xda\x9b\x07\x1e#\x93<\xf8\xa1@\xf0\xb3A\xeb\x18oa%\x83\xc7.\xd7\'\xfd\xda\xf0\xf6i\xdf\x19\xd5\x1f\xa5\xbc\x12\xe5I\xea\x9b$=\x0b\xddB\xa1\xaf\xb5\x9baM\x0c\xe1\xa34\xed\x7fh\x13\xf6\xbf\xe9q\xca\xbcR\xf3\xcb\x0c-\xbe\xafrua\x16\xf9\n6\xe5\xa3\xd5t\xe7\xa6\xbb\xe8\xac\xb8@\x81\xd8\xb7\xeb\xcc=\xadv\x15\xa8\xa9M\xf6\'\x1d\xa1\xbbC\xd0\xa6g\x18N\xab\xcc\x81MROJ-l\xb4U\xfbKu\xda\x14zI\x05N\x82\xd5n\xe9\x900\x9a\xb5\xbf\xe7\xfdH\x86\x1a\xa6\xb24\xe5\xb5W.\x86\xad\xc0\x90\xe0\xfc\x85\x866\xceNB\xf6\xd8\xdfl\x06\x1f\x91\x8d\x15r\xd4\x8fF\xe5T\xdb\xf7\xd5W4\x0c$\xc5\x1a\x98\xc4\x1c\xd3\xbe\x18oZ\xe5\\\xcbi}_\xd0\xe2\xc2\xbc\xd2\xe2\x8f\xff\xbe\xf3\x06\xf4\xb9+#b\xfc\xd4t{\x82\x16\xbf\x7f\x8b\xf8\x8b\xc8d\xba3.1b\xafI\xb9o\x07\xfa\xafb6\xd1)T\xa3jv\x98:\xce\xd3b\xa7\x88m\x7fj}\x9a\x14\x82\x84\xe47\xa8\xbd\x08Z\x07Ly\xb4\xf3\x12\xb5\x90D\xb5N\xc5\xd4E0\x85\x86\\nR\r\xfe\xa7\xd1\x7f\xf4\xdarZ\xb7\x05|\x8cN\xb0\xc9\x1c\xbb\xfd\x13\xdf\'\x01\xf1\xe3\xce\x10\xc7\xca\x7f\xe6\x1e3\xbd\x86\xad \x05\x19\x97\xe8I\xf5\x1b\xba\x07H\xcc8\xfbAG\xd9\xd7\xd7\x02\x02)\x8b\x90{\x8eC.cpa\xb6q\xfe\xa9\x93CL\xef\xc4H\x8fT\xef\xd6S\xb4\xd9\xe0YtQ\xee\xab\x1f*\xe9\\\xca\xca\x7f$\xc8\xde\xf2\xfe\xd7x\\\x91*\xd6n\x10\x97=\xe8I\xe1(\x82%:\xaf\xf4\xb8\xd2\xca$\x06}.z\xf9\xc5\x14\xa1b\xf0\xbd\xa2\xacNNe\xfa)\x97\x01_THS\x86/_\x88=\x16\x81O\xd1\xbf\xec \x9f{E\x8c\x1e$G\xc8\xf8\xc8\xf9M\xb8\xd8\xc0\xe1\xd5\x16\xf7\xbd.\x9e\t\xbe\x0b\x96\\\xe3-\x1a\x01\xd5+\x8f\xa1{r\x8cE\x16f\x0b\r\xf0\x9et\x05\x84\xd4\x9a\x17\xda\xcb\xdc\xd0^\xe2\x14A\xf4\xd1\x14\x0f\x91\xd5\x98\xf5\tX\xb7\xc0\xa4"\x10\xd3\x7f\xf0!\xb71#\x85\x0e\x84>O\xaa\xf7\xdfF\x99K\xf1\xd8\xaa^\xdcd\xdf\x93 91\x99cz%\xb5\x05\x01 \xb3\xa6\x9e\xe9B\x15\xfd,\x0cr\xd6\xee+\x11\x9d\xe9\xbf\xda\x17\xcdf97\xc7\xfal-\x91\xd0X\xf5;\x1a\xf3\xd2\xbaR\xb1\xc1\xd2\x9a\xd1\x981\xa9\xa5m\xe5\xa4\xe0\xdd\xe3n\xafY\ti\x95\x91bX\x1a-+*\xc7\xac)I\x08;\x96}Y\x98\x1b\x19\\\x17\xe2\xbbe\x92\xe3\xa6\xdc;\xbd\xa2G\xb9\xd7\xf3\xce\xac\x16\x91uv\xca.q\xa0\xdb\xd2&)\xcb<\x074x-\x9c\x921\xa6X\xfc(X;\xa6\xc9T/\x1ei\xd1\x99\x8e\x93\x1e\xee\x8aQ\x9b\xa7\x93\x19{\x85\x80I\x18\x80\x95QI\xe7\x86\xda\xa6\xb2\xdd\xbf\xfcz)\xe3\x97\xce\x86\xb8\xf9\xad\x16@\xd3\xf8{0\xc7E\xe7\xaefM\x0c\xd6\xd9;\xa9\xa1\xc7\n;\xba\xc1"\x8f\x03v\xb5\x17\xd0fy\xe1\x81\x1e\x10Pj\xa9\x13O4%\x96Y\xb6\x8f\x86d\xe8\xb5\x94$\x92\xb0\x1e1v\'7Z\x08Fy\xc6\xa5~(\xc8\xf2,\xd5\xef\xcb\x1biv\xcc\x1c>\x8dP\xd3\xc4\xa5\xf3*\xb3\xff)\xef\xb3z\xc5\x93\n\x952R;\xfa\xd9\xa4\xd9\xa8\xdep^\xe9b@\x8cm\xa3w8\x84m/"\x0ckr\xee\xc5\xaaZ\xa9K\x19\xf5\xb0"\x12\x87PD\xda\xa1Q\xb6`\x9f\x81\xf6\xe1\xb0\xbd\xf3|\xb6\xfe\xb6\xdfB\xa2\xc2\x80\xe3N\x84T\xfc\xd0K\xdb~A4\xd7\xed\x1b\xeeA\xdc\xa2,\xd1~\xc6\xc9`\xee?]\xb76{> m2\x1f\x9e\xa4\r\xbb"\xe6N\xd1\x8b\xbb\x82b"\xb1\x17W\x07\xf9\xbb\r\xc5\x88$\xc4]^\x10\xaaN&\x11g\xa7\x7fT$\xa8\xd551Cx\x06\xf8\xa9\x03\x8d\xbb+\xb9\xb5\x01\xee\x81f\xcb\x89\x1a\xec\x83c\xb1\x95\xb8R\xde/\\\xe5J.\xed.T`_!v\x05\x06\x83sS\x8e\x04M P{\xaf\x82\xf5\xc4\x9b\xe3\x1a]q\xe92\xfa\xad\x18\xa8\x91NZMU`\xbeE\xf0\xcbf|\xe0^l!0\x14\xda\xe6\xe3K-\x1b\x13\xe9\x1buH\x8f\xb9lL\xeaaL\x08\xad%]\x1eW\xab\x1e\x92\x16\x9f\x18\x051\x06\xd2\x06\x99\xc7q\x9e]\x1d\x81\xd5j\xadg\xd2,\xe2G\xda\xfe\x80\xcb\xa4\xfd\x95\x1c\xd8V3\x91\x8dWQ\rx\'\xd1t:O\x89bc\x04>\xfc*\xb5\r\x01\xcc:\x9e\xe5q\x16\xd4\xd64\x13\x1d\xfe\xfe\xb9\xa6\x8a\xbb;\x90\x1c\xfc\xa8\xc117\xd4\xacOVz%\xfb\xd9\x02\xfb\x92&\xf4R\xa72\xdeO\x04\\\xd6\x07O\xe2\x002?\xd8y\xf4\x1f\x94\xa0$x\xbc\xa3\xcfC~F\xb6\xe2{\xaejT\xc6\xc3\xd8[\xda\xcdy\x13\xe7\xf2\x05|Z9!\'/\x95[i59\x0f\xe2\x9a\xb5H\xb8\xa1\xcb\xcb\xf8W\xe7\xbc\x8f\xf5\x18\xfcc:3D5\xb3\xc8\xe2a\x92>cpXd\xbd\xfb\xe8\x1d-\xd5\xca\t\x92VA\xcbk`\xa4\xc1\xf2\xdf\xbc\x18j\xda\xd60\xca\xa45s80M\xacI1\x89\xc7\x16F\x81.|AEr\x9c\xe8\xd8\xc7:Hr\x1a4\x91\xbb\xe0\\\xde\xf9\xb67\xbe\xf1\xb7N\xb1\xf5eb\xdf\xdb\xc1\xb7\x93\x99\x1c\xf4\xbd\xeb\xc5\x89F\x98T\x08V\xdd\x101 |_\xa7\x1e\xc2\xcbz\xb9f\x162\xee\xa1\xbd\x97"\xe4\x81\x91\x03\x9e\xfc\xbd\x94\xf5\xcc\xadF\x941\xf7"h8r\xf7J\xbbe\x9ckU)\xf7:Rjj\x157\x9cgV\x83\xe9\xce\xaa\xcf\x8d\x88P\xd1\xc1\xf7\x9e\x91$\xa8\x97Dp\x1f\xfd\xf2H\xde\x08\xbd}\xcd\r\x95\xe3\xa5\xcb\xe1\xa6,\x15K\x13\xe3\xde\xac\xc7\xf6^\xc4\x81\xbc\x19|\xe5\x914\xc2\xafLc;Mu\x05\x8f\xb8\x91\xd2\x9a\x02F\x12\xae\xd0\x98)m\x1e\xee\x06\xc5\x01\xc7\xa9\xd5\x996\x18q\x89s\xaf\x08?\x03\xae\xa1_\xc93;@1\n\xe4\xe4+\x1f{\x98M\xc8\xe0g_X') diff --git a/addons/havari_arabic_fonts/pyarmor_runtime_009742/__init__.py b/addons/havari_arabic_fonts/pyarmor_runtime_009742/__init__.py new file mode 100644 index 0000000..2fd2a7c --- /dev/null +++ b/addons/havari_arabic_fonts/pyarmor_runtime_009742/__init__.py @@ -0,0 +1,2 @@ +# Pyarmor 9.2.3 (basic), 009742, 2026-03-02T02:54:00.531077 +from .pyarmor_runtime import __pyarmor__ diff --git a/addons/havari_arabic_fonts/pyarmor_runtime_009742/pyarmor_runtime.so b/addons/havari_arabic_fonts/pyarmor_runtime_009742/pyarmor_runtime.so new file mode 100644 index 0000000..3d04bf0 Binary files /dev/null and b/addons/havari_arabic_fonts/pyarmor_runtime_009742/pyarmor_runtime.so differ diff --git a/addons/havari_arabic_fonts/report/report_templates.xml b/addons/havari_arabic_fonts/report/report_templates.xml new file mode 100644 index 0000000..cb040ea --- /dev/null +++ b/addons/havari_arabic_fonts/report/report_templates.xml @@ -0,0 +1,311 @@ + + + + + + + + + + + diff --git a/addons/havari_arabic_fonts/security/ir.model.access.csv b/addons/havari_arabic_fonts/security/ir.model.access.csv new file mode 100644 index 0000000..97dd8b9 --- /dev/null +++ b/addons/havari_arabic_fonts/security/ir.model.access.csv @@ -0,0 +1 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink diff --git a/addons/havari_arabic_fonts/static/.DS_Store b/addons/havari_arabic_fonts/static/.DS_Store new file mode 100644 index 0000000..51e9e1b Binary files /dev/null and b/addons/havari_arabic_fonts/static/.DS_Store differ diff --git a/addons/havari_arabic_fonts/static/description/.DS_Store b/addons/havari_arabic_fonts/static/description/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/addons/havari_arabic_fonts/static/description/.DS_Store differ diff --git a/addons/havari_arabic_fonts/static/description/icon.png b/addons/havari_arabic_fonts/static/description/icon.png new file mode 100644 index 0000000..3ed4a8c Binary files /dev/null and b/addons/havari_arabic_fonts/static/description/icon.png differ diff --git a/addons/havari_arabic_fonts/static/description/icon.svg b/addons/havari_arabic_fonts/static/description/icon.svg new file mode 100644 index 0000000..dfab891 --- /dev/null +++ b/addons/havari_arabic_fonts/static/description/icon.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/addons/havari_arabic_fonts/static/description/index.html b/addons/havari_arabic_fonts/static/description/index.html new file mode 100644 index 0000000..3c7d006 --- /dev/null +++ b/addons/havari_arabic_fonts/static/description/index.html @@ -0,0 +1,215 @@ + + + + + + Font Fourth Arabic + + + + +
+

Font Fourth Arabic

+

تحسين الخطوط العربية في أودوو

+
+ +
+

نظرة عامة

+

+ إضافة Font Fourth Arabic توفر تحسيناً شاملاً للخطوط العربية في نظام أودوو، + مع دعم كامل لخط دبي وخط الجزيرة، وإمكانية التحكم الكامل في الأحجام والأوزان. +

+
+ +
+

المميزات

+
+
+

خطوط احترافية

+

دعم خط دبي وخط الجزيرة بجميع الأوزان

+
+
+

تحكم كامل

+

إعدادات مرنة لأحجام وأوزان الخطوط

+
+
+

ثلاثة أنماط

+

أنماط جاهزة: مدمج، متوازن، مريح

+
+
+

دعم التقارير

+

خطوط محسنة للطباعة والتقارير

+
+
+
+ +
+

الخطوط المدعومة

+ + + + + + + + + + + + + + + + +
الخطالوصفالاستخدام المقترح
دبيخط عصري وأنيق من حكومة دبيالنصوص والقوائم
الجزيرةخط احترافي وواضحالعناوين والأقسام
+
+ +
+

الإعدادات

+

يمكنك الوصول للإعدادات من:

+

الإعدادات ← الخطوط العربية

+ + + + + + + + + + + + + + + + + + + + + + + + + +
الإعدادالوصف
النمط العاممدمج / متوازن / مريح
خط العناويناختيار الخط للعناوين
خط النصوصاختيار الخط للنصوص
الأوزانمن خفيف إلى عريض
حجم الخطمن 12px إلى 15px
+
+ +
+

التثبيت

+
    +
  1. انسخ المجلد إلى مسار الإضافات
  2. +
  3. قم بتحديث قائمة التطبيقات
  4. +
  5. ثبت إضافة "Fourth Arabic Fonts"
  6. +
  7. أضف ملفات الخطوط (دبي والجزيرة) إلى مجلد static/fonts
  8. +
+
+ +
+

الدعم

+

للدعم والاستفسارات، تواصل معنا عبر:

+

Fourth

+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/.DS_Store b/addons/havari_arabic_fonts/static/fonts/.DS_Store new file mode 100644 index 0000000..3cb9c50 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/.DS_Store differ diff --git a/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf new file mode 100644 index 0000000..9587cca Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf new file mode 100644 index 0000000..87cb7d1 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf new file mode 100644 index 0000000..8b2d9f3 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf new file mode 100644 index 0000000..8b2d9f3 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf new file mode 100644 index 0000000..3713a46 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf new file mode 100644 index 0000000..b4093bd Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf new file mode 100644 index 0000000..1ce664a Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf new file mode 100644 index 0000000..017afa9 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf new file mode 100644 index 0000000..14dfa0d Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Bold.ttf new file mode 100644 index 0000000..c484b26 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Bold.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Regular.ttf new file mode 100644 index 0000000..773c22e --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/aref-ruqaa/ArefRuqaa-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf new file mode 100644 index 0000000..4ef873c Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf new file mode 100644 index 0000000..9214657 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf new file mode 100644 index 0000000..957811e Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf new file mode 100644 index 0000000..81c3544 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf new file mode 100644 index 0000000..b5e84a6 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/changa/Changa-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf new file mode 100644 index 0000000..76d8428 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf new file mode 100644 index 0000000..f48d3b0 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf new file mode 100644 index 0000000..102e6dd Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf new file mode 100644 index 0000000..88505bd Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/el-messiri/ElMessiri-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/el-messiri/ElMessiri-Regular.ttf new file mode 100644 index 0000000..59bdf42 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/el-messiri/ElMessiri-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.eot new file mode 100644 index 0000000..e75459a Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.ttf new file mode 100644 index 0000000..0ed1ac0 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff new file mode 100644 index 0000000..8386148 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff2 new file mode 100644 index 0000000..d531a8a Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Bold.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.eot new file mode 100644 index 0000000..e46cead Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.ttf new file mode 100644 index 0000000..da29255 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff new file mode 100644 index 0000000..85fadbd Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff2 new file mode 100644 index 0000000..b50ce8f Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-ExtraLight.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.eot new file mode 100644 index 0000000..0996317 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.ttf new file mode 100644 index 0000000..f34493c Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff new file mode 100644 index 0000000..5d08708 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff2 new file mode 100644 index 0000000..5a80c62 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Light.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.eot new file mode 100644 index 0000000..93e8d93 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.ttf new file mode 100644 index 0000000..3658b0f Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff new file mode 100644 index 0000000..7dad0e0 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff2 new file mode 100644 index 0000000..6fd949f Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Medium.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.eot new file mode 100644 index 0000000..8b7baac Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.ttf new file mode 100644 index 0000000..9c84775 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff new file mode 100644 index 0000000..0dc34d2 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff2 new file mode 100644 index 0000000..9d6c5a0 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Regular.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.eot new file mode 100644 index 0000000..b7e4d32 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.ttf new file mode 100644 index 0000000..aac1dd7 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff new file mode 100644 index 0000000..9be3618 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff2 new file mode 100644 index 0000000..bdcfadb Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-SemiBold.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.eot b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.eot new file mode 100644 index 0000000..ebc3963 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.eot differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.ttf b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.ttf new file mode 100644 index 0000000..9a5f612 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff new file mode 100644 index 0000000..86b3fb8 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff differ diff --git a/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff2 b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff2 new file mode 100644 index 0000000..bcf6802 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/ibmplexsansarabic/IBMPlexSansArabic-Thin.woff2 differ diff --git a/addons/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf new file mode 100644 index 0000000..d7bfec4 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/mada/Mada-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/markazi-text/MarkaziText-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/markazi-text/MarkaziText-Regular.ttf new file mode 100644 index 0000000..9d517f1 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/markazi-text/MarkaziText-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Bold.ttf new file mode 100644 index 0000000..c3a9137 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf new file mode 100644 index 0000000..2fb448f Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-kufi-arabic/NotoKufiArabic-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Bold.ttf new file mode 100644 index 0000000..85e5e85 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Regular.ttf new file mode 100644 index 0000000..0259f66 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-naskh-arabic/NotoNaskhArabic-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Bold.ttf new file mode 100644 index 0000000..8819e4d Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Light.ttf b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Light.ttf new file mode 100644 index 0000000..2d0d946 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Medium.ttf new file mode 100644 index 0000000..aa19ab6 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Regular.ttf new file mode 100644 index 0000000..ce21d4f Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/noto-sans-arabic/NotoSansArabic-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/readex-pro/ReadexPro-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/readex-pro/ReadexPro-Regular.ttf new file mode 100644 index 0000000..61f4122 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/readex-pro/ReadexPro-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/reem-kufi/ReemKufi-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/reem-kufi/ReemKufi-Regular.ttf new file mode 100644 index 0000000..50bb1ec --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/reem-kufi/ReemKufi-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Bold.ttf new file mode 100644 index 0000000..a9960d3 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Bold.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Regular.ttf new file mode 100644 index 0000000..ebec983 --- /dev/null +++ b/addons/havari_arabic_fonts/static/fonts/scheherazade/Scheherazade-Regular.ttf @@ -0,0 +1,2151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page not found · GitHub · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+ + + +
+
+ +
+
+ 404 “This is not the web page you are looking for” + + + + + + + + + + + + +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf new file mode 100644 index 0000000..71e1488 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf new file mode 100644 index 0000000..a3daa16 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf new file mode 100644 index 0000000..96dee54 Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf differ diff --git a/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf new file mode 100644 index 0000000..d23d25b Binary files /dev/null and b/addons/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf differ diff --git a/addons/havari_arabic_fonts/static/src/js/font_preview.js b/addons/havari_arabic_fonts/static/src/js/font_preview.js new file mode 100644 index 0000000..43d0dbb --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/js/font_preview.js @@ -0,0 +1,196 @@ +/** @odoo-module **/ + +import { Component, useState, onWillStart, onMounted, xml } from "@odoo/owl"; +import { registry } from "@web/core/registry"; +import { standardFieldProps } from "@web/views/fields/standard_field_props"; + +/** + * Font Preview Widget + * معاينة مباشرة للخطوط العربية + */ +export class FontPreviewWidget extends Component { + static template = xml` +
+

+ + معاينة الخطوط +

+ + +
+ خط العناوين: +

+ بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ +

+
+ + +
+ خط النصوص: +

+ هذا نص تجريبي لمعاينة الخط المختار. يمكنك تغيير الخط من القائمة أعلاه ومشاهدة التغيير فوراً. +
+ الأرقام: ٠١٢٣٤٥٦٧٨٩ - 0123456789 +

+
+ + +
+ مثال - فاتورة: +
+
+ فاتورة مبيعات + رقم: INV/2024/0001 +
+ + + + + + + + + + + + + + + + + + + + + +
المنتجالكميةالسعر
منتج تجريبي5500.00 ر.س
الإجمالي2,500.00 ر.س
+
+
+
+ `; + + static props = { + ...standardFieldProps, + }; + + setup() { + this.state = useState({ + headingFont: 'Cairo', + bodyFont: 'Tajawal', + headingWeight: '700', + bodyWeight: '400', + fontSize: '14', + }); + + onMounted(() => { + this.setupFieldListeners(); + }); + } + + get fontMap() { + return { + 'cairo': 'Cairo', + 'tajawal': 'Tajawal', + 'noto-sans-arabic': 'Noto Sans Arabic', + 'readex-pro': 'Readex Pro', + 'ibmplexsansarabic': 'IBM Plex Sans Arabic', + 'mada': 'Mada', + 'changa': 'Changa', + 'amiri': 'Amiri', + 'noto-naskh-arabic': 'Noto Naskh Arabic', + 'scheherazade': 'Scheherazade', + 'markazi-text': 'Markazi Text', + 'noto-kufi-arabic': 'Noto Kufi Arabic', + 'reem-kufi': 'Reem Kufi', + 'aref-ruqaa': 'Aref Ruqaa', + 'almarai': 'Almarai', + 'dubai': 'Dubai', + 'aljazeera': 'Al Jazeera', + 'el-messiri': 'El Messiri', + }; + } + + get headingStyle() { + const fontName = this.fontMap[this.state.headingFont] || 'Cairo'; + return `font-family: '${fontName}', sans-serif; font-weight: ${this.state.headingWeight}; font-size: 1.5em;`; + } + + get bodyStyle() { + const fontName = this.fontMap[this.state.bodyFont] || 'Tajawal'; + return `font-family: '${fontName}', sans-serif; font-weight: ${this.state.bodyWeight}; font-size: ${this.state.fontSize}px; line-height: 1.8;`; + } + + setupFieldListeners() { + // Listen to font_heading field changes + const headingField = document.querySelector('[name="font_heading"] select, [name="font_heading"] input'); + if (headingField) { + headingField.addEventListener('change', (e) => { + this.state.headingFont = e.target.value; + }); + // Set initial value + this.state.headingFont = headingField.value || 'cairo'; + } + + // Listen to font_body field changes + const bodyField = document.querySelector('[name="font_body"] select, [name="font_body"] input'); + if (bodyField) { + bodyField.addEventListener('change', (e) => { + this.state.bodyFont = e.target.value; + }); + this.state.bodyFont = bodyField.value || 'tajawal'; + } + + // Listen to font_heading_weight field changes + const headingWeightField = document.querySelector('[name="font_heading_weight"] select'); + if (headingWeightField) { + headingWeightField.addEventListener('change', (e) => { + this.state.headingWeight = e.target.value; + }); + this.state.headingWeight = headingWeightField.value || '700'; + } + + // Listen to font_body_weight field changes + const bodyWeightField = document.querySelector('[name="font_body_weight"] select'); + if (bodyWeightField) { + bodyWeightField.addEventListener('change', (e) => { + this.state.bodyWeight = e.target.value; + }); + this.state.bodyWeight = bodyWeightField.value || '400'; + } + + // Listen to font_size_base field changes + const fontSizeField = document.querySelector('[name="font_size_base"] select'); + if (fontSizeField) { + fontSizeField.addEventListener('change', (e) => { + this.state.fontSize = e.target.value; + }); + this.state.fontSize = fontSizeField.value || '14'; + } + + // Use MutationObserver for dynamic field updates + this.observeFieldChanges(); + } + + observeFieldChanges() { + const container = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]'); + if (!container) return; + + const observer = new MutationObserver((mutations) => { + // Re-setup listeners when DOM changes + setTimeout(() => this.setupFieldListeners(), 100); + }); + + observer.observe(container, { + childList: true, + subtree: true, + attributes: true, + attributeFilter: ['value'] + }); + } +} + +// Register the component +registry.category("fields").add("font_preview", { + component: FontPreviewWidget, + supportedTypes: ["char"], +}); diff --git a/addons/havari_arabic_fonts/static/src/js/font_preview_simple.js b/addons/havari_arabic_fonts/static/src/js/font_preview_simple.js new file mode 100644 index 0000000..e744f72 --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/js/font_preview_simple.js @@ -0,0 +1,306 @@ +/** @odoo-module **/ + +/** + * Font Preview for Odoo 16 Settings Page + * معاينة مباشرة للخطوط في صفحة الإعدادات + * + * Odoo 16 Selection fields store values as JSON strings + * e.g., "cairo" (with quotes) or false + */ + +const FONT_MAP = { + // Sans Serif - Modern + 'cairo': 'Cairo', + 'tajawal': 'Tajawal', + 'noto-sans-arabic': 'Noto Sans Arabic', + 'readex-pro': 'Readex Pro', + 'ibmplexsansarabic': 'IBM Plex Sans Arabic', + 'mada': 'Mada', + 'changa': 'Changa', + // Serif - Traditional + 'amiri': 'Amiri', + 'noto-naskh-arabic': 'Noto Naskh Arabic', + 'scheherazade': 'Scheherazade', + 'markazi-text': 'Markazi Text', + // Kufi - Headings + 'noto-kufi-arabic': 'Noto Kufi Arabic', + 'reem-kufi': 'Reem Kufi', + 'aref-ruqaa': 'Aref Ruqaa', + // Others + 'almarai': 'Almarai', + 'dubai': 'Dubai', + 'aljazeera': 'Al Jazeera', + 'el-messiri': 'El Messiri', +}; + +function getFontFamily(fontKey) { + if (!fontKey || fontKey === 'false') return 'Cairo'; + const cleanKey = String(fontKey).replace(/['"]/g, '').toLowerCase().trim(); + return FONT_MAP[cleanKey] || 'Cairo'; +} + +/** + * Parse a JSON value from select element + * Odoo stores values like: "cairo" (string with quotes) or false + */ +function parseSelectValue(rawValue) { + if (!rawValue || rawValue === '' || rawValue === 'false') { + return null; + } + try { + const parsed = JSON.parse(rawValue); + return parsed === false ? null : parsed; + } catch (e) { + return rawValue; + } +} + +/** + * Get field value by finding the select within the settings block + * The field name is in a parent div's data attributes or nearby label + */ +function getFieldValue(settingsBlock, fieldName) { + if (!settingsBlock) return null; + + // Method 1: Find by field widget name attribute + const fieldWidget = settingsBlock.querySelector(`[name="${fieldName}"]`); + if (fieldWidget) { + // If it's a select directly + if (fieldWidget.tagName === 'SELECT') { + return parseSelectValue(fieldWidget.value); + } + // If it contains a select + const select = fieldWidget.querySelector('select'); + if (select) { + return parseSelectValue(select.value); + } + // Check for radio buttons + const checkedRadio = fieldWidget.querySelector('input[type="radio"]:checked'); + if (checkedRadio) { + return parseSelectValue(checkedRadio.value); + } + } + + // Method 2: Find by looking for label with matching for attribute + const label = settingsBlock.querySelector(`label[for="${fieldName}"]`); + if (label) { + const container = label.closest('.o_setting_right_pane') || label.closest('.o_setting_box'); + if (container) { + const select = container.querySelector('select'); + if (select) { + return parseSelectValue(select.value); + } + } + } + + // Method 3: Search all selects and find by ID + const selectById = settingsBlock.querySelector(`select[id="${fieldName}"]`); + if (selectById) { + return parseSelectValue(selectById.value); + } + + return null; +} + +/** + * Update the preview section with current font values + */ +function updateFontPreview() { + const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]'); + if (!settingsBlock) return; + + const previewHeading = document.getElementById('font_preview_heading'); + const previewBody = document.getElementById('font_preview_body'); + const previewInvoice = document.getElementById('font_preview_invoice'); + const headingNameBadge = document.getElementById('font_heading_name'); + const bodyNameBadge = document.getElementById('font_body_name'); + const reportHeadingNameBadge = document.getElementById('report_font_heading_name'); + const reportBodyNameBadge = document.getElementById('report_font_body_name'); + + if (!previewHeading && !previewBody && !previewInvoice) { + return; + } + + // Get current field values - Backend fonts + const headingFont = getFieldValue(settingsBlock, 'font_heading') || 'cairo'; + const bodyFont = getFieldValue(settingsBlock, 'font_body') || 'tajawal'; + const headingWeight = getFieldValue(settingsBlock, 'font_heading_weight') || '700'; + const bodyWeight = getFieldValue(settingsBlock, 'font_body_weight') || '400'; + const fontSize = getFieldValue(settingsBlock, 'font_size_base') || '13'; + + // Get current field values - Report fonts + const reportHeadingFont = getFieldValue(settingsBlock, 'report_font_heading') || 'cairo'; + const reportBodyFont = getFieldValue(settingsBlock, 'report_font_body') || 'tajawal'; + const reportHeadingWeight = getFieldValue(settingsBlock, 'report_font_heading_weight') || '700'; + const reportBodyWeight = getFieldValue(settingsBlock, 'report_font_body_weight') || '400'; + const reportFontSize = getFieldValue(settingsBlock, 'report_font_size') || '10'; + + // Get font family names + const headingFontFamily = getFontFamily(headingFont); + const bodyFontFamily = getFontFamily(bodyFont); + const reportHeadingFontFamily = getFontFamily(reportHeadingFont); + const reportBodyFontFamily = getFontFamily(reportBodyFont); + + // Apply to heading preview (all heading elements) + if (previewHeading) { + previewHeading.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`; + previewHeading.style.fontWeight = headingWeight; + } + const previewHeading2 = document.getElementById('font_preview_heading_2'); + const previewHeading3 = document.getElementById('font_preview_heading_3'); + if (previewHeading2) { + previewHeading2.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`; + previewHeading2.style.fontWeight = headingWeight; + } + if (previewHeading3) { + previewHeading3.style.fontFamily = `'${headingFontFamily}', 'Cairo', sans-serif`; + previewHeading3.style.fontWeight = Math.max(400, parseInt(headingWeight) - 100); + } + + // Apply to body preview + if (previewBody) { + previewBody.style.fontFamily = `'${bodyFontFamily}', 'Tajawal', sans-serif`; + previewBody.style.fontWeight = bodyWeight; + previewBody.style.fontSize = `${fontSize}px`; + } + + // Apply to invoice preview - uses REPORT fonts + if (previewInvoice) { + // Apply report body font to the invoice body text + previewInvoice.style.fontFamily = `'${reportBodyFontFamily}', 'Tajawal', sans-serif`; + previewInvoice.style.fontWeight = reportBodyWeight; + previewInvoice.style.fontSize = `${reportFontSize}px`; + + // Apply report heading font to invoice title + const invoiceTitle = previewInvoice.querySelector('.invoice_title'); + if (invoiceTitle) { + invoiceTitle.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`; + invoiceTitle.style.fontWeight = reportHeadingWeight; + } + + // Apply to table headers (th elements) + const tableHeaders = previewInvoice.querySelectorAll('th'); + tableHeaders.forEach(th => { + th.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`; + th.style.fontWeight = Math.max(400, parseInt(reportHeadingWeight) - 100); + }); + + // Apply to table body cells (td elements) + const tableCells = previewInvoice.querySelectorAll('td'); + tableCells.forEach(td => { + td.style.fontFamily = `'${reportBodyFontFamily}', 'Tajawal', sans-serif`; + td.style.fontWeight = reportBodyWeight; + }); + + // Apply to footer (total row) + const footerCells = previewInvoice.querySelectorAll('tfoot td'); + footerCells.forEach(td => { + td.style.fontFamily = `'${reportHeadingFontFamily}', 'Cairo', sans-serif`; + td.style.fontWeight = reportHeadingWeight; + }); + } + + // Update badge displays - Backend fonts + if (headingNameBadge) { + headingNameBadge.textContent = headingFontFamily; + } + if (bodyNameBadge) { + bodyNameBadge.textContent = bodyFontFamily; + } + + // Update badge displays - Report fonts + if (reportHeadingNameBadge) { + reportHeadingNameBadge.textContent = reportHeadingFontFamily; + } + if (reportBodyNameBadge) { + reportBodyNameBadge.textContent = reportBodyFontFamily; + } +} + +/** + * Initialize font preview with event listeners + */ +function initFontPreview() { + const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]'); + if (!settingsBlock) return; + + // Skip if already initialized + if (settingsBlock.dataset.fontPreviewInit === 'true') return; + settingsBlock.dataset.fontPreviewInit = 'true'; + + // Use event delegation - listen for ALL changes within the block + settingsBlock.addEventListener('change', (event) => { + const target = event.target; + if (target.tagName === 'SELECT' || target.tagName === 'INPUT') { + // Small delay to ensure Odoo has processed the change + requestAnimationFrame(() => { + updateFontPreview(); + }); + } + }, true); + + // Also listen for input events (for immediate feedback) + settingsBlock.addEventListener('input', (event) => { + const target = event.target; + if (target.tagName === 'SELECT') { + requestAnimationFrame(() => { + updateFontPreview(); + }); + } + }, true); + + // MutationObserver to handle Odoo re-rendering fields + const observer = new MutationObserver(() => { + requestAnimationFrame(() => { + updateFontPreview(); + }); + }); + + observer.observe(settingsBlock, { + childList: true, + subtree: true, + attributes: true, + attributeFilter: ['value', 'checked', 'selected'] + }); + + // Initial update after a short delay to ensure fields are rendered + setTimeout(updateFontPreview, 500); +} + +/** + * Watch for the settings page to appear + */ +function watchForSettingsPage() { + // Try to initialize immediately + initFontPreview(); + + // Watch for DOM changes + const bodyObserver = new MutationObserver(() => { + const settingsBlock = document.querySelector('.app_settings_block[data-key="havari_arabic_fonts"]'); + if (settingsBlock && settingsBlock.dataset.fontPreviewInit !== 'true') { + setTimeout(initFontPreview, 300); + } + }); + + if (document.body) { + bodyObserver.observe(document.body, { + childList: true, + subtree: true + }); + } +} + +// Start watching when DOM is ready +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', watchForSettingsPage); +} else { + setTimeout(watchForSettingsPage, 100); +} + +// Also reinitialize on navigation clicks +document.addEventListener('click', () => { + setTimeout(initFontPreview, 500); +}, true); + +// Export for debugging +export { updateFontPreview, initFontPreview, FONT_MAP, getFontFamily }; diff --git a/addons/havari_arabic_fonts/static/src/js/font_settings.js b/addons/havari_arabic_fonts/static/src/js/font_settings.js new file mode 100644 index 0000000..c252cd8 --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/js/font_settings.js @@ -0,0 +1,115 @@ +/** @odoo-module **/ + +import { registry } from "@web/core/registry"; +import { useService } from "@web/core/utils/hooks"; +import { Component, onWillStart } from "@odoo/owl"; + +/** + * Font Settings Manager + * يقوم بتحميل وتطبيق إعدادات الخطوط + */ +export class FontSettingsManager { + constructor(env, rpc) { + this.env = env; + this.rpc = rpc; + } + + async loadSettings() { + try { + const settings = await this.rpc("/web/dataset/call_kw/ir.config_parameter/get_param", { + model: "ir.config_parameter", + method: "get_param", + args: [], + kwargs: {}, + }); + return settings; + } catch (error) { + console.warn("FontFourthArabic: Could not load settings", error); + return null; + } + } + + applyPreset(preset) { + const root = document.documentElement; + + switch (preset) { + case 'compact': + root.style.setProperty('--ff-size-base', '12px'); + document.body.classList.add('ff-preset-compact'); + document.body.classList.remove('ff-preset-balanced', 'ff-preset-comfort'); + break; + case 'comfort': + root.style.setProperty('--ff-size-base', '14px'); + document.body.classList.add('ff-preset-comfort'); + document.body.classList.remove('ff-preset-balanced', 'ff-preset-compact'); + break; + case 'balanced': + default: + root.style.setProperty('--ff-size-base', '13px'); + document.body.classList.add('ff-preset-balanced'); + document.body.classList.remove('ff-preset-compact', 'ff-preset-comfort'); + break; + } + } + + applyFont(type, fontName) { + const root = document.documentElement; + const fontFamily = this.getFontFamily(fontName); + + if (type === 'heading') { + root.style.setProperty('--ff-heading', fontFamily); + } else if (type === 'body') { + root.style.setProperty('--ff-body', fontFamily); + } + } + + applyFontWeight(type, weight) { + const root = document.documentElement; + + if (type === 'heading') { + root.style.setProperty('--ff-weight-bold', weight); + } else if (type === 'body') { + root.style.setProperty('--ff-weight-regular', weight); + } + } + + applyFontSize(size) { + const root = document.documentElement; + root.style.setProperty('--ff-size-base', size + 'px'); + } + + getFontFamily(fontName) { + const fonts = { + 'dubai': "'Dubai', 'Cairo', sans-serif", + 'cairo': "'Cairo', 'Tajawal', sans-serif", + 'tajawal': "'Tajawal', 'Cairo', sans-serif", + 'aljazeera': "'Al Jazeera', 'Cairo', sans-serif", + 'almarai': "'Almarai', 'Tajawal', sans-serif", + 'amiri': "'Amiri', serif", + }; + return fonts[fontName] || fonts['cairo']; + } +} + +// تسجيل الخدمة +export const fontSettingsService = { + dependencies: ["rpc"], + + start(env, { rpc }) { + return new FontSettingsManager(env, rpc); + }, +}; + +registry.category("services").add("font_settings", fontSettingsService); + +// تطبيق الإعدادات عند تحميل الصفحة +document.addEventListener('DOMContentLoaded', function() { + // تطبيق الخطوط فوراً بالإعدادات الافتراضية + const root = document.documentElement; + root.style.setProperty('--ff-heading', "'Cairo', 'Tajawal', sans-serif"); + root.style.setProperty('--ff-body', "'Tajawal', 'Cairo', sans-serif"); + root.style.setProperty('--ff-size-base', '13px'); + + // إضافة class للنمط الافتراضي + document.body.classList.add('ff-preset-balanced'); +}); diff --git a/addons/havari_arabic_fonts/static/src/scss/backend.scss b/addons/havari_arabic_fonts/static/src/scss/backend.scss new file mode 100644 index 0000000..f2eb570 --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/scss/backend.scss @@ -0,0 +1,298 @@ +/** + * Font Fourth Arabic - Backend Styles + * تنسيقات واجهة الباك إند + */ + +// ===================================== +// حماية خطوط الأيقونات - مهم جداً +// Preserve icon font families +// ===================================== + +// Odoo UI icons (odoo_ui_icons with underscores!) +.oi { + font-family: 'odoo_ui_icons' !important; +} + +// FontAwesome icons +.fa, .fas, .far, .fab, .fal, .fad { + font-family: 'FontAwesome' !important; +} + +// Bootstrap icons +.bi { + font-family: 'bootstrap-icons' !important; +} + +// ===================================== +// التنسيقات الأساسية +// ===================================== + +// الجسم العام - بدون !important لتجنب التعارض مع الأيقونات +body { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + font-weight: var(--ff-weight-regular); + line-height: var(--ff-line-height-normal); +} + +// ===================================== +// عناوين الصفحات +// ===================================== + +.o_control_panel { + .breadcrumb-item { + font-family: var(--ff-heading); + font-size: var(--ff-size-xl); + font-weight: var(--ff-weight-bold); + } + + .o_cp_searchview { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + } +} + +// ===================================== +// القائمة الجانبية +// ===================================== + +.o_main_navbar { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + font-weight: var(--ff-weight-medium); + + .o_menu_brand { + font-family: var(--ff-heading); + font-weight: var(--ff-weight-bold); + } +} + +.o_web_client .o_action_manager .o_kanban_view .o_kanban_record, +.o_web_client .o_action_manager .o_list_view, +.o_web_client .o_action_manager .o_form_view { + font-family: var(--ff-body); +} + +// ===================================== +// النماذج (Forms) +// ===================================== + +.o_form_view { + // عناوين الحقول + .o_form_label, + label.o_form_label { + font-family: var(--ff-body); + font-size: var(--ff-size-sm); + font-weight: var(--ff-weight-medium); + } + + // قيم الحقول + .o_field_widget { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + font-weight: var(--ff-weight-regular); + + input, textarea, select { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + } + } + + // عناوين الأقسام + .o_inner_group .o_group_name, + .o_group .o_group_name { + font-family: var(--ff-heading); + font-size: var(--ff-size-lg); + font-weight: var(--ff-weight-semibold); + } + + // التبويبات + .o_notebook { + .nav-link { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + font-weight: var(--ff-weight-medium); + } + + .nav-link.active { + font-weight: var(--ff-weight-semibold); + } + } +} + +// ===================================== +// الجداول (Lists) +// ===================================== + +.o_list_view { + // رأس الجدول + thead th { + font-family: var(--ff-body); + font-size: var(--ff-size-sm); + font-weight: var(--ff-weight-semibold); + } + + // محتوى الجدول + tbody td { + font-family: var(--ff-body); + font-size: var(--ff-size-sm); + font-weight: var(--ff-weight-regular); + } + + // الإجمالي + tfoot td { + font-family: var(--ff-body); + font-weight: var(--ff-weight-bold); + } +} + +// ===================================== +// البطاقات (Kanban) +// ===================================== + +.o_kanban_view { + .o_kanban_record { + font-family: var(--ff-body); + + .o_kanban_record_title { + font-family: var(--ff-heading); + font-weight: var(--ff-weight-semibold); + } + + .o_kanban_record_subtitle { + font-size: var(--ff-size-sm); + } + } + + .o_kanban_header { + font-family: var(--ff-heading); + font-weight: var(--ff-weight-bold); + } +} + +// ===================================== +// الأزرار +// ===================================== + +.btn { + font-family: var(--ff-body); + font-weight: var(--ff-weight-semibold); +} + +.o_form_view .o_form_statusbar .o_statusbar_buttons .btn { + font-family: var(--ff-body); + font-weight: var(--ff-weight-medium); +} + +// ===================================== +// الحوارات (Dialogs) +// ===================================== + +.modal { + .modal-title { + font-family: var(--ff-heading); + font-weight: var(--ff-weight-bold); + } + + .modal-body { + font-family: var(--ff-body); + } +} + +// ===================================== +// الشريط الجانبي للتطبيقات +// ===================================== + +.o_apps { + .o_app { + font-family: var(--ff-body); + font-weight: var(--ff-weight-medium); + } + + .o_app .o_caption { + font-size: var(--ff-size-sm); + } +} + +// ===================================== +// شات/مناقشات +// ===================================== + +.o_Chatter { + font-family: var(--ff-body); + + .o_Message_prettyBody { + font-size: var(--ff-size-md); + } +} + +// ===================================== +// القوائم المنسدلة +// ===================================== + +.dropdown-menu { + font-family: var(--ff-body); + font-size: var(--ff-size-md); + + .dropdown-item { + font-weight: var(--ff-weight-regular); + } +} + +// ===================================== +// شجرة الإعدادات +// ===================================== + +.o_base_settings { + .o_setting_container { + font-family: var(--ff-body); + } + + .o_settings_container .o_setting_left_pane { + font-family: var(--ff-heading); + } + + .o_form_label { + font-weight: var(--ff-weight-medium); + } +} + +// ===================================== +// البحث والفلاتر +// ===================================== + +.o_searchview { + font-family: var(--ff-body); + + .o_searchview_facet { + font-size: var(--ff-size-sm); + } +} + +// ===================================== +// الرسائل والتنبيهات +// ===================================== + +.o_notification { + font-family: var(--ff-body); + + .o_notification_title { + font-family: var(--ff-heading); + font-weight: var(--ff-weight-semibold); + } +} + +// ===================================== +// دعم RTL للعربية +// ===================================== + +html[dir="rtl"], +.o_rtl { + body { + text-align: right; + } + + .o_form_view .o_form_label { + text-align: right; + } +} diff --git a/addons/havari_arabic_fonts/static/src/scss/fonts.scss b/addons/havari_arabic_fonts/static/src/scss/fonts.scss new file mode 100644 index 0000000..20e55c0 --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/scss/fonts.scss @@ -0,0 +1,434 @@ +/** + * Font Fourth Arabic - All Font Faces + * تعريف جميع الخطوط العربية + * الخطوط تُحمّل من CDN أولاً مع fallback للملفات المحلية + * 6 خطوط: Dubai, Al Jazeera, Cairo, Tajawal, Amiri, Almarai + */ + +// ===================================== +// خط دبي (Dubai Font) - من CDN +// ===================================== +@font-face { + font-family: 'Dubai'; + src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Light.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Dubai'; + src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Regular.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Dubai'; + src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Medium.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Dubai'; + src: url('https://fonts.cdnfonts.com/s/16118/Dubai-Bold.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/dubai/Dubai-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط الجزيرة (Al Jazeera Font) - محلي فقط +// ===================================== +@font-face { + font-family: 'Al Jazeera'; + src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Al Jazeera'; + src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Al Jazeera'; + src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Al Jazeera'; + src: url('/havari_arabic_fonts/static/fonts/aljazeera/AlJazeera-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط القاهرة (Cairo Font) - من CDN +// ===================================== +@font-face { + font-family: 'Cairo'; + src: url('https://fonts.cdnfonts.com/s/8893/Cairo.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Cairo'; + src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Cairo'; + src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Cairo'; + src: url('/havari_arabic_fonts/static/fonts/cairo/Cairo-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط تجوال (Tajawal Font) - من CDN +// ===================================== +@font-face { + font-family: 'Tajawal'; + src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Light.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Tajawal'; + src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Regular.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Tajawal'; + src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Medium.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Tajawal'; + src: url('https://fonts.cdnfonts.com/s/15774/Tajawal-Bold.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/tajawal/Tajawal-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط أميري (Amiri Font - نسخي تقليدي) - من CDN +// ===================================== +@font-face { + font-family: 'Amiri'; + src: url('https://fonts.cdnfonts.com/s/14885/Amiri-Regular.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Amiri'; + src: url('https://fonts.cdnfonts.com/s/14885/Amiri-Bold.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/amiri/Amiri-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط المراعي (Almarai Font - سعودي احترافي) - من CDN +// ===================================== +@font-face { + font-family: 'Almarai'; + src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Light.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Almarai'; + src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Regular.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Regular.ttf') format('truetype'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Almarai'; + src: url('https://fonts.cdnfonts.com/s/29851/Almarai-Bold.woff') format('woff'), + url('/havari_arabic_fonts/static/fonts/almarai/Almarai-Bold.ttf') format('truetype'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط نوتو سانس عربي (Noto Sans Arabic) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Noto Sans Arabic'; + src: url('https://fonts.gstatic.com/s/notosansarabic/v33/nwpCtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlg43tY3IxQ.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Noto Sans Arabic'; + src: url('https://fonts.gstatic.com/s/notosansarabic/v33/nwpCtLGrOAZMl5nJ_wfgRg3DrWFZWsnVBJ_sS6tlqHHFlg43tY3IxQ.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط ريدكس برو (Readex Pro) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Readex Pro'; + src: url('https://fonts.gstatic.com/s/readexpro/v27/SLXYc1bJ7HE5YDoGPuzj_dh8uc7wUy8ZQQyX2Lwybkv8hA.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Readex Pro'; + src: url('https://fonts.gstatic.com/s/readexpro/v27/SLXYc1bJ7HE5YDoGPuzj_dh8uc7wUy8ZQQyX2Lwybkv8hA.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط مادا (Mada) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Mada'; + src: url('https://fonts.gstatic.com/s/mada/v21/7Auwp_0qnzeSTTDMKirW.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Mada'; + src: url('https://fonts.gstatic.com/s/mada/v21/7Auwp_0qnzeSTTDMKirW.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط IBM Plex Sans Arabic - من Google Fonts +// ===================================== +@font-face { + font-family: 'IBM Plex Sans Arabic'; + src: url('https://fonts.gstatic.com/s/ibmplexsansarabic/v14/Qw3CZRtWPQCuHme67tEYUIx3Kh0PHR9N6bs_1vKbfA.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'IBM Plex Sans Arabic'; + src: url('https://fonts.gstatic.com/s/ibmplexsansarabic/v14/Qw3NZRtWPQCuHme67tEYUIx3Kh0PHR9N6YOG-dCWVsNJKg.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط شانغا (Changa) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Changa'; + src: url('https://fonts.gstatic.com/s/changa/v29/2-cm9JNi2YuVOUcUZJa5Wu4.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Changa'; + src: url('https://fonts.gstatic.com/s/changa/v29/2-cm9JNi2YuVOUcUZJa5Wu4.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط نوتو نسخ عربي (Noto Naskh Arabic) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Noto Naskh Arabic'; + src: url('https://fonts.gstatic.com/s/notonaskharabic/v43/RrQKbpV-9Dd1b1OAGA6M9PkyDuVBeO2EF1qELw.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Noto Naskh Arabic'; + src: url('https://fonts.gstatic.com/s/notonaskharabic/v43/RrQKbpV-9Dd1b1OAGA6M9PkyDuVBeO2EF1qELw.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط شهرزاد (Scheherazade New) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Scheherazade'; + src: url('https://fonts.gstatic.com/s/scheherazadenew/v20/4UaZrFhTvxVnHDvUkUiHg8jprP4DCwZsPF4o.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Scheherazade'; + src: url('https://fonts.gstatic.com/s/scheherazadenew/v20/4UaerFhTvxVnHDvUkUiHg8jprP4DM79DHlMC_oKm.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط مركزي (Markazi Text) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Markazi Text'; + src: url('https://fonts.gstatic.com/s/markazitext/v28/syk0-ydym6AtQaiEtX7yhqblo3-SJ1A.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Markazi Text'; + src: url('https://fonts.gstatic.com/s/markazitext/v28/syk0-ydym6AtQaiEtX7yhqblo3-SJ1A.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط نوتو كوفي عربي (Noto Kufi Arabic) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Noto Kufi Arabic'; + src: url('https://fonts.gstatic.com/s/notokufiarabic/v27/CSRk4ydQnPyaDxEXLFF6LZVLKrodnOEPEWKo.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Noto Kufi Arabic'; + src: url('https://fonts.gstatic.com/s/notokufiarabic/v27/CSRk4ydQnPyaDxEXLFF6LZVLKrodnOEPEWKo.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط ريم كوفي (Reem Kufi) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Reem Kufi'; + src: url('https://fonts.gstatic.com/s/reemkufi/v28/2sDcZGJLip7W2J7v7wQDam--C70.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Reem Kufi'; + src: url('https://fonts.gstatic.com/s/reemkufi/v28/2sDcZGJLip7W2J7v7wQDam--C70.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط عارف رقعة (Aref Ruqaa) - من Google Fonts +// ===================================== +@font-face { + font-family: 'Aref Ruqaa'; + src: url('https://fonts.gstatic.com/s/arefruqaa/v26/WwkbxPW1E165rajQKDulEIUiUto4.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'Aref Ruqaa'; + src: url('https://fonts.gstatic.com/s/arefruqaa/v26/WwkYxPW1E165rajQKDulKDwNcNcS3t_6.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +// ===================================== +// خط المسيري (El Messiri) - من Google Fonts +// ===================================== +@font-face { + font-family: 'El Messiri'; + src: url('https://fonts.gstatic.com/s/elmessiri/v25/K2F0fZBRmr9vQ1pHEey6Ao-KBSLy.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: 'El Messiri'; + src: url('https://fonts.gstatic.com/s/elmessiri/v25/K2F0fZBRmr9vQ1pHEey6Ao-KBSLy.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} diff --git a/addons/havari_arabic_fonts/static/src/scss/presets/balanced.scss b/addons/havari_arabic_fonts/static/src/scss/presets/balanced.scss new file mode 100644 index 0000000..3b79e1c --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/scss/presets/balanced.scss @@ -0,0 +1,10 @@ +/** + * Font Fourth Arabic - Balanced Preset + * النمط المتوازن (الافتراضي) + */ + +// يتم تطبيقه بشكل افتراضي +body { + --ff-size-base: 13px; + --ff-line-height-normal: 1.5; +} diff --git a/addons/havari_arabic_fonts/static/src/scss/report.scss b/addons/havari_arabic_fonts/static/src/scss/report.scss new file mode 100644 index 0000000..e8f487b --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/scss/report.scss @@ -0,0 +1,200 @@ +/** + * Font Fourth Arabic - Report Styles + * تنسيقات التقارير والطباعة + */ + +// ===================================== +// حماية خطوط الأيقونات +// ===================================== + +.oi { + font-family: 'odoo_ui_icons' !important; +} + +.fa, .fas, .far, .fab, .fal, .fad { + font-family: 'FontAwesome' !important; +} + +// ===================================== +// الإعدادات الأساسية للتقارير +// ===================================== + +.o_report_layout, +.report-layout { + font-family: 'Dubai', 'Al Jazeera', sans-serif; +} + +// ===================================== +// رأس التقرير (Header) +// ===================================== + +.header { + font-family: 'Dubai', sans-serif; + + .company-name, + h1, h2 { + font-family: 'Al Jazeera', sans-serif; + font-weight: 700; + } +} + +// ===================================== +// عنوان التقرير +// ===================================== + +.page { + font-family: 'Dubai', sans-serif; + font-size: 10px; + line-height: 1.4; + + h1 { + font-family: 'Al Jazeera', sans-serif; + font-size: 16px; + font-weight: 700; + } + + h2 { + font-family: 'Al Jazeera', sans-serif; + font-size: 14px; + font-weight: 700; + } + + h3 { + font-family: 'Dubai', sans-serif; + font-size: 12px; + font-weight: 600; + } + + h4, h5, h6 { + font-family: 'Dubai', sans-serif; + font-weight: 600; + } +} + +// ===================================== +// جداول التقرير +// ===================================== + +.page table { + font-family: 'Dubai', sans-serif; + font-size: 9px; + + thead { + th { + font-weight: 600; + font-size: 9px; + } + } + + tbody { + td { + font-weight: 400; + } + } + + tfoot { + td { + font-weight: 700; + font-size: 10px; + } + } +} + +// ===================================== +// الفوتر (Footer) +// ===================================== + +.footer { + font-family: 'Dubai', sans-serif; + font-size: 8px; + font-weight: 300; +} + +// ===================================== +// معلومات الشركة +// ===================================== + +.company_address { + font-family: 'Dubai', sans-serif; + font-size: 9px; +} + +// ===================================== +// إجماليات الفواتير +// ===================================== + +#total { + font-family: 'Dubai', sans-serif; + + td:last-child { + font-weight: 700; + } + + tr.o_total { + td { + font-size: 11px; + font-weight: 700; + } + } +} + +// ===================================== +// معلومات إضافية +// ===================================== + +.o_report_layout_boxed, +.o_report_layout_bold, +.o_report_layout_striped { + font-family: 'Dubai', sans-serif; +} + +// ===================================== +// تنسيقات RTL للتقارير +// ===================================== + +.o_rtl, +[dir="rtl"] { + .page { + text-align: right; + direction: rtl; + } + + table { + direction: rtl; + + th, td { + text-align: right; + } + + th:last-child, + td:last-child { + text-align: left; + } + } +} + +// ===================================== +// طباعة +// ===================================== + +@media print { + body { + font-family: 'Dubai', sans-serif; + } + + .page { + font-size: 10px; + } + + h1, h2 { + font-family: 'Al Jazeera', sans-serif; + } + + // حماية خطوط الأيقونات في الطباعة + .oi { + font-family: 'odoo_ui_icons' !important; + } + .fa, .fas, .far, .fab { + font-family: 'FontAwesome' !important; + } +} diff --git a/addons/havari_arabic_fonts/static/src/scss/variables.scss b/addons/havari_arabic_fonts/static/src/scss/variables.scss new file mode 100644 index 0000000..711e4b8 --- /dev/null +++ b/addons/havari_arabic_fonts/static/src/scss/variables.scss @@ -0,0 +1,65 @@ +/** + * Font Fourth Arabic - CSS Variables + * متغيرات CSS للتحكم في الخطوط + */ + +:root { + // ===================================== + // تعريف الخطوط + // ===================================== + --ff-heading: 'Al Jazeera', 'Dubai', 'Segoe UI', Tahoma, sans-serif; + --ff-body: 'Dubai', 'Al Jazeera', 'Segoe UI', Tahoma, sans-serif; + + // ===================================== + // أحجام الخطوط + // ===================================== + --ff-size-base: 13px; + --ff-size-xs: calc(var(--ff-size-base) - 3px); // 10px + --ff-size-sm: calc(var(--ff-size-base) - 1px); // 12px + --ff-size-md: var(--ff-size-base); // 13px + --ff-size-lg: calc(var(--ff-size-base) + 2px); // 15px + --ff-size-xl: calc(var(--ff-size-base) + 5px); // 18px + --ff-size-xxl: calc(var(--ff-size-base) + 8px); // 21px + + // ===================================== + // أوزان الخطوط + // ===================================== + --ff-weight-light: 300; + --ff-weight-regular: 400; + --ff-weight-medium: 500; + --ff-weight-semibold: 600; + --ff-weight-bold: 700; + + // ===================================== + // ارتفاع الأسطر + // ===================================== + --ff-line-height-tight: 1.2; + --ff-line-height-normal: 1.5; + --ff-line-height-relaxed: 1.75; + + // ===================================== + // المسافات بين الحروف + // ===================================== + --ff-letter-spacing-tight: -0.02em; + --ff-letter-spacing-normal: 0; + --ff-letter-spacing-wide: 0.02em; +} + +// ===================================== +// أنماط جاهزة (Presets) +// ===================================== + +// النمط المدمج +.ff-preset-compact { + --ff-size-base: 12px; +} + +// النمط المتوازن (الافتراضي) +.ff-preset-balanced { + --ff-size-base: 13px; +} + +// النمط المريح +.ff-preset-comfort { + --ff-size-base: 14px; +} diff --git a/addons/havari_arabic_fonts/views/assets.xml b/addons/havari_arabic_fonts/views/assets.xml new file mode 100644 index 0000000..b887f04 --- /dev/null +++ b/addons/havari_arabic_fonts/views/assets.xml @@ -0,0 +1,7 @@ + + + + diff --git a/addons/havari_arabic_fonts/views/base_document_layout_views.xml b/addons/havari_arabic_fonts/views/base_document_layout_views.xml new file mode 100644 index 0000000..67fd348 --- /dev/null +++ b/addons/havari_arabic_fonts/views/base_document_layout_views.xml @@ -0,0 +1,8 @@ + + + + diff --git a/addons/havari_arabic_fonts/views/res_config_settings_views.xml b/addons/havari_arabic_fonts/views/res_config_settings_views.xml new file mode 100644 index 0000000..e2b719c --- /dev/null +++ b/addons/havari_arabic_fonts/views/res_config_settings_views.xml @@ -0,0 +1,245 @@ + + + + res.config.settings.view.form.inherit.havari_arabic_fonts + res.config.settings + 50 + + + +
+

الخطوط العربية - إعدادات الواجهة

+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +

خطوط العناوين

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +

خطوط النصوص

+
+
+
+
+
+
+ +
+
+
+
+
+
+ +

خطوط التقارير والطباعة

+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+ + +

+ + معاينة الخطوط +

+
+
+
+ + +
+
+ + + خط العناوين: + + Cairo +
+

+ بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ +

+

+ الحمد لله رب العالمين +

+

+ إدارة الخطوط العربية في أودوو - Odoo Arabic Fonts +

+
+ + +
+
+ + + خط النصوص: + + Tajawal +
+

+ هذا نص تجريبي لمعاينة الخط المختار. يمكنك تغيير الخط من القائمة أعلاه ومشاهدة التغيير فوراً. +
+ الأرقام العربية: ٠١٢٣٤٥٦٧٨٩ | الأرقام الإنجليزية: 0123456789 +

+
+ + +
+
+ + + معاينة خطوط التقارير (فاتورة): + +
+ Cairo + Tajawal +
+
+
+
+ فاتورة مبيعات + رقم: INV/2024/0001 +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
المنتجالكميةالسعر
خدمة استضافة سنوية11,200.00 ر.س
دعم فني شهري12600.00 ر.س
الإجمالي1,800.00 ر.س
+
+
+ +
+
+
+ +
+ + + +