1var compareColorArray = ['#9370DB', '#F5F5DC', '#2E8B57', '#DDA0DD', '#5F9EA0', '#00FF7F', '#FFEBCD', '#B8860B', '#4682B4', '#00BFFF', '#800080', '#F5FFFA', '#FFEFD5', '#FFE4C4', '#000000', '#A9A9A9', '#CD853F', '#FFFFE0', '#E0FFFF', '#9932CC', '#9966CC', '#FFFFF0', '#00FFFF', '#FFFAFA', '#6A5ACD', '#FFE4E1', '#C0C0C0', '#32CD32', '#9ACD32', '#EEE8AA', '#696969', '#FFD700', '#7B68EE', '#D2691E', '#40E0D0', '#F0F8FF', '#F4A460', '#D8BFD8', '#E6E6FA', '#98FB98', '#191970', '#FF0000', '#006400', '#000080', '#FF7F50', '#ADFF2F', '#20B2AA', '#DA70D6', '#C71585', '#A52A2A']; 2var isSelected = 0; 3var columnTradeSelected = []; 4var objSelectedFiles = []; 5var articleInformation = []; 6 7window.dss_environment = 'staging'; 8const dss_database_url_development = 'http://localhost:30001'; 9const dss_database_url_staging = 'https://data-staging.tina.trade'; 10const dss_database_url_production = 'https://data.tina.trade'; 11 12const dss_database_url = (dss_environment === 'prod') ? dss_database_url_production : ((dss_environment === 'staging') ? dss_database_url_staging : dss_database_url_development); 13 14 15function prepareResources(){ 16 var o = `${dss_database_url}/compare/trade-resources`; 17 const locales = localStorage.getItem('lang') || 'en'; 18 $.ajax({
19 url: o, 20 type: "GET", 21 dataType: "json", 22 success: function (r) { 23 var _output = ''; 24 25 asyncLoop({ 26 length: r.length, 27 functionToLoop: function (loop, i) { 28 var _d = r[i]; 29 30 _output += '<div class="col-lg-12 col-md-12 col-sm-1" style="box-shadow: 0 0 13px 0 rgba(82,63,105,.05);border-radius: 4px; margin-bottom:20px; padding:20px">'; 31 _output += _d.IsVideo == 0 ? '<a href="' + _d.DownloadURL + '" target="_blank"><img class="img img-thumbnail float-left" style="width: 200px; margin-right:20px" src="' + _d.ImageURL + '"></a>' : '<iframe width="540" height="315" class="float-left" style="margin-right:20px" src="' + _d.DownloadURL + '" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>'; 32 _output += '<h6 class="' + (_d.IsVideo == 1 ? 'res-vid' : 'res-pub') + '" style="color: #0648a3 !important"> <a href="' + _d.DownloadURL + '" target="_blank">' + (locales==='fr'?_d.Title_fr:_d.Title) + '</a></h6>' 33 34 35 _output += '<div class="text-justify">'; 36 _output += locales==='fr'?_d.Short_Desc_fr.replace(/(?:\r\n|\r|\n)/g, '<br>'):_d.Short_Desc.replace(/(?:\r\n|\r|\n)/g, '<br>'); 37 _output += '</div>'; 38 39 _output += '</div>'; 40 _output += '<hr/>'; 41 42 loop();
43 }, 44 callback: function(){ 45 $('#dss_resources_result').html('<div class="row">' + _output + '</div>'); 46 } 47 }); 48 49 }, 50 error: function (e) { 51 dss_handle_major_error(e), show_error_message("TINA was unable to list relevant trade provisions because the database containing information on trade agreements could not be reached. If this problem persists, please contact us.", a), $("#" + a).addClass("loaded"), $("#" + a + "_loading").hide(), s.resolve([]) 52 $('#dss_table_trade_provision_agreeement_table').unblock(); 53 } 54 }); 55} 56 57function prepCompareEvents(){ 58 59 //buttons 60 $("button[id^='btn-gr-trade-count']").unbind('click').click(function(e){ 61 return e.preventDefault(), 62 function (e) { 63 showAllTradeFiltered(); 64 65 var _btnNumber = e.match(/\d+/g); 66 67 columnTradeSelected = $("td[data-col-trade='row-trade-" + _btnNumber + "'][data-col-trade-value!=1]"); 68 69 $("td[data-col-trade='row-trade-" + _btnNumber + "']").css('background-color','#ffed6f'); 70 71 for(var i = 0; i < columnTradeSelected.length; i++){ 72 $("th[data-trade-col-id='" + columnTradeSelected[i].getAttribute('data-trade-col-id') + "']").hide(); 73 $("td[data-trade-col-id='" + columnTradeSelected[i].getAttribute('data-trade-col-id') + "']").hide(); 74 } 75 76 var newColumnWidth = 500 + (columnTradeSelected.length * 100); 77 document.getElementById("dss_table_trade_provisions_agreements_result_table").style.width = newColumnWidth + "px"; 78 79 }($(this).attr('id')) 80 }); 81 82 $('#btn-compare-selected-agreements').unbind("click").click(function (e) { 83 return e.preventDefault(), 84 function (e) { 85 var ta_names = []; 86 var ta_prov = []; 87 for(var i=0; i < e.length; i++){ 88 ta_names.push($('#' + e[i].id).attr('data-trade-agreement-name')); 89 ta_prov.push(e[i].id.replace('chk_trade_','')); 90 } 91 92 //$('#dss_table_trade_agreements_result_comparison_popup_modal_provision').modal('show'); 93 94 }($('.chk-trade-class:checked')) 95 }); 96 97 $('#trade-reset-btn').unbind('click').click(function(e){ 98 showAllTradeFiltered(); 99 }); 100 101 $('.cls-similar').unbind("click").click(function(e){ 102 return e.preventDefault(), 103 function (e,f) { 104 objSelectedFiles = []; 105 var selectedFiles = $('td[data-col-trade="row-trade-' + e + '"][data-col-trade-value=1]'); 106 for(var i = 0; i < selectedFiles.length; i++){ 107 objSelectedFiles.push({ 108 filename : selectedFiles[i].getAttribute('data-col-trade-agreement-file'), 109 articleNumber : selectedFiles[i].getAttribute('data-col-trade-article') 110 }) 111 } 112 113 $('#dss_table_trade_comparison_agreements_result_popup_modal_title_provision').html(f); 114 $('#dss_table_trade_agreements_result_comparison_popup_modal_provision').modal('show'); 115 }($(this).attr("data-trade-row"),$(this).attr("data-trade-prov")) 116 }); 117 118 $('#dss_table_trade_agreements_result_comparison_popup_modal_provision').on('show.bs.modal', function () { 119 $('#loadingComparison').show(); 120 articleInformation = []; 121 $('#comparison-trade-text-body').html(''); 122 var fileList = ''; 123 //loop filenames 124 asyncLoop({ 125 length: objSelectedFiles.length, 126 functionToLoop: function (loop, i) { 127 fileList += '<span class="badge badge-pill" style="margin:5px;background:' + compareColorArray[i] + ';color:' + getContrast(compareColorArray[i]) + '">' + objSelectedFiles[i].filename + '</span>' 128 loop();
129 }, 130 callback: function(){ 131 $('#comparison-trade-text').html(fileList); 132 } 133 }); 134 135 $('#compare-status').html('Processing XML files...'); 136 //loop xml 137 asyncLoop({ 138 length: objSelectedFiles.length, 139 functionToLoop: function (loop, i) { 140 getXMLArticle(objSelectedFiles[i].filename, objSelectedFiles[i].articleNumber,compareColorArray[i]); 141 loop(); 142 }, 143 callback: function(){ 144 setTimeout(function(){ 145 var _uniqueArticle = articleInformation.map(item => item.articleNameLCase).filter((value, index, self) => self.indexOf(value) === index); 146 //Loop unique article 147 $('#compare-status').html('Grouping Article names...'); 148 groupSameArticle(_uniqueArticle); 149 }, 1000); 150 } 151 }); 152 }); 153} 154 155function groupSameArticle(uniqueArticle){ 156 var _htmlOut = ''; 157 158 asyncLoop({ 159 length: uniqueArticle.length, 160 functionToLoop: function (loop, i) { 161 var _filterArticle = articleInformation.filter(function(e) { 162 return e.articleNameLCase == uniqueArticle[i]; 163 }); 164 165 var _finalOutput = []; 166 for(var x = 0; x < _filterArticle.length; x++){ 167 _finalOutput.push({ 168 articleTxt : _filterArticle[x].innerArticle, 169 articleLngth : _filterArticle[x].innerArticle.split(' ').length, 170 articleBg : _filterArticle[x].bgColor, 171 articleTrade: _filterArticle[x].filename 172 }); 173 } 174 175 //sort descending 176 _finalOutput.sort((a,b)=>( a.articleLngth < b.articleLngth ? 1 : -1 )); 177 //if multiple filenames 178 var _isMultiple = _finalOutput.map(item => item.articleTrade).filter((value, index, self) => self.indexOf(value) === index).length > 1; 179 var _outputtxt = getCommonAndUncommon(_finalOutput, _isMultiple); 180 181 var _filenamesTxt = ''; 182 for(var zz = 0; zz < _filterArticle.length; zz++){ 183 _filenamesTxt += '<span class="badge badge-pill" style="margin:5px;background:' + _filterArticle[zz].bgColor + ';color:' + getContrast(_filterArticle[zz].bgColor) + '">' + _filterArticle[zz].filename + '</span>'; 184 } 185 186 _htmlOut += '<div class="card">'; 187 _htmlOut += '<div class="card-header" id="heading_' + i + '">'; 188 _htmlOut += '<h2 class="mb-0">';
189 _htmlOut += '<button class="btn btn-sm" id="btn_compare_trade_' + i + '" type="button" data-toggle="collapse" data-target="#CompareCollapse_' + i + '" aria-expanded="true" aria-controls="CompareCollapse_' + i + '" style="text-align: left;">'; 190 _htmlOut += ( _filterArticle.length > 1 ? '<div style="float: left;width: 5px;height: 5px;margin-top: 12px;margin-right: 5px;background-color: red;"></div>' : '') + _filterArticle[0].articleName + _filenamesTxt; 191 _htmlOut += '</button>'; 192 _htmlOut += '</h2>'; 193 _htmlOut += '</div>'; 194 _htmlOut += '<div id="CompareCollapse_' + i + '" class="collapse" aria-labelledby="heading_' + i + '" data-parent="#compareAccordion">'; 195 _htmlOut += '<div class="card-body" style="font-size: smaller;">'; 196 _htmlOut += _outputtxt; 197 _htmlOut += '<p><table class="table table-bordered table-hover table-sm" style="table-layout: fixed"><tr>'; 198 for(var zz = 0; zz < _finalOutput.length; zz++){ 199 _htmlOut += '<td>' + _finalOutput[zz].articleTxt + '</td>'; 200 } 201 _htmlOut += '</tr></table></p>'; 202 _htmlOut += '</div></div></div>'; 203 204 loop();
205 }, 206 callback: function(){ 207 setTimeout(function(){ 208 $('#loadingComparison').hide(); 209 var htmlCompare = '<div class="accordion" id="compareAccordion">'; 210 htmlCompare += _htmlOut; 211 htmlCompare += '</div>'; 212 $('#comparison-trade-text-body').html(htmlCompare); 213 }, 2000); 214 } 215 }); 216} 217 218//Process to group common words 219function getCommonAndUncommon(input,multiple){ 220 $('#compare-status').html('Comparing words per article...'); 221 222 //split first element 223 var compareFirst = input[0].articleTxt.split(' '); 224 var _retVal = []; 225 var dmp = new diff_match_patch(); 226 227 var firstCompare = input[0].articleTxt.trim(); 228 var diff = []; 229 230 var _diffObj = []; 231 var _comWords = []; 232 233 //diff using diff_patch 234 for(var x = 0; x < input.length-1; x++){ 235 diff = JsDiff["diffWords"](firstCompare,input[x+1].articleTxt.trim()); 236 237 var _subComWords = []; 238 for (var i=0; i < diff.length; i++) { 239 if (diff[i].added && diff[i + 1] && diff[i + 1].removed) { 240 var swap = diff[i]; 241 diff[i] = diff[i + 1]; 242 diff[i + 1] = swap; 243 } 244 245 diff[i].value = diff[i].value.trim(); 246 diff[i].bgColor = input[x].articleBg; 247 248 if(!diff[i].hasOwnProperty('added') && !diff[i].hasOwnProperty('removed')){ 249 if(_comWords.indexOf(diff[i].value) == -1){ 250 _comWords.push(diff[i].value); 251 } 252 } 253 } 254 255 firstCompare = diff.map(item=>item.value).join(' '); 256 _diffObj.push(diff); 257 } 258 259 //validate commonwords accross 260 var elem = 0; 261 while(typeof _comWords[elem] !== 'undefined' ){ 262 var _flag = true; 263 for(var y=0;y<input.length;y++){ 264 _flag = input[y].articleTxt.includes(_comWords[elem]); 265 if(!_flag){ _comWords = arrayRemove(_comWords, _comWords[elem]); break; } 266 } 267 268 if(_flag) elem++; 269 } 270 271 return splitPerCommon(_comWords, input, firstCompare); 272 273 //loop per word 274// for(var x = 0; x < compareFirst.length; x++){ 275// var _compareFrom = compareFirst[x].toLowerCase().replace(/\W/g, ''); 276// var _objComp = []; 277// 278// _objComp.push({ 279// wordLCase : _compareFrom, 280// word: compareFirst[x], 281// bgColor: input[0].articleBg 282// }); 283// 284// //compare per element/word 285// for(var y = 1; y < input.length; y++){ 286// var compareEach = input[y].articleTxt.split(' '); 287// 288// if(typeof compareEach[x] !== 'undefined') { 289// var _compareTo = compareEach[x].toLowerCase().replace(/\W/g, ''); 290// _objComp.push({ 291// wordLCase : _compareTo, 292// word: compareEach[x], 293// bgColor: input[y].articleBg 294// }); 295// } 296// else break; 297// } 298// 299// 300// //merge info 301// //1. find common word 302// var _res = allEqual(_objComp.map(item => item.wordLCase)); 303// var _uniqueWord = _objComp.map(item => item.wordLCase).filter((value, index, self) => self.indexOf(value) === index); 304// 305// if(_objComp.length>1){ 306// if(_res){ 307// _retVal.push(_objComp[0].word); 308// } 309// else if(_uniqueWord.length == 2){ 310// var _b = [ 311// { 312// word: _uniqueWord[0], 313// exactWord: _objComp.filter(function(e) { 314// return e.wordLCase == _uniqueWord[0]; 315// })[0].word, 316// ln: _objComp.filter(function(e) { 317// return e.wordLCase == _uniqueWord[0]; 318// }).length, 319// bgColor: _objComp.filter(function(e) { 320// return e.wordLCase == _uniqueWord[0]; 321// })[0].bgColor 322// }, 323// { 324// word: _uniqueWord[1], 325// ln: _objComp.filter(function(e) { 326// return e.wordLCase == _uniqueWord[1]; 327// }).length, 328// exactWord: _objComp.filter(function(e) { 329// return e.wordLCase == _uniqueWord[1]; 330// })[0].word, 331// bgColor: _objComp.filter(function(e) { 332// return e.wordLCase == _uniqueWord[1]; 333// })[0].bgColor 334// }];
335// 336// _b.sort((a,b)=>( a.ln < b.ln ? 1 : -1 )); 337// var _diff = _objComp.length - _b[0].ln; 338// 339// if(_diff == 1){ 340// _retVal.push(_b[0].exactWord); 341// _retVal.push('<span style="background:' + _b[1].bgColor + ';color:' + getContrast(_b[1].bgColor ) + '">' + _b[1].exactWord + '</span>'); 342// } 343// else{ 344// for(var z = 0; z < _objComp.length; z++){ 345// _retVal.push('<span style="background:' + _objComp[z].bgColor + ';color:' + getContrast(_objComp[z].bgColor) + '">' + _objComp[z].word + '</span>'); 346// } 347// } 348// //_retVal.push('<span style="background:' + _diffbg[0].bgColor + ';color:' + getContrast(_diffbg[0].bgColor) + '">' + _diffbg[0].word + '</span>'); 349// 350// } 351// else{ 352// for(var z = 0; z < _objComp.length; z++){ 353// _retVal.push('<span style="background:' + _objComp[z].bgColor + ';color:' + getContrast(_objComp[z].bgColor) + '">' + _objComp[z].word + '</span>'); 354// } 355// } 356// } 357// else{ 358// if(multiple){ 359// for(var z = 0; z < _objComp.length; z++){ 360// _retVal.push('<span style="background:' + _objComp[z].bgColor + ';color:' + getContrast(_objComp[z].bgColor) + '">' + _objComp[z].word + '</span>'); 361// } 362// } 363// else{ 364// _retVal.push(_objComp[0].word); 365// } 366// } 367// } 368 369 //return _retVal.join(' '); 370} 371 372const allEqual = arr => arr.every(val => val === arr[0]); 373 374function arrayRemove(arr, value) { 375 return arr.filter(function(ele){ 376 return ele != value; 377 }); 378} 379 380function splitPerCommon(commonword,input,merged){ 381 commonword.sort(function(a, b){return b.length - a.length}); 382 383 var _x = merged.split(' '); 384 var _u = []; 385 //mark common words - multiple phrase 386 for(var x = 0; x < commonword.length; x++){ 387 if(commonword[x]=='') continue; 388 else if(commonword[x].length == 1) continue; 389 else if(commonword[x].split(' ').length == 1 ) continue; 390 merged = merged.split(commonword[x] + ' ').join('|*' + commonword[x].replaceAll(' ', '*') + '*|'); 391 } 392 393 var _splitPerUnique = merged.split('|'); 394 var _finalMerged = []; 395 396 var _v = new Array(input.length); 397 398 //clean 399 for(var z=0; z < _splitPerUnique.length; z++){ 400 var _s = _splitPerUnique[z].trim(); 401 402 if(_s == '') continue; 403 if(_s.startsWith('*') && _s.endsWith('*')) _finalMerged.push(_s.replace(/\*/g, ' ').trim()); 404 405 else{ 406 //search if included 407 var _f = _s.split(' '); 408 for(y = 0; y < _f.length; y++){ 409 var _u = _f[y].trim(); 410 if(_u.trim() == '') continue; 411 412 for(var x = 0; x < input.length; x++){ 413 var _in = input[x].articleTxt.trim(); 414 var _bg = input[x].articleBg; 415 416 var _locate = _in.split(' ').indexOf(_u, typeof _v[x] == 'undefined' ? 0 : _v[x] + 1); 417 if(_locate > -1){ 418 _finalMerged.push('<span style="background:' + _bg + ';color:' + getContrast(_bg) + '">' + _u + '</span>'); 419 _v[x] = _locate; 420 } 421 } 422 } 423 } 424 } 425 426 return _finalMerged.join(' '); 427} 428 429function getXMLArticle(xmlpath, chapterNumber, bg){ 430 431 var reqXML = new XMLHttpRequest(); 432 reqXML.open("GET", 'http://localhost:8888/CompareText/app/data/trade-agreement-xml/' + xmlpath + '.xml', true); 433 reqXML.responseType = 'document'; 434 reqXML.overrideMimeType('text/xml'); 435 436 reqXML.onload = function () {
437 if (reqXML.readyState === reqXML.DONE) { 438 if (reqXML.status === 200) { 439 var loopArticle = reqXML.responseXML.getElementsByTagName('body')[0].getElementsByTagName('chapter'); 440 for(var i = 0; i < loopArticle.length; i++){ 441 var _chapterNumber = loopArticle[i].attributes['chapter_identifier'].nodeValue; 442 if(_chapterNumber == chapterNumber){ 443 var _articles = loopArticle[i].getElementsByTagName('article'); 444 for(var x = 0; x < _articles.length; x++ ){ 445 var _number = _articles[x].attributes['number'].nodeValue; 446 var _name = _articles[x].attributes['name'].nodeValue; 447 var _innerHtml = _articles[x].innerHTML; 448 449 articleInformation.push({ 450 filename: xmlpath, 451 article: _number.replace(/\s\s+/g, ' ').replace(/(\r\n|\n|\r)/gm, " "), 452 articleName: _name.replace(/\s\s+/g, ' ').replace(/(\r\n|\n|\r)/gm, " "), 453 articleNameLCase: _name.replace(/\s\s+/g, ' ').replace(/(\r\n|\n|\r)/gm, " ").toLowerCase().replace(/[^A-Za-z]+/g, ''), 454 innerArticle: _innerHtml.replace(/\s\s+/g, ' ').replace(/(\r\n|\n|\r)/gm, " "), 455 bgColor: bg 456 }); 457 } 458 } 459 } 460 } 461 } 462 }; 463 464 reqXML.send(null); 465} 466 467function showAllTradeFiltered(){ 468 $("td[data-col-trade^='row-trade']").css('background-color','transparent'); 469 $('#dss_table_trade_provisions_agreements_result_table th').show(); 470 $('#dss_table_trade_provisions_agreements_result_table td').show(); 471 472 var newColumnWidth = 500 + (columnTradeSelected.length * 100); 473 document.getElementById("dss_table_trade_provisions_agreements_result_table").style.width = newColumnWidth + "px"; 474} 475 476//Read XML File 477function getXML(xmlpath) { 478 $('#dss_table_trade_xml_loading').show(); 479 $("#dss_table_trade_xml_loading_error").hide(); 480 $("#inp_trade_search").show(); 481 $("#sm_trade_search").show(); 482 483 $('#dss_table_status_table_trade_agreement').html(''); 484 $('#dss_table_composition_table_trade_agreement').html(''); 485 $('#dss_trade_xml_holder').html(''); 486 $('#dss_table_implemdate_table_trade_agreement').html(''); 487 488 dss_trade_agreement_contents = new Array(); 489 490 var reqXML = new XMLHttpRequest(); 491 reqXML.open("GET", 'http://localhost:8888/CompareText/app/data/trade-agreement-xml/' + xmlpath + '.xml', true); 492 reqXML.responseType = 'document'; 493 reqXML.overrideMimeType('text/xml'); 494 495 reqXML.onload = function () {
496 if (reqXML.readyState === reqXML.DONE) { 497 if (reqXML.status === 200) { 498 var loopArticle = reqXML.responseXML.getElementsByTagName('body')[0].getElementsByTagName('chapter'); 499 var taType = reqXML.responseXML.getElementsByTagName('meta')[0].getElementsByTagName('status'); 500 var taCompo = reqXML.responseXML.getElementsByTagName('meta')[0].getElementsByTagName('composition'); 501 var taImplemDate = reqXML.responseXML.getElementsByTagName('meta')[0].getElementsByTagName('end_implementation'); 502 503 var isocodes = reqXML.responseXML.getElementsByTagName('meta')[0].getElementsByTagName('partyisocode'); 504 var isocde = []; 505 506 asyncLoop({ 507 length: isocodes.length, 508 functionToLoop: function (loop, i) { 509 isocde.push(isocodes[i].innerHTML); 510 loop(); 511 }, 512 callback: function(){ 513 var econFlags = ''; 514 isocde.forEach(function(g){ 515 if(g!='') econFlags += '<span data-toggle="kt-tooltip" data-placement="top" title="' + String(dss_economies_by_iso3[g]) + '" class="kt-margin-r-5 flag-icon flag-icon-' + String(dss_economies_iso2_by_iso3[g]).toLowerCase() + '" data-original-title="' + String(dss_economies_by_iso3[g]) + '"></span>'; 516 }); 517 $('#dss_table_economies_table_trade').html(econFlags); 518 } 519 }); 520 521 var taAccordion = '<div class="accordion" id="tradeAgreementAccordion_res">'; 522 523 asyncLoop({ 524 length: loopArticle.length, 525 functionToLoop: function (loop, i) { 526 var _artCnt = loopArticle[i].getElementsByTagName('article'); 527 528 var _artName = loopArticle[i].attributes['name'].nodeValue; 529 var _artNumber = loopArticle[i].attributes['number'].nodeValue; 530 var _artInnerHtml = loopArticle[i].innerHTML; 531 532 taAccordion += '<div class="card" id="div_hdr_ta_' + i + '">'; 533 taAccordion += '<div class="card-header" id="heading_trade_' + i + '">'; 534 taAccordion += '<h2 class="mb-0">'; 535 taAccordion += '<button class="btn" id="btn_trade_' + i + '" type="button" data-toggle="collapse" data-target="#collapse_' + i + '" aria-expanded="true" aria-controls="collapse_' + i + '">'; 536 taAccordion += _artNumber == '-' ? _artName : _artNumber + ' - ' + _artName ; 537 taAccordion += '</button>'; 538 taAccordion += '</h2>'; 539 taAccordion += '</div>'; 540 taAccordion += '<div id="collapse_' + i + '" class="collapse" aria-labelledby="heading_' + i + '" data-parent="#tradeAgreementAccordion_res">'; 541 taAccordion += '<div class="card-body" id="cb_trade_' + i + '">'; 542 543 //loop articles 544 for(var x = 0; x < _artCnt.length; x++){ 545 var _artSubInnerHtml = _artCnt[x].innerHTML; 546 var _artSubName = _artCnt[x].attributes['name'].nodeValue; 547 var _artSubNumber = _artCnt[x].attributes['number'].nodeValue; 548 549 taAccordion += '<div class="card" id="div_subhdr_ta_' + i + '_' + x + '">'; 550 taAccordion += '<div class="card-header" id="sub_heading_trade_' + i + '_' + x + '">'; 551 taAccordion += '<h2 class="mb-0">'; 552 taAccordion += '<button class="btn" id="btn_subtrade_' + i + '_' + x + '" type="button" data-toggle="collapse" data-target="#collapse_' + i + '_' + x + '" aria-expanded="true" aria-controls="collapse_' + i + '_' + x + '">'; 553 taAccordion += _artSubNumber == '-' ? _artSubName : _artSubNumber + ' - ' + _artSubName ; 554 taAccordion += '</button>'; 555 taAccordion += '</h2>'; 556 taAccordion += '</div>'; 557 taAccordion += '<div id="collapse_' + i + '_' + x + '" class="card-body collapse" aria-labelledby="subheading_' + i + '_' + x + '" data-parent="#cb_trade_' + i + '">'; 558 taAccordion += _artSubInnerHtml.replace(/(?:\r\n|\r|\n)/g, ''); 559 taAccordion += '</div>'; 560 taAccordion += '</div>'; 561 } 562 563 taAccordion += '</div>'; 564 taAccordion += '</div>'; 565 taAccordion += '</div>'; 566 567 loop();
568 }, 569 callback: function(){ 570 taAccordion += '</div>'; 571 572 $('#dss_table_status_table_trade_agreement').html(taType); 573 $('#dss_table_composition_table_trade_agreement').html(taCompo); 574 $('#dss_trade_xml_holder').html(taAccordion); 575 $('#dss_table_implemdate_table_trade_agreement').html(taImplemDate); 576 } 577 }); 578 } 579 else{ 580 $("#dss_table_trade_xml_loading_error").show(); 581 $("#inp_trade_search").hide(); 582 $("#sm_trade_search").hide(); 583 } 584 } 585 586 $('#dss_table_trade_xml_loading').hide(); 587 }; 588 reqXML.send(null); 589} 590 591var getContrast = function (hexcolor){ 592 593 // If a leading # is provided, remove it 594 if (hexcolor.slice(0, 1) === '#') { 595 hexcolor = hexcolor.slice(1); 596 } 597 598 // If a three-character hexcode, make six-character 599 if (hexcolor.length === 3) { 600 hexcolor = hexcolor.split('').map(function (hex) { 601 return hex + hex; 602 }).join(''); 603 } 604 605 // Convert to RGB value 606 var r = parseInt(hexcolor.substr(0,2),16); 607 var g = parseInt(hexcolor.substr(2,2),16); 608 var b = parseInt(hexcolor.substr(4,2),16); 609 610 // Get YIQ ratio 611 var yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000; 612 613 // Check contrast 614 return (yiq >= 128) ? 'black' : 'white'; 615 616}; 617 618//Rate similarity 619function similar_text(first, second) { 620 // Calculates the similarity between two strings 621 // discuss at: http://phpjs.org/functions/similar_text 622 623 if (first === null || second === null || typeof first === 'undefined' || typeof second === 'undefined') { 624 return 0; 625 } 626 627 first += ''; 628 second += ''; 629 630 var pos1 = 0, 631 pos2 = 0, 632 max = 0, 633 firstLength = first.length, 634 secondLength = second.length, 635 p, q, l, sum; 636 637 max = 0; 638 639 for (p = 0; p < firstLength; p++) { 640 for (q = 0; q < secondLength; q++) { 641 for (l = 0; 642 (p + l < firstLength) && (q + l < secondLength) && (first.charAt(p + l) === second.charAt(q + l)); l++); 643 if (l > max) { 644 max = l; 645 pos1 = p; 646 pos2 = q; 647 } 648 } 649 } 650 651 sum = max; 652 653 if (sum) { 654 if (pos1 && pos2) { 655 sum += this.similar_text(first.substr(0, pos2), second.substr(0, pos2)); 656 } 657 658 if ((pos1 + max < firstLength) && (pos2 + max < secondLength)) { 659 sum += this.similar_text(first.substr(pos1 + max, firstLength - pos1 - max), second.substr(pos2 + max, secondLength - pos2 - max)); 660 } 661 } 662 663 return sum; 664} 665 666function Compare(strA,strB){ 667 for(var result = 0, i = strA.length; i--;){ 668 if(typeof strB[i] == 'undefined' || strA[i] == strB[i]); 669 else if(strA[i].toLowerCase() == strB[i].toLowerCase()) 670 result++; 671 else 672 result += 4; 673 } 674 return 1 - (result + 4*Math.abs(strA.length - strB.length))/(2*(strA.length+strB.length)); 675} 676 677function removeDuplicates(myArr, prop) { 678 return myArr.filter((obj, pos, arr) => { 679 return arr.map(mapObj => mapObj[prop]).indexOf(obj[prop]) === pos; 680 }); 681} 682 683function add(test, key, value) { 684 if (!test[key]) { 685 // Create 1-element array with this value. 686 test[key] = [value]; 687 } 688 else { 689 // Append element to existing array. 690 test[key].push(value); 691 } 692} 693 694var asyncLoop = function (o) { 695 var i = -1, length = o.length; 696 697 var loop = function () { 698 i++; 699 if (i == length) { o.callback(); return; } 700 o.functionToLoop(loop, i); 701 } 702 loop();//init 703}
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.