PageSourceSearch

https://www.goldenstatemint.com/skin/2-columns/js/quotes/quotes_top.js?v=1790419156

js goldenstatemint.com collected 2026-09-26 10:40:18 UTC 21,453 bytes, 654 lines download raw bytes

1var NetDania = NetDania || {};
2NetDania.QL = NetDania.QL || {};
3
4NetDania.QL.currentInstrList = [];
5NetDania.QL.DivInstruments = "NetDaniaDivInstruments_";
6NetDania.QL.DivQL = "NetDaniaQL_";
7NetDania.QL.Quotes = {};
8NetDania.QL.Quotes.List = [];
9NetDania.QL.Options = {version: "1.1"};
10NetDania.QL.SilverStart=0;
11NetDania.QL.GoldStart=0;
12NetDania.QL.RatioStart=0;
13NetDania.QL.SilverCurrent=0;
14NetDania.QL.GoldCurrent=0;
15NetDania.QL.RatioCurrent=0;
16NetDania.QL.SilverLastDir='';
17NetDania.QL.GoldLastDir='';
18NetDania.QL.RatioLastDir='';
19
20NetDania.QL.GetControl = function (controlID) {
21  for (var i = 0; i < NetDania.QL.Quotes.List.length; i++) {
22    if (NetDania.QL.Quotes.List[i] !== undefined && NetDania.QL.Quotes.List[i].config.ID == controlID) {
23      return NetDania.QL.Quotes.List[i];
24    }
25  }
26};
27
28NetDania.QL.renderQuoteList = function (config) {
29
30  var _instance = this;
31
32  this.config = config;
33
34  var ID = ((config.containerId ? NetDania.QL.Util.HashCode(config.containerId) : NetDania.QL.Util.generateChars(4)));
35
36  config.ID = ID;
37
38
39  config.qlContainer = NetDania.QL.DivQL + config.ID;
40
41  NetDania.QL.Options.version = config.version || NetDania.QL.Options.version;
42
43  NetDania.QL.Quotes.List.push(this);
44
45
46  var connectionConfig = {
47    pollingInterval: config.pollingInterval || NetDania.JsApi.PoolingInterval.AUTO,
48    host: config.host,
49    failoverHosts: config.failoverHosts,
50    behavior: config.behavior || NetDania.JsApi.ConnectionType.AUTO, //POLLING or LONG POLLING
51    type: 0,
52    v: 3,
53    appId: 'jsQL v1.0'
54  };
55
56  this.connection = new NetDania.JsApi.JSONConnection(connectionConfig);
57
58  this.connection.Connect(); //connect to the server
59
60  if (config.provider !== undefined && config.provider != '') {
61    this.provider = config.provider;
62  } else {
63    throw "Missing global provider parameter";
64  }
65
66
67  var useDefaultColumns = config.columns || true;
68
69
70  this.component = {records: [], instr: {}, arr: [], arrRemove: [], id: ID};
71  this.component.renderers = {
72    f10: {
73      fn: function (grid, rec, cellid, val, oldval, fxy) {
74        console.log('f10');
75        let value = '<span>' + val + '&nbsp; &nbsp;</span>';
76        let coldval = oldval;
77        let metalstart = 0;
78        if(rec.realSymbol == 'XAGUSD' || rec.symbol == 'XAGUSD'){metalstart=NetDania.QL.SilverStart;}
79        if(rec.realSymbol == 'XAUUSD' || rec.symbol == 'XAUUSD'){metalstart=NetDania.QL.GoldStart;}
80        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){metalstart=NetDania.QL.RatioStart;}
81        if (metalstart != 0){coldval = metalstart;}
82        let sym = '$';
83        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
84        if (val > coldval) {
85          //value = '<span style="color:green; background-color:#C8C8C8;">' + val + '&nbsp;</span><span class="arrowIcon up"></span>';
86          value = '<span style="color:green; background-color:#C8C8C8;">' + sym + val + '&nbsp;</span>';
87        } else if (val < coldval) {
88          //value = '<span style="color:#CC0000; background-color:#C8C8C8;">' + val + '&nbsp;</span><span class="arrowIcon down"></span>';
89          value = '<span style="color:#CC0000; background-color:#C8C8C8;">' + sym + val + '&nbsp;</span>';
90        }
91        return value;
92      },
93      hightlightInterval: 500
94    },
95    f11: {
96      fn: function (grid, rec, cellid, val, oldval, fxy) {
97        if(rec.realSymbol == '' || val == undefined || val == 'undefined'){
98          return '<span></span>';
99        }
100
101        if(rec.realSymbol != '' && val != undefined){
102          val = parseFloat(val).toFixed(2);
103        }
104        let coldval = oldval;
105         if(coldval != '' && coldval != undefined){
106          coldval = parseFloat(coldval).toFixed(2);
107        }
108
109        let metalstart = 0;
110        let prevval = 0;
111        let lastdir = '';
112        let ddir = '';
113        if(rec.realSymbol == 'XAGUSD' || rec.symbol == 'XAGUSD'){prevval=NetDania.QL.SilverCurrent;NetDania.QL.SilverCurrent=val;metalstart=NetDania.QL.SilverStart;}
114        if(rec.realSymbol == 'XAUUSD' || rec.symbol == 'XAUUSD'){prevval=NetDania.QL.GoldCurrent;NetDania.QL.GoldCurrent=val;metalstart=NetDania.QL.GoldStart;}
115        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){prevval=NetDania.QL.RatioCurrent;NetDania.QL.RatioCurrent=val;metalstart=NetDania.QL.RatioStart;}
116
117        if(rec.realSymbol == 'XAGUSD' || rec.symbol == 'XAGUSD'){
118          if (NetDania.QL.SilverStart != 0 && NetDania.QL.SilverCurrent !=0){if(NetDania.QL.SilverCurrent > NetDania.QL.SilverStart){ddir='up';}else{ddir='dn';}}
119          NetDania.QL.SilverLastDir=lastdir=ddir;
120        }
121        if(rec.realSymbol == 'XAUUSD' || rec.symbol == 'XAUUSD'){
122          if (NetDania.QL.GoldStart != 0 && NetDania.QL.GoldCurrent !=0){if(NetDania.QL.GoldCurrent > NetDania.QL.GoldStart){ddir='up';}else{ddir='dn';}}
123          NetDania.QL.GoldLastDir=lastdir=ddir;
124        }
125        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){
126          if (NetDania.QL.RatioStart != 0 && NetDania.QL.RatioCurrent !=0){if(NetDania.QL.RatioCurrent > NetDania.QL.RatioStart){ddir='up';}else{ddir='dn';}}
127          NetDania.QL.RatioLastDir=lastdir=ddir;
128        }
129        if (metalstart != 0){coldval = metalstart;}
130
131        disval = val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
132        var value = '<span>' + sym + disval + '&nbsp; &nbsp;</span>';
133        var sym = '$';
134        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
135        if (val === "NaN") {
136          return '<span></span>';
137        }
138        if (val > metalstart && val != prevval) {
139          value = '<span style="color:white; background-color:#C8C8C8;">' + sym + disval + '&nbsp;</span>';
140        } else if (val < metalstart && val != prevval) {
141          value = '<span style="color:white; background-color:#C8C8C8;">' + sym + disval + '&nbsp;</span>';
142        } else {
143          if(lastdir=='up'){
144            value = '<span style="color:white;">' + sym + disval + '&nbsp;</span>';
145          } else if(lastdir=='dn'){
146            value = '<span style="color:white;">' + sym + disval + '&nbsp;</span>';
147          }
148        }
149        return value;
150      },
151      hightlightInterval: 300
152    },
153    f25: {
154      fn: function (grid, rec, cellid, val, oldval, fxy) {
155        var realSymbol = rec.realSymbol;
156        if (rec.realSymbol === undefined) {
157          realSymbol = rec.symbol;
158        }
159
160        if (val == undefined) {
161          val = "";
162        } else if (rec.newName.f25 != undefined) {
163          val = rec.newName.f25;
164        }
165        let tval = val;
166        if(tval=='G/S RATIO'){tval='GOLD/SILVER RATIO';}
167        return '<span title="' + tval + '">' + val + '</span>';
168
169      }
170    },
171
172    f15: {
173      fn: function (grid, rec, cellid, val, oldval, fxy) {
174
175        let value = parseFloat(val);
176
177        if (value.toString() === "NaN") {
178          return '<span></span>';
179        }
180
181        return '<span style="color:' + (value > 0 ? "green" : "#CC0000") + ';">' + value.toFixed(2) + '%&nbsp;</span>';
182      },
183      hightlightInterval: 500
184    },
185
186    f14: {
187      fn: function (grid, rec, cellid, val, oldval, fxy) {
188
189        let value = parseFloat(val);
190
191        if (value.toString() === "NaN") {
192          return '<span></span>';
193        }
194
195        let sym = (rec.realSymbol === 'XAUXAG' || rec.symbol === 'XAUXAG') ? '' : '$';
196        let isUp = value > 0;
197
198        return '<span class="arrowIcon '
199          + (isUp ? "up" : "down") + '"></span><span style="color:' + (isUp ? "green" : "#CC0000") + ';">'
200          + (isUp ? sym + value.toFixed(2) : '-' + sym + Math.abs( value ).toFixed(2)) + '&nbsp;</span>';
201      },
202      hightlightInterval: 500
203    },
204
205    f17: {
206      fn: function (grid, rec, cellid, val, oldval, fxy) {
207        if (val === "N/A" || val === undefined) {
208          return "N/A";
209        }
210        var dateUnf = new Date(val * 1000);
211        return '<div>' + NetDania.QL.Util.dateFormat(dateUnf, "m/d/yy HH:MM TT") + '</div>';
212      }
213    },
214    f3: {
215      fn: function (grid, rec, cellid, val, oldval, fxy) {
216        var sym = '$';
217        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
218        val = parseFloat(val).toFixed(2);
219        val = val.replace("NaN", "N/A");
220        return '<div>' + sym + val + '</div>';
221      }
222    },
223    f1: {
224      fn: function (grid, rec, cellid, val, oldval, fxy) {
225        var sym = '$';
226        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
227        val = parseFloat(val).toFixed(2);
228        val = val.replace("NaN", "N/A");
229        return '<div>' + sym + val + '</div>';
230      }
231    },
232    f2: {
233      fn: function (grid, rec, cellid, val, oldval, fxy) {
234        var sym = '$';
235        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
236        val = parseFloat(val).toFixed(2);
237        val = val.replace("NaN", "N/A");
238        return '<div>' + sym + val + '</div>';
239      }
240    },
241    f4: {
242      fn: function (grid, rec, cellid, val, oldval, fxy) {
243        var sym = '$';
244        if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; NetDania.QL.RatioStart=val; }
245        if(rec.realSymbol == 'XAGUSD' || rec.symbol == 'XAGUSD'){NetDania.QL.SilverStart=val;}
246        if(rec.realSymbol == 'XAUUSD' || rec.symbol == 'XAUUSD'){NetDania.QL.GoldStart=val;}
247        //if(rec.realSymbol == 'XAUXAG' || rec.symbol == 'XAUXAG'){ sym =''; }
248        val = parseFloat(val).toFixed(2);
249        val = val.replace("NaN", "N/A");
250        return ''; //'<div>' + sym + val + '</div>';
251      }
252    },
253    f5: {
254      fn: function (grid, rec, cellid, val, oldval, fxy) {
255        val = parseFloat(val).toFixed(2);
256        val = val.replace("NaN", "N/A");
257        return '<div>' + val + '</div>';
258      }
259    }
260  };
261
262  this.connection.addListener(NetDania.JsApi.Events.ONPRICEUPDATE, function (data) {
263    NetDania.QL.receiveQuotesJsonData(data, _instance.component);
264  });
265
266
267  this.component.instr = this.instr;
268
269  var columns = config.columns;
270
271  if (useDefaultColumns === true) {
272    columns = {
273      f25: {
274        name: 'Name',
275        value: '',
276        width: 80,
277        hdTDcls: 'hdTDClsLeft',
278        TDCls: 'TDClsLeft',
279        cellCls: 'nameColumn',
280        hdCellCls: 'nameHeaderClass'
281      },
282      f10: {
283        name: 'Bid',
284        value: '',
285        width: 80,
286        hdTDcls: 'hdTDClsRight lastHeaderCls',
287        TDCls: 'TDClsRight',
288        cellCls: 'kursColumn',
289        hdCellCls: 'gridDefaultHeader'
290      },
291      f11: {
292        name: 'Ask',
293        value: '',
294        width: 80,
295        hdTDcls: 'hdTDClsRight lastHeaderCls',
296        TDCls: 'TDClsRight',
297        cellCls: 'changeColumn',
298        hdCellCls: 'gridChangeHeader'
299      },
300      f2: {
301        name: 'High',
302        value: '',
303        width: 80,
304        hdTDcls: 'hdTDClsRight',
305        TDCls: 'TDClsRight',
306        cellCls: 'changeColumn',
307        hdCellCls: 'gridChangeHeader'
308      },
309      f3: {
310        name: 'Low',
311        value: '',
312        width: 80,
313        hdTDcls: 'hdTDClsRight',
314        TDCls: 'TDClsRight',
315        cellCls: 'changeColumn',
316        hdCellCls: 'gridChangeHeader'
317      },
318      f14: {
319        name: 'Net',
320        value: '',
321        width: 80,
322        hdTDcls: 'hdTDClsRight lastHeaderCls',
323        TDCls: 'TDClsRight',
324        cellCls: 'changeColumn',
325        hdCellCls: 'gridChangeHeader'
326      },
327      f15: {
328        name: '%Change',
329        value: '',
330        width: 80,
331        hdTDcls: 'hdTDClsRight',
332        TDCls: 'TDClsRight',
333        cellCls: 'changeColumn',
334        hdCellCls: 'gridChangeHeader'
335      },
336      f17: {
337        name: 'Time',
338        value: '',
339        width: 78,
340        hdTDcls: 'hdTDClsRight',
341        TDCls: 'TDClsRight',
342        cellCls: 'changeColumn',
343        hdCellCls: 'gridChangeHeader'
344      }
345    };
346  }
347
348  this.component.columns = columns;
349  config.containerId = 'qlAppletTop';
350  this.tableConfig = {
351    instr: this.component,
352    columns: columns,
353    contentClass: '',
354    contentOddClass: '',
355    width: '100%',
356    renderTo: config.qlContainer,
357    headerCls: 'headCls',
358    height: config.height
359  };
360
361  config.renderTo = this.tableConfig.renderTo;
362  NetDania.QL.WriteHtml(config);
363  this.AddInstruments(config);
364  return NetDania.QL.renderTable(this.tableConfig);
365};
366
367NetDania.QL.WriteHtml = function (config) {
368
369  var jshtml =
370    "<div class='divQuotes'>" +
371    "<div id='" + config.qlContainer + "'></div>" +
372    "</div>"
373  ;
374  if (config.containerId !== undefined) {
375    var el = document.getElementById(config.containerId);
376    el.innerHTML = jshtml;
377  }
378  else {
379    window.document.write(jshtml);
380  }
381};
382
383NetDania.QL.renderTable = function (tableConfig, startFrame, endFrame) {
384  var headerClass, contentClass, contentOddClass, width, columns, instr;
385
386  columns = tableConfig.columns;
387  var cmp = tableConfig.instr;
388  instr = cmp.records;
389  var tableWidth = 0;
390  var headerHtml = '';
391  var colsHtml = '';
392  var lastField = '';
393  contentClass = tableConfig.contentClass;
394  if (tableConfig.contentClass === undefined || tableConfig.contentClass === null || tableConfig.contentClass === '') {
395    contentClass = "gridDefaultContentClass";
396  }
397  contentOddClass = tableConfig.contentOddClass;
398  if (tableConfig.contentOddClass === undefined || tableConfig.contentOddClass === null || tableConfig.contentOddClass === '') {
399    contentOddClass = "gridDefaultContentOddClass";
400  }
401
402  if (tableConfig.width !== undefined && tableConfig.width !== null) {
403    tableWidth = width;
404  }
405  for (var prop in columns) {
406    lastField = prop;
407  }
408  var cols = 0;
409  for (var prop in columns) {
410    if (columns.hasOwnProperty(prop)) {
411      cols++;
412      colsHtml += '<col width=' + columns[prop].width + '>';
413      tableWidth += parseInt(columns[prop].width);
414      var lc = '';
415      if (lastField === prop) {
416        lc = ' lastHeaderCls';
417      }
418      headerHtml += '<th class="' + columns[prop].hdTDcls + lc + '"><span class="' + columns[prop].hdCellCls + '"><span>' + columns[prop].name + '</span></span></th>';
419    }
420  }
421  var forceHeight = '';
422  if (tableConfig.height !== undefined) {
423    forceHeight = 'style="overflow: auto;overflow-x: hidden; max-height: ' + tableConfig.height + 'px;"';
424  }
425  var align = '';
426  if (tableConfig.align === '') {
427    align = "center";
428  }
429  else {
430    align = tableConfig.align;
431  }
432  var jshtml = '';
433  if (startFrame !== undefined) {
434    jshtml = startFrame + '<table width="100%" border="0" cellspacing="0" cellpadding="0" align="' + align + '">';
435  }
436  else {
437    jshtml = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
438  }
439  //jshtml += colsHtml;
440  var t = jshtml;
441  tableConfig.hideHeaders=true;
442  if (tableConfig.hideHeaders !== true) {
443    jshtml += '<thead><tr>';
444    jshtml += headerHtml;
445    jshtml += '</tr></thead>';
446  }
447  jshtml += '</table>';
448
449  jshtml += '<div class="nd-ql-instruments-container" ' + forceHeight + '>';
450  jshtml += t;
451  jshtml += '<tbody >';
452  var gday = -1;
453  var gmonth = -1;
454  var gyear = -1;
455  if (tableConfig.groupByDate === true && instr.length > 0) {
456    gd = new Date(instr[0].data.t * 1000);
457  }
458
459  var noDataMessage = tableConfig.noDataMessage;
460  var lastValue = [];
461  if (noDataMessage === undefined) {
462    noDataMessage = 'No instruments selected!';
463  }
464
465  if (instr.length == 0 || instr[0].newName.f25 == '') {
466    jshtml += '<tr><td colspan=' + cols + ' class="netd-grid-empty">' + noDataMessage + '</td></tr>';
467  }
468  for (var ii = 0; ii < instr.length; ii++) {
469    if (instr[ii].newName.f25 !== '') {
470      if (tableConfig.groupByDate === true) {
471        var cd = new Date(instr[ii].data.t * 1000);
472        if (cd.getDay() !== gday || cd.getMonth() !== gmonth || cd.getYear() !== gyear) {
473          jshtml += '<tr><td colspan=' + cols + ' class="netd-group-hd ">' + dateFormat(cd, "dd. mmmm yyyy") + '</td></tr>';
474          gday = cd.getDay();
475          gmonth = cd.getMonth();
476          gyear = cd.getYear();
477        }
478      }
479      /* if (ii % 2 === 0) {
480           jshtml += '<tr class="' + contentClass + '">';
481       }
482       else {
483           jshtml += '<tr class="' + contentOddClass + '">';
484       }*/
485
486      var recid = instr[ii].id;
487
488      for (var prop1 in columns) {
489        if (columns.hasOwnProperty(prop1)) {
490          var cellid = recid + '-' + prop1;
491          var value = instr[ii].data[prop1];
492          if (value === undefined) {
493            value = '';
494          }
495          if (cmp.renderers[prop1] !== undefined) {
496            value = cmp.renderers[prop1].fn(cmp, instr[ii], cellid, value, value, prop1);
497            lastValue[prop1]=value;
498          } else {
499            //value = '<span>' + value + '</span>';
500            value = lastValue[prop1];
501            console.log('value stored');
502          }
503          var lc = '';
504          if (lastField === prop1) {
505            lc = ' lastColCls';
506          }
507          //console.log(prop1);
508          //console.log(instr[ii].newName[prop1]);
509          ttl='';
510          if (prop1 == 'f11' || prop1 == 'f14' || prop1 == 'f15' ){
511            //ttl=instr[ii].newName[prop1];
512            //if(ttl=='G/S RATIO'){ttl='Gold/Silver Ratio';}
513          }
514
515          jshtml += '<td  style="overflow: hidden;" title="'+ttl+'" data-id="'+instr[ii].symbol+'-'+prop1+'" class="' + columns[prop1].TDCls + lc + '"><span id="' + cellid + '" class="' + columns[prop1].cellCls + '" >' + value + '</span></td>';
516        }
517      }
518      if(ii < 2){jshtml += '<td class="quotespacer" style="width:100px;"></td><!-- ' + instr[ii].data["f4"] + ' -->';}
519      //jshtml += '</tr>';
520    }
521  }
522  jshtml += '</tbody>';
523  jshtml += '</table>';
524  jshtml += '</div>';
525  if (endFrame !== undefined) {
526    jshtml += endFrame;
527  }
528  if (tableConfig.renderTo === 'script') {
529    return jshtml;
530  }
531  if (tableConfig.renderTo !== undefined) {
532    var el = document.getElementById(tableConfig.renderTo);
533    el.innerHTML = jshtml;
534  }
535  else {
536    window.document.write(jshtml);
537  }
538};
539
540NetDania.QL.renderQuoteList.prototype.AddInstruments = function () {
541  if (this.component.arrRemove !== undefined && this.component.arrRemove.length > 0) {
542    this.connection.addRequests(this.component.arrRemove);
543    this.connection.Flush();
544  }
545
546
547  this.instr = [];
548
549  for (var i = 0; i < this.config.instruments.length; i++) {
550    if (this.config.instruments[i].e == true) {
551      var priceReq = NetDania.JsApi.Request.getReqObjPrice(this.config.instruments[i].s, this.config.instruments[i].p || this.provider, true);
552      this.instr.push({
553        r: priceReq,
554        f25: this.config.instruments[i].n || '',
555        d: this.config.instruments[i].d || 5,
556        o: this.config.instruments[i].o || 0
557      });
558      this.connection.AddRequest(priceReq);
559    }
560  }
561
562  this.component.records = [];
563  this.component.arrRemove = [];
564  for (var ii = 0; ii < this.instr.length; ii++) {
565    var id = 'recid-' + this.config.ID + '-' + this.instr[ii].r.i;
566    var compute =  new NetDania.QL.Util.ComputedQuoteRow(id, this.component);
567    this.component.records.push({
568      id: id,
569      compute: compute,
570      symbol: this.instr[ii].r.s,
571      decimals: this.instr[ii].d,
572      data: {},
573      newName: {f25: this.instr[ii].f25},
574      provider: this.instr[ii].r.p
575    });
576    this.component.arr.push(this.instr[ii].r);
577  }
578
579  this.component.instr = this.instr;
580
581  this.connection.Flush();
582};
583
584NetDania.QL.Configuration = {
585  instruments: [
586    { n:'GOLD', s: 'XAUUSD', p: 'netdania_rtc', e: true },
587    { n:'SILVER', s: 'XAGUSD', p: 'netdania_rtc', e: true },
588    { n:'G/S RATIO', s: 'XAUXAG', p: 'netdania_rtc', e: true },
589
590  ],
591  containerId: 'qlAppletTop',
592  provider: "netdania_rtc",
593
594  host: ('https:' == document.location.protocol ? 'https://' : 'http://') + "balancer.datafeeds.io/StreamingServer/StreamingServer",
595  failoverHosts: [('https:' == document.location.protocol ? 'https://' : 'http://') + "balancer-cro.netdania.com/StreamingServer/StreamingServer", ('https:' == document.location.protocol ? 'https://' : 'http://') + "81.89.26.212/StreamingServer/StreamingServer", ('https:' == document.location.protocol ? 'https://' : 'http://') + "109.166.243.196/StreamingServer/StreamingServer"],
596  columns: {
597    f4: {
598      name: 'Opening',
599      value: '',
600      width: 10,
601      hdTDcls: 'hdTDClsRight',
602      TDCls: 'TDCls',
603      cellCls: 'changeColumn',
604      hdCellCls: 'gridChangeHeader'
605    },
606    f25: {
607      name: 'Live Metals Feed',
608      value: '',
609      width: 80,
610      hdTDcls: 'hdTDClsLeft',
611      TDCls: 'TDClsRight',
612      cellCls: 'nameColumn',
613      hdCellCls: 'nameHeaderClass'
614    },
615    f11: {
616      name: 'Ask',
617      value: '',
618      width: 99,
619      hdTDcls: 'hdTDClsRight',
620      TDCls: 'TDClsRight',
621      cellCls: 'changeColumn',
622      hdCellCls: 'gridChangeHeader'
623    },
624    f14: {
625      name: '+/- $',
626      value: '',
627      width: 83,
628      hdTDcls: 'hdTDClsRight',
629      TDCls: 'TDClsRight',
630      cellCls: 'changeColumn',
631      hdCellCls: 'gridChangeHeader'
632    },
633    f15: {
634      name: '% Change',
635      value: '',
636      width: 83,
637      hdTDcls: 'hdTDClsRight',
638      TDCls: 'TDClsRight',
639      cellCls: 'changeColumn',
640      hdCellCls: 'gridChangeHeader'
641    }
642
643  }
644};
645
646jQuery( document ).ready(function($) {
647  if ($('.top-bar').length > 0) {
648    var QL = new NetDania.QL.renderQuoteList(NetDania.QL.Configuration);
649    $('.top-bar').on('click', function (e) {
650      e.preventDefault();
651      window.location = '/Spot-Price-Metal-Charts.html';
652    });
653  }
654});

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.