PageSourceSearch

https://phoenixfinancial.co.il/wp-content/plugins/trade_one_irm/assets/scripts.js?ver=1790249254

js phoenixfinancial.co.il collected 2026-10-05 23:17:13 UTC 26,021 bytes, 673 lines download raw bytes

1
2
3
4jQuery(document).on('click','.copy',function () {
5    var val = jQuery(this).text();
6    var id = jQuery(this).attr('id');
7    navigator.clipboard.writeText(val).then(function() {
8        jQuery('#'+id).notify(
9            "קוד הועתק",
10            {
11                position:"right",
12                autoHideDelay: 1000,
13                type: 'success',
14                showAnimation: 'slideDown',
15            }
16        );
17    }, function() {
18        /* clipboard write failed */
19    });
20})
21
22function tradeoneFormatLiveDate(value, english) {
23    if (!value) {
24        return '';
25    }
26
27    var date = new Date(value);
28    if (isNaN(date.getTime())) {
29        return value;
30    }
31
32    var day = String(date.getDate()).padStart(2, '0');
33    var month = String(date.getMonth() + 1).padStart(2, '0');
34    var year = date.getFullYear();
35    var hours = String(date.getHours()).padStart(2, '0');
36    var minutes = String(date.getMinutes()).padStart(2, '0');
37    return english ? hours + ':' + minutes + ' ' + year + '/' + month + '/' + day : hours + ':' + minutes + '  ' + day + '/' + month + '/' + year;
38}
39
40function tradeoneFormatLiveValue(field, security, settings) {
41    if (field === 'LastUpdate' || field === 'LastUpdateEn') {
42        field = field === 'LastUpdate' ? 'LastKnownRateDate' : 'LastKnownRateDateEn';
43    }
44    var value = security[field];
45    if (value === undefined || value === null) {
46        return null;
47    }
48
49    if (field === 'BaseRate') {
50        value = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0));
51        if (settings.base_rate_in_nis) {
52            value = value / 100;
53        }
54        return value.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
55    }
56    if (field === 'BaseRateChange' || field === 'BaseRateChangePercentage') {
57        var change = parseFloat(security.BaseRateChange || 0);
58        var percentage = security.BaseRateChangePercentage;
59        if (field === 'BaseRateChangePercentage' && (percentage === undefined || percentage === null)) {
60            percentage = security.BaseRate ? (change / parseFloat(security.BaseRate)) * 100 : 0;
61        }
62        var numeric = field === 'BaseRateChange' ? change : parseFloat(percentage || 0);
63        var suffix = field === 'BaseRateChangePercentage' ? '%' : '';
64        return '<span class="t" style="color:' + (numeric < 0 ? settings.negative_color : settings.positive_color) + '">' + numeric.toFixed(2) + suffix + '</span>';
65    }
66    if (field === 'LastKnownRateDate') {
67        return tradeoneFormatLiveDate(value, false);
68    }
69    if (field === 'LastKnownRateDateEn') {
70        return tradeoneFormatLiveDate(value, true);
71    }
72    if (field === 'ApiSyncTime') {
73        return tradeoneFormatLiveDate(value, false);
74    }
75    if (field === 'LastDealTime') {
76        return tradeoneFormatLiveDate(value, false).replace('  ', ' ');
77    }
78    if (field === 'DailyTurnover') {
79        return settings.base_rate_in_nis ? '₪' + Number(security.DailyNISRevenue || 0).toLocaleString() : Number(value || 0).toLocaleString();
80    }
81    if (field === 'DailyHighestRate') {
82        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
83    }
84    if (field === 'DailyLowestRate') {
85        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
86    }
87    if (field === 'AllYearMinimumRate') {
88        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
89    }
90    if (field === 'AllYearMaximumRate') {
91        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
92    }
93    if (field === 'MarketWorth') {
94        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
95        var market = calc * (parseFloat(security.ListedFortune || 0));
96        return '₪' + Number(market).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
97    }
98    if (field === 'MarketWorthInThousand') {
99        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
100        var market = calc * (parseFloat(security.ListedFortune || 0));
101        var thousand = market / 1000;
102        return Number(thousand).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
103    }
104    if (field === 'MarketWorthInMillion') {
105        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
106        var market = calc * (parseFloat(security.ListedFortune || 0));
107        var million = market / 1000000;
108        return '₪' + Number(million).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
109    }
110    if (field === 'MarketWorthInBillion') {
111        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
112        var market = calc * (parseFloat(security.ListedFortune || 0));
113        var billion = market / 1000000000;
114        return '₪' + Number(billion).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
115    }
116    if (field === 'MarketWorthUSDMillion') {
117        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
118        var market = calc * (parseFloat(security.ListedFortune || 0));
119        var usdRate = parseFloat(settings.usd_ils_rate || 0);
120        if (!usdRate) {
121            return null;
122        }
123        var millions = market / usdRate / 1000000;
124        return '$' + Number(millions).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
125    }
126    if (field === 'MarketWorthUSDBillion') {
127        var calc = (parseFloat(security.BaseRate || 0) + parseFloat(security.BaseRateChange || 0)) / 100;
128        var market = calc * (parseFloat(security.ListedFortune || 0));
129        var usdRate = parseFloat(settings.usd_ils_rate || 0);
130        if (!usdRate) {
131            return null;
132        }
133        var billions = market / usdRate / 1000000000;
134        return '$' + Number(billions).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
135    }
136    if (field === 'QuarterAverageNIS') {
137        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
138    }
139    if (field === 'AllYearMedianTurnover') {
140        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
141    }
142    if (field === 'CompanyMarketValue') {
143        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
144    }
145    if (field === 'DailyNISRevenue') {
146        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
147    }
148    if (field === 'AllMonthAverageNIS') {
149        return Number(value || 0).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
150    }
151    if (typeof value === 'number' || !isNaN(parseFloat(value))) {
152        return Number(value).toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 2});
153    }
154    return String(value);
155}
156
157function tradeoneRefreshStockInfo() {
158    var liveValues = jQuery('.tradeone-live-value');
159    if (!liveValues.length || typeof tradeoneAjax === 'undefined' || !tradeoneAjax.stock || tradeoneRefreshStockInfo.inFlight) {
160        return;
161    }
162
163    tradeoneRefreshStockInfo.inFlight = true;
164    liveValues.addClass('tradeone-live-refreshing').attr('aria-busy', 'true');
165
166    jQuery.ajax({
167        type: 'POST',
168        url: tradeoneAjax.url + (tradeoneAjax.url.indexOf('?') === -1 ? '?' : '&') + 'tradeone_live=' + Date.now(),
169        dataType: 'json',
170        cache: false,
171        headers: {'Cache-Control': 'no-cache, no-store'},
172        data: {action: 'tradeone_get_stock_data', stock: tradeoneAjax.stock, _: Date.now()}
173    }).done(function (response) {
174        if (!response.success || !response.data) {
175            liveValues.removeClass('tradeone-live-refreshing').attr('aria-busy', 'false');
176            return;
177        }
178        var liveSecurity = jQuery.extend({}, response.data.security, {
179            LastUpdate: response.data.market_date,
180            LastUpdateEn: response.data.market_date,
181            LastKnownRateDateEn: response.data.market_date,
182            ApiSyncTime: response.data.server_fetched
183        });
184        liveValues.each(function () {
185            var field = jQuery(this).data('tradeone-field');
186            var value = tradeoneFormatLiveValue(field, liveSecurity, response.data.settings);
187            if (value !== null) {
188                jQuery(this).html(value);
189            }
190        });
191        liveValues.removeClass('tradeone-live-refreshing').attr('aria-busy', 'false');
192    }).fail(function () {
193        liveValues.removeClass('tradeone-live-refreshing').attr('aria-busy', 'false');
194    }).always(function () {
195        tradeoneRefreshStockInfo.inFlight = false;
196    });
197}
198
199jQuery(function () {
200    if (jQuery('.tradeone-live-value').length && typeof tradeoneAjax !== 'undefined') {
201        tradeoneRefreshStockInfo();
202        window.setInterval(tradeoneRefreshStockInfo, Number(tradeoneAjax.refreshInterval) || 60000);
203    }
204});
205
206var DisplayArray = {};
207
208jQuery('input:checkbox.change_display').each(function () {
209    var sThisVal = (this.checked ? jQuery(this).val() : "");
210    if(sThisVal != '' || sThisVal != 0){
211        DisplayArray[this.value] = sThisVal;
212    }
213    Object.keys(DisplayArray).join(', ')
214});
215
216jQuery(".change_display").on("click", function() {
217
218    if (DisplayArray[this.value] === undefined) {
219        DisplayArray[this.value] = true;
220    } else {
221        delete DisplayArray[this.value];
222    }
223    var stock_number = jQuery("#stock_number").val();
224    var display = Object.keys(DisplayArray).join(',')
225    var show_on_pages_original = jQuery("#show_on_pages").val();
226    var show_on_pages  = show_on_pages_original.join(',');
227    var start = jQuery("#start").val();
228    var color = jQuery("#color_chart").val();
229    var DailyTurnoverInNis = jQuery("#DailyTurnoverInNis").val();
230    var StockBaseInNis = jQuery("#StockBaseInNis").val();
231    jQuery.ajax({
232        type: "POST",
233        url: tradeoneAjax.url,
234        data: ({action:'tradeone_save_display',_ajax_nonce:tradeoneAjax.nonce,display:display,stock_number:stock_number,show_on_pages:show_on_pages,start:start,color:color,DailyTurnoverInNis:DailyTurnoverInNis,StockBaseInNis:StockBaseInNis}),
235        success: function (output) {
236
237        }
238    });
239
240});
241
242
243jQuery(document).on("change", "#stock_number",function() {
244
245    DisplayArray = [];
246    jQuery('input:checkbox.change_display').each(function () {
247        var sThisVal = (this.checked ? jQuery(this).val() : "");
248        DisplayArray[sThisVal] = true;
249    });
250
251    var display = Object.keys(DisplayArray).join(',')
252    var stock_number = jQuery("#stock_number").val();
253    var show_on_pages_original = jQuery("#show_on_pages").val();
254    var show_on_pages  = show_on_pages_original.join(',');
255    var start = jQuery("#start").val();
256    var color = jQuery("#color_chart").val();
257    var DailyTurnoverInNis = jQuery("#DailyTurnoverInNis").val();
258    var StockBaseInNis = jQuery("#StockBaseInNis").val();
259    jQuery.ajax({
260        type: "POST",
261        url: tradeoneAjax.url,
262        data: ({action:'tradeone_save_display',_ajax_nonce:tradeoneAjax.nonce,display:display,stock_number:stock_number,show_on_pages:show_on_pages,start:start,color:color,DailyTurnoverInNis:DailyTurnoverInNis,StockBaseInNis:StockBaseInNis}),
263        success: function (output) {
264
265        }
266    });
267
268});
269
270jQuery(document).on("change", "#show_on_pages",function() {
271
272    DisplayArray = [];
273    jQuery('input:checkbox.change_display').each(function () {
274        var sThisVal = (this.checked ? jQuery(this).val() : "");
275        DisplayArray[sThisVal] = true;
276    });
277
278    console.log(DisplayArray);
279    var display = Object.keys(DisplayArray).join(',')
280    var stock_number = jQuery("#stock_number").val();
281
282    var show_on_pages_original = jQuery("#show_on_pages").val();
283    var show_on_pages  = show_on_pages_original.join(',');
284
285    var start = jQuery("#start").val();
286    var color = jQuery("#color_chart").val();
287    var DailyTurnoverInNis = jQuery("#DailyTurnoverInNis").val();
288    var StockBaseInNis = jQuery("#StockBaseInNis").val();
289    jQuery.ajax({
290        type: "POST",
291        url: tradeoneAjax.url,
292        data: ({action:'tradeone_save_display',_ajax_nonce:tradeoneAjax.nonce,display:display,stock_number:stock_number,show_on_pages:show_on_pages,start:start,color:color,DailyTurnoverInNis:DailyTurnoverInNis,StockBaseInNis:StockBaseInNis}),
293        success: function (output) {
294
295        }
296    });
297
298});
299
300jQuery(document).on("change", ".date_range",function() {
301
302    DisplayArray = [];
303    jQuery('input:checkbox.change_display').each(function () {
304        var sThisVal = (this.checked ? jQuery(this).val() : "");
305        DisplayArray[sThisVal] = true;
306    });
307
308    console.log(DisplayArray);
309    var display = Object.keys(DisplayArray).join(',')
310    var stock_number = jQuery("#stock_number").val();
311
312    var show_on_pages_original = jQuery("#show_on_pages").val();
313    var show_on_pages  = show_on_pages_original.join(',');
314
315    var start = jQuery("#start").val();
316    var color = jQuery("#color_chart").val();
317    var DailyTurnoverInNis = jQuery("#DailyTurnoverInNis").val();
318    var StockBaseInNis = jQuery("#StockBaseInNis").val();
319    jQuery.ajax({
320        type: "POST",
321        url: tradeoneAjax.url,
322        data: ({action:'tradeone_save_display',_ajax_nonce:tradeoneAjax.nonce,dis
322play:display,stock_number:stock_number,show_on_pages:show_on_pages,start:start,color:color,DailyTurnoverInNis:DailyTurnoverInNis,StockBaseInNis:StockBaseInNis}),
323        success: function (output) {
324
325        }
326    });
327
328});
329
330
331jQuery(document).on("change", "#StockBaseInNis",function() {
332
333
334
335    if(jQuery(this).is(":checked")){
336        StockBaseInNis = jQuery(this).val('1');
337    }else{
338        StockBaseInNis =  jQuery(this).val('0');
339    }
340
341    var DailyTurnoverInNis = jQuery("#DailyTurnoverInNis").val();
342    var StockBaseInNis = jQuery(this).val();
343
344    DisplayArray = [];
345    jQuery('input:checkbox.change_display').each(function () {
346        var sThisVal = (this.checked ? jQuery(this).val() : "");
347        DisplayArray[sThisVal] = true;
348    });
349    var display = Object.keys(DisplayArray).join(',')
350    var stock_number = jQuery("#stock_number").val();
351    var show_on_pages_original = jQuery("#show_on_pages").val();
352    var show_on_pages  = show_on_pages_original.join(',');
353    var start = jQuery("#start").val();
354    var color = jQuery("#color_chart").val();
355
356    jQuery.ajax({
357        type: "POST",
358        url: tradeoneAjax.url,
359        data: ({
360            action:'tradeone_save_display',
361            _ajax_nonce:tradeoneAjax.nonce,
362            display:display,
363            stock_number:stock_number,
364            show_on_pages:show_on_pages,
365            start:start,
366            color:color,
367            StockBaseInNis:StockBaseInNis,
368            DailyTurnoverInNis:DailyTurnoverInNis
369        }),
370        success: function (output) {
371
372        }
373    });
374
375});
376
377jQuery(document).on("change", "#DailyTurnoverInNis",function() {
378
379
380
381    if(jQuery(this).is(":checked")){
382        jQuery(this).val('1');
383    }else{
384        jQuery(this).val('0');
385    }
386    var StockBaseInNis = jQuery("#StockBaseInNis").val();
387    var DailyTurnoverInNis = jQuery(this).val();
388
389
390    DisplayArray = [];
391    jQuery('input:checkbox.change_display').each(function () {
392        var sThisVal = (this.checked ? jQuery(this).val() : "");
393        DisplayArray[sThisVal] = true;
394    });
395    var display = Object.keys(DisplayArray).join(',')
396    var stock_number = jQuery("#stock_number").val();
397    var show_on_pages_original = jQuery("#show_on_pages").val();
398    var show_on_pages  = show_on_pages_original.join(',');
399    var start = jQuery("#start").val();
400    var color = jQuery("#color_chart").val();
401
402    jQuery.ajax({
403        type: "POST",
404        url: tradeoneAjax.url,
405        data: ({
406            action:'tradeone_save_display',
407            _ajax_nonce:tradeoneAjax.nonce,
408            display:display,
409            stock_number:stock_number,
410            show_on_pages:show_on_pages,
411            start:start,
412            color:color,
413            StockBaseInNis:StockBaseInNis,
414            DailyTurnoverInNis:DailyTurnoverInNis
415        }),
416        success: function (output) {
417
418        }
419    });
420
421
422});
423
424//Bound Array
425
426var BoundArray = {};
427
428jQuery('input:checkbox.change_display_bound').each(function () {
429    var sThisVal = (this.checked ? jQuery(this).val() : "");
430    if(sThisVal != '' || sThisVal != 0){
431        BoundArray[this.value] = sThisVal;
432    }
433    Object.keys(BoundArray).join(', ')
434});
435
436jQuery(".change_display_bound").on("click", function() {
437    if (BoundArray[this.value] === undefined) {
438        BoundArray[this.value] = true;
439    } else {
440        delete BoundArray[this.value];
441    }
442
443    var Bounddisplay = Object.keys(BoundArray).join(',')
444    var show_on_pages = jQuery("#show_on_pages_bounds").val();
445
446    jQuery.ajax({
447        type: "POST",
448        url: tradeoneAjax.url,
449        data: ({action:'tradeone_save_bounddisplay',_ajax_nonce:tradeoneAjax.nonce,Bounddisplay:Bounddisplay,show_on_pages:show_on_pages}),
450        success: function (output) {
451
452        }
453    });
454
455});
456
457jQuery(document).on("change", "#show_on_pages_bounds",function() {
458
459    BoundArray = [];
460    jQuery('input:checkbox.change_display').each(function () {
461        var sThisVal = (this.checked ? jQuery(this).val() : "");
462        BoundArray[sThisVal] = true;
463    });
464
465    var Bounddisplay = Object.keys(BoundArray).join(',')
466    var show_on_pages = jQuery("#show_on_pages_bounds").val();
467
468    jQuery.ajax({
469        type: "POST",
470        url: tradeoneAjax.url,
471        data: ({action:'tradeone_save_bounddisplay',_ajax_nonce:tradeoneAjax.nonce,Bounddisplay:Bounddisplay,show_on_pages:show_on_pages}),
472        success: function (output) {
473
474        }
475    });
476
477});
478
479
480if (jQuery('.js-example-basic-single').length && typeof jQuery.fn.select2 === 'function') {
481    jQuery('.js-example-basic-single').select2();
482}
483
484jQuery(document).on('submit','#bounds_form',function () {
485    var data = jQuery(this).serialize() + '&action=tradeone_save_splitbounds&_ajax_nonce=' + tradeoneAjax.nonce;
486    jQuery.ajax({
487        type: "POST",
488        url: tradeoneAjax.url,
489        data: data,
490        success: function (output) {
491            alert("מידע נשמר בהצלחה")
492        }
493    });
494
495    return false;
496})
497
498
499jQuery(document).on('click','.update_src_code',function () {
500    let version = jQuery(this).val();
501    jQuery.ajax({
502        type: "POST",
503        url: tradeoneAjax.url,
504        data: ({action:'tradeone_update_core',_ajax_nonce:tradeoneAjax.nonce,updateCore:'updateCore',version:version}),
505        success: function (output) {
506            alert("קבצים עודכנו בהצלחה!!")
507        }
508    });
509
510    return false;
511})
512
513// ── Connection Settings Page ─────────────────────────────────────────────────
514
515jQuery(document).on('click', '#tradeone_save_conn', function () {
516    var stock_id       = jQuery('#tradeone_stock_id').val();
517    var token          = jQuery('#tradeone_token').val();
518    var color          = jQuery('#tradeone_chart_color').val();
519    var graph_text_color = jQuery('#tradeone_graph_text_color').val();
520    var graph_background_color = jQuery('#tradeone_graph_background_color').val();
521    var button_bg_color = jQuery('#tradeone_button_bg_color').val();
522    var button_text_color = jQuery('#tradeone_button_text_color').val();
523    var button_active_bg_color = jQuery('#tradeone_button_active_bg_color').val();
524    var button_active_text_color = jQuery('#tradeone_button_active_text_color').val();
525    var positive_color = jQuery('#tradeone_positive_color').val();
526    var negative_color = jQuery('#tradeone_negative_color').val();
527    var volume_color = jQuery('#tradeone_volume_color').val();
528    var start          = jQuery('#tradeone_start_date').val();
529    var simulate_date  = jQuery('#tradeone_simulate_date').val();
530    var $status        = jQuery('#tradeone_conn_status');
531
532    $status.text('Saving...');
533    jQuery.ajax({
534        type: 'POST',
535        url: tradeoneAjax.url,
536        data: {
537            action:        'tradeone_save_connection',
538            _ajax_nonce:   tradeoneAjax.nonce,
539            stock_id:      stock_id,
540            token:         token,
541            color:         color,
542            graph_text_color: graph_text_color,
543            graph_background_color: graph_background_color,
544            button_bg_color: button_bg_color,
545            button_text_color: button_text_color,
546            button_active_bg_color: button_active_bg_color,
547            button_active_text_color: button_active_text_color,
548            positive_color: positive_color,
549            negative_color: negative_color,
550            volume_color: volume_color,
551            start:         start,
552            simulate_date: simulate_date
553        },
554        success: function () {
555            $status.css('color', '#3c763d').text('Saved successfully');
556            setTimeout(function () { $status.text(''); }, 3000);
557            // Reload so the simulation banner + active label refresh
558            setTimeout(function () { window.location.reload(); }, 800);
559        },
560        error: function () {
561            $status.css('color', '#a94442').text('Save failed');
562        }
563    });
564});
565
566jQuery(document).on('click', '#tradeone_clear_simulate', function () {
567    jQuery('#tradeone_simulate_date').val('');
568    jQuery('#tradeone_save_conn').trigger('click');
569});
570
571jQuery(document).on('click', '#tradeone_test_conn', function () {
572    var stock_id = jQuery('#tradeone_stock_id').val();
573    var token    = jQuery('#tradeone_token').val();
574    var $log     = jQuery('#tradeone_log');
575    var $status  = jQuery('#tradeone_conn_status');
576
577    $status.css('color', '').text('Testing...');
578    $log.hide();
579
580    jQuery.ajax({
581        type: 'POST',
582        url: tradeoneAjax.url,
583        data: {
584            action:      'tradeone_test_connection',
585            _ajax_nonce: tradeoneAjax.nonce,
586            stock_id:    stock_id,
587            token:       token
588        },
589        success: function (res) {
590            if (res.success) {
591                var d = res.data;
592                jQuery('#tradeone_log_request').text(
593                    'API ping:\n' + d.request +
594                    '\n\nStock data:\n' + (d.stock_url || '')
595                );
596                var responseText = d.error
597                    ? 'Error: ' + d.error
598                    : (d.response || '(empty response)');
599                try {
600                    responseText = JSON.stringify(JSON.parse(responseText), null, 2);
601                } catch(e) {}
602                jQuery('#tradeone_log_response').text(responseText);
603
604                // Stock data response
605                var stockText = d.stock_raw || '(not fetched)';
606                try {
607                    var parsed = JSON.parse(stockText);
608                    // Show only the Security row — the full JSON is huge
609                    var security = parsed && parsed.Table && parsed.Table.Security
610                        ? parsed.Table.Security[0]
611                        : parsed;
612                    stockText = JSON.stringify(security, null, 2);
613                } catch(e) {}
614                jQuery('#tradeone_log_stock_data').text(stockText);
615
616                // Stock symbol info
617                var si = d.stock_info;
618                if (si && (si.eng_symbol || si.heb_symbol)) {
619                    jQuery('#tradeone_log_eng').text(si.eng_symbol || '—');
620                    jQuery('#tradeone_log_heb').text(si.heb_symbol || '—');
621                    jQuery('#tradeone_log_lastupdate').text(si.last_update || '—');
622                    jQuery('#tradeone_log_stock').show();
623                } else {
624                    jQuery('#tradeone_log_stock').hide();
625                }
626
627                var ok = !d.error && d.http_code >
627= 200 && d.http_code < 300;
628                $status.css('color', ok ? '#3c763d' : '#a94442')
629                       .text(ok ? 'Connected (' + d.http_code + ')' : 'Connection failed (' + d.http_code + ')');
630                $log.show();
631            }
632        },
633        error: function () {
634            $status.css('color', '#a94442').text('AJAX error');
635        }
636    });
637});
638
639jQuery(document).on('click', '#tradeone_run_refresh_now', function () {
640    var $status = jQuery('#tradeone_conn_status');
641    var $button = jQuery(this);
642    var $refreshLog = jQuery('#tradeone_refresh_log');
643
644    $button.prop('disabled', true);
645    $status.css('color', '').text('Running refresh...');
646
647    jQuery.ajax({
648        type: 'POST',
649        url: tradeoneAjax.url,
650        data: {
651            action: 'tradeone_run_refresh_now',
652            _ajax_nonce: tradeoneAjax.nonce
653        },
654        success: function (res) {
655            if (res && res.success) {
656                var lines = (res.data && Array.isArray(res.data.lines)) ? res.data.lines : [];
657                if ($refreshLog.length && lines.length) {
658                    $refreshLog.text(lines.join('\n'));
659                }
660                var resultText = (res.data && res.data.last_result) ? res.data.last_result : 'OK';
661                $status.css('color', '#3c763d').text('Refresh complete: ' + resultText);
662            } else {
663                $status.css('color', '#a94442').text('Refresh failed');
664            }
665        },
666        error: function () {
667            $status.css('color', '#a94442').text('Refresh AJAX error');
668        },
669        complete: function () {
670            $button.prop('disabled', false);
671        }
672    });
673});

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.