From 2f15cd53b52adacbc55b396345d35d2fe444c729 Mon Sep 17 00:00:00 2001 From: Mohamed Eltayar <152964073+maltayyar2@users.noreply.github.com> Date: Sat, 30 Aug 2025 15:06:19 +0300 Subject: [PATCH] =?UTF-8?q?=D8=AA=D8=AD=D8=B3=D9=8A=D9=86=D8=A7=D8=AA=20?= =?UTF-8?q?=D9=86=D9=87=D8=A7=D8=A6=D9=8A=D8=A9=20=D9=84=D9=84=D9=85=D9=88?= =?UTF-8?q?=D8=AF=D9=8A=D9=88=D9=84=20-=20=D8=AF=D8=B9=D9=85=20=D9=83?= =?UTF-8?q?=D8=A7=D9=85=D9=84=20=D9=84=D9=84=D8=B9=D8=B1=D8=A8=D9=8A=D8=A9?= =?UTF-8?q?=20=D9=88=D8=A5=D8=B5=D9=84=D8=A7=D8=AD=D8=A7=D8=AA=20=D8=A3?= =?UTF-8?q?=D8=AF=D8=A7=D8=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit التحسينات: 1. وضع مؤشر الكتابة في نهاية النص بعد الـ reload 2. ترجمة كاملة للواجهة العربية: - placeholder: البحث في جميع الأعمدة المرئية... - زر Clear: مسح - عداد السجلات: عدد السجلات: X 3. دعم RTL للغة العربية تلقائياً 4. إصلاح مشكلة الـ reload مع حركة الأسهم: - تجاهل مفاتيح التنقل (أسهم، Home، End، Page Up/Down) - تجاهل مفاتيح التعديل (Ctrl، Alt، Shift، Cmd) - تجاهل مفاتيح F1-F12 - البحث فقط عند تغيير المحتوى الفعلي --- .../static/src/js/list_search.js | 130 ++++++++++++++++-- 1 file changed, 116 insertions(+), 14 deletions(-) diff --git a/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js b/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js index 2678a0ffb..42db5fc16 100644 --- a/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js +++ b/odex25_base/fims_general_search_tree_view/static/src/js/list_search.js @@ -27,7 +27,8 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { filteredCount: 0, originalDomain: null, searchInProgress: false, - lastSearchPromise: null + lastSearchPromise: null, + lastSearchValue: '' // Track last search value }; this._searchMutex = new concurrency.Mutex(); }, @@ -59,6 +60,15 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { _handleCustomSearch: function(value) { var self = this; + // Check if value actually changed + if (value === self._customSearchState.lastSearchValue) { + console.log('Search value unchanged, skipping'); + return Promise.resolve(); + } + + // Update last search value + self._customSearchState.lastSearchValue = value; + // Cancel any pending search if (self._customSearchState.timer) { clearTimeout(self._customSearchState.timer); @@ -208,6 +218,7 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { this._customSearchState.value = ''; this._customSearchState.isFiltered = false; this._customSearchState.filteredCount = 0; + this._customSearchState.lastSearchValue = ''; // Get original domain var originalDomain = this._customSearchState.originalDomain || []; @@ -430,7 +441,11 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { */ _updateCustomSearchUI: function(count) { if (this.renderer && this.renderer.$) { - var message = _t('Found: ') + count + _t(' records'); + var isArabic = this._isArabicLanguage(); + var message = isArabic ? + 'عدد السجلات: ' + count : + _t('Found: ') + count + _t(' records'); + this.renderer.$('.oe_search_count') .text(message) .show(); @@ -443,13 +458,24 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { */ _showSearchError: function() { if (this.renderer && this.renderer.$) { + var isArabic = this._isArabicLanguage(); + var errorMsg = isArabic ? 'حدث خطأ في البحث' : _t('Search error occurred'); + this.renderer.$('.oe_search_count') - .text(_t('Search error occurred')) + .text(errorMsg) .addClass('text-danger') .show(); } }, + /** + * Check if system language is Arabic + */ + _isArabicLanguage: function() { + var lang = session.user_context.lang || ''; + return lang.startsWith('ar'); + }, + /** * Normalize Arabic text - ENHANCED VERSION */ @@ -498,6 +524,7 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { this._super.apply(this, arguments); this._searchTimer = null; this._customSearchReady = false; + this._lastInputValue = ''; // Track last input value }, /** @@ -528,13 +555,24 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { // Restore search input value if (state.value) { - this.$('.oe_search_input').val(state.value); + var $input = this.$('.oe_search_input'); + $input.val(state.value); + // Set cursor position to end of text + var length = state.value.length; + if ($input[0] && $input[0].setSelectionRange) { + $input[0].setSelectionRange(length, length); + } this.$('.oe_clear_search').show(); + this._lastInputValue = state.value; } // Restore count display if (state.isFiltered && state.filteredCount >= 0) { - var message = _t('Found: ') + state.filteredCount + _t(' records'); + var isArabic = this._isArabicLanguage(); + var message = isArabic ? + 'عدد السجلات: ' + state.filteredCount : + _t('Found: ') + state.filteredCount + _t(' records'); + this.$('.oe_search_count') .text(message) .removeClass('text-danger') @@ -543,6 +581,14 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { } }, + /** + * Check if system language is Arabic + */ + _isArabicLanguage: function() { + var lang = session.user_context.lang || ''; + return lang.startsWith('ar'); + }, + /** * Check if we should add search box */ @@ -570,18 +616,32 @@ odoo.define('fims_general_search_tree_view.list_search', function (require) { isFiltered = controller._customSearchState.isFiltered || false; } + var isArabic = this._isArabicLanguage(); + var dir = isArabic ? 'rtl' : 'ltr'; + + // Translations + var placeholder = isArabic ? 'البحث في جميع الأعمدة المرئية...' : _t('Search in all visible columns...'); + var clearText = isArabic ? 'مسح' : _t('Clear'); + var countText = ''; + if (isFiltered) { + countText = isArabic ? + 'عدد السجلات: ' + savedCount : + _t('Found: ') + savedCount + _t(' records'); + } + var html = - '