PageSourceSearch

https://cncpromax.com/wp-content/plugins/Mony_Manager_Pro/assets/mony-manager-plus.js?ver=1790260830

js cncpromax.com collected 2026-09-24 14:42:28 UTC 9,346 bytes, 194 lines download raw bytes

1jQuery(document).ready(function($) {
2    console.log("✅ MMP: JS Logic Loaded (Smooth UX).");
3
4    // دالة مساعدة لتحديث الرصيد في كل مكان بالصفحة
5    function updateBalanceDisplay(newBalance) {
6        $('.stm-balance-value').text(newBalance);
7        $('.mmp-simple-balance-value').text(newBalance);
8        // وميض بسيط باللون الأخضر لتنبيه المستخدم
9        $('.stm-balance-value').css('color', '#28a745').animate({opacity: 0.5}, 200).animate({opacity: 1}, 200, function(){
10            $(this).css('color', ''); // استعادة اللون الأصلي
11        });
12    }
13
14    // تفعيل الخلفية الخاصة
15    if ($('.stm-wallet-dashboard-wrapper').length > 0) $('body').addClass('stm-is-wallet-page');
16    if ($('.stm-pricing-container').length > 0) $('body').addClass('stm-is-pricing-page');
17
18    // ============================================
19    // 1. أزرار اختيار المبلغ (Presets)
20    // ============================================
21    $(document).on('click', '.stm-preset-btn', function(e) {
22        e.preventDefault();
23        var amount = $(this).data('value');
24        $('#stm_points_input').val(amount).trigger('change');
25        $('.stm-preset-btn').removeClass('active');
26        $(this).addClass('active');
27    });
28
29    $(document).on('input', '#stm_points_input', function() {
30        var val = parseInt($(this).val());
31        if(val > 10000) {
32            alert('⚠️ الحد الأقصى هو 10,000 نقطة');
33            $(this).val(10000);
34        }
35        $('.stm-preset-btn').removeClass('active');
36    });
37
38    // ============================================
39    // 2. نظام التبويبات (Dashboard Tabs)
40    // ============================================
41    $(document).on('click', '.stm-nav-item', function(e) {
42        e.preventDefault();
43        var targetId = $(this).data('target');
44        $('.stm-nav-item').removeClass('active');
45        $(this).addClass('active');
46        $('.stm-tab-content').removeClass('active');
47        $('#' + targetId).addClass('active');
48    });
49
50    // 3. منطق الأكورديون
51    $(document).on('click', '#balanceToggleTrigger', function(e) {
52        e.preventDefault();
53        $(this).toggleClass('open');
54        $('.cncpro-balance-details-collapsible').toggleClass('open');
55    });
56
57    // ============================================
58    // 4. زر إرسال كود التحقق (OTP)
59    // ============================================
60    $(document).on('click', '#stm_send_otp_btn', function(e) {
61        e.preventDefault();
62        var $btn = $(this);
63        var $msg = $('#stm_otp_message');
64        var originalText = $btn.text();
65
66        $btn.prop('disabled', true).text('جاري الإرسال...');
67        if($msg.length) $msg.html('').css('color', '#aaa');
68
69        $.ajax({
70            url: stm_ajax_obj.ajax_url,
71            type: 'POST',
72            data: { action: 'stm_send_verification_otp', security: stm_ajax_obj.nonce },
73            success: function(r) {
74                if(r.success) {
75                    if($msg.length) $msg.html(r.data).css('color', '#28a745'); else alert(r.data);
76                    $btn.text('تم الإرسال ✓');
77                    setTimeout(function() { $btn.prop('disabled', false).text(originalText); }, 60000);
78                } else {
79                    if($msg.length) $msg.html(r.data).css('color', '#dc3545'); else alert(r.data);
80                    $btn.prop('disabled', false).text(originalText);
81                }
82            },
83            error: function() { alert('خطأ اتصال.'); $btn.prop('disabled', false).text(originalText); }
84        });
85    });
86
87    // زر التعليمات
88    $(document).on('click', '#stm_send_instructions_btn', function(e) {
89        e.preventDefault();
90        var $btn = $(this), $msg = $('#stm_instructions_message'), originalText = $btn.html();
91        $btn.prop('disabled', true).html('جاري الإرسال...'); $msg.html('');
92        $.ajax({
93            url: stm_ajax_obj.ajax_url, type: 'POST',
94            data: { action: 'stm_send_recharge_instructions', security: stm_ajax_obj.nonce },
95            success: function(r) {
96                if(r.success) { $msg.html(r.data).css('color', '#28a745'); $btn.html('تم الإرسال ✓'); }
97                else { $msg.html(r.data).css('color', '#dc3545'); $btn.prop('disabled', false).html(originalText); }
98            },
99            error: function() { $msg.html('خطأ اتصال.').css('color', '#dc3545'); $btn.prop('disabled', false).html(originalText); }
100        });
101    });
102
103    // ============================================
104    // 5. تحصيل كود الرصيد (Redeem Code) - [No Scroll Fix]
105    // ============================================
106    $(document).on('submit', '#stm_redeem_form_ajax', function(e) {
107        e.preventDefault();
108        var $form = $(this), $btn = $('#stm_redeem_btn'), $msg = $('#stm-redeem-message'), code = $('#stm_code_input').val(), originalBtnText = $btn.text();
109        $msg.html('').removeClass('redeem-message success error');
110        
111        if(code.length < 3) { $msg.html('الرجاء إدخال كود صحيح.').addClass('redeem-message error'); return; }
112
113        $btn.prop('disabled', true).text(stm_ajax_obj.loading);
114
115        $.ajax({
116            url: stm_ajax_obj.ajax_url, type: 'POST',
117            data: { action: 'stm_process_redeem_code', security: stm_ajax_obj.nonce, code: code },
118            success: function(r) {
119                if(r.success) {
120                    $msg.html(r.data.message).addClass('redeem-message success');
121                    $form[0].reset();
122                    updateBalanceDisplay(r.data.new_balance); // تحديث الرصيد بدون ريلود
123                } else { 
124                    $msg.html(r.data).addClass('redeem-message error'); 
125                }
126            },
127            error: function() { $msg.html('خطأ في الاتصال.').addClass('redeem-message error'); },
128            complete: function() { $btn.prop('disabled', false).text(originalBtnText); }
129        });
130    });
131
132    // ============================================
133    // 6. الاشتراك في الباقة (Subscribe) - [No Scroll Fix]
134    // ============================================
135    $(document).on('click', '.stm-ajax-sub-btn', function(e) {
136        e.preventDefault();
137        if(!confirm('هل أنت متأكد من العملية؟')) return;
138
139        var $btn = $(this);
140        var planId = $btn.data('plan-id');
141        var originalText = $btn.text();
142        var $mainMsg = $('#stm-subscription-message');
143        var $card = $btn.closest('.stm-pricing-card');
144
145        $btn.prop('disabled', true).text(stm_ajax_obj.loading);
146        if($mainMsg.length) $mainMsg.html('');
147
148        $.ajax({
149            url: stm_ajax_obj.ajax_url, type: 'POST',
150            data: { action: 'stm_process_subscribe_plan', security: stm_ajax_obj.nonce, plan_id: planId },
151            success: function(r) {
152                if(r.success) {
153                    // 1. عرض رسالة النجاح في الأعلى
154                    if($mainMsg.length) $mainMsg.html('<div class="stm-alert success">' + r.data.message + '</div>');
155                    else alert(r.data.message);
156
157                    // 2. تحديث الرصيد فوراً
158                    updateBalanceDisplay(r.data.new_balance);
159                    
160                    // 3. تحديث واجهة الأزرار (خدعة بصرية بدلاً من الريلود)
161                    // إزالة "مشترك" من البطاقات الأخرى
162                    $('.stm-active-badge').remove();
163                    $('.stm-sub-btn.disabled').removeClass('disabled').prop('disabled', false).text('اشتراك / ترقية');
164                    
165                    // تمييز البطاقة الحالية
166                    $btn.addClass('disabled').prop('disabled', true).text('مشترك حالياً');
167                    $card.prepend('<div class="stm-active-badge">مشترك</div>');
168
169                    // 4. تمرير ناعم للأعلى (Scroll Up) لرؤية الرسالة
170                    $('html, body').animate({
171                        scrollTop: $mainMsg.offset().top - 100
172                    }, 500);
173
174                } else {
175                    // فشل
176                    if($mainMsg.length) $mainMsg.html('<div class="stm-alert error">' + r.data + '</div>');
177                    else alert(r.data);
178                    $btn.prop('disabled', false).text(originalText);
179                    
180                    // تمرير ناعم للأعلى لرؤية الخطأ
181                    $('html, body').animate({
182                        scrollTop: $mainMsg.offset().top - 100
183                    }, 500);
184                }
185            },
186            error: function() { 
187                alert('خطأ في الاتصال.'); 
188                $btn.prop('disabled', false).text(originalText); 
189            }
190        });
191    });
192
193    $('.product').addClass('stm-hidden-cart');
194});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.