1var strAge = $("#hdnAgeText").val(); 2var strDateTime = $("#hdnDateTimeText").val(); 3var strDateTimeLocal = "Date Time (Local)"; 4var strDateTimeLocalShort = "Local"; 5var strSiteName = $("#hdnSiteName").val(); 6 7var strAgeTitle = $("#hdnAgeTitle").val(); 8var strDateTimeTitle = $("#hdnDateTimeTitle").val(); 9 10var ageClass = ".showAge"; 11var dateTimeClass = ".showDate"; 12var localDateTimeClass = ".showLocalDate" 13var localDateTimeNFTClass = ".showLocalDateNFT" 14var offsetHoursFinal; 15 16var strTxnFee = $("#hdnTxnText").val(); 17var strGasPrice = $("#hdnGasPriceText").val(); 18 19function checkAdBlock() { 20 var element = document.createElement("div"); 21 element.id = "checkAdBlock" 22 element.className = "banner_ad"; 23 element.style.width = "0.5px"; 24 document.body.appendChild(element); 25 if ($("#checkAdBlock").width() > 0) { 26 return false; 27 } else { 28 return true; 29 } 30} 31 32function setAgeDateTimeCookie(strValue) { 33 var d = new Date(); 34 d.setFullYear(d.getFullYear() + 1); 35 var expires = "expires=" + d.toUTCString(); 36 document.cookie = strSiteName + "_switch_age_datetime=" + strValue + ";" + expires + ";path=/"; 37} 38 39function onDocumentReady(isDataTable, isShortText) { 40 if (isShortText) { 41 strDateTime = "UTC" 42 } 43 44 if (strGlobal == "" || strGlobal == strAge) { 45 $("#lnkAgeDateTime").text(strAge); 46 $("#lnkAgeDateTime").attr("title", strDateTimeTitle); 47 $(dateTimeClass).hide(); 48 //check display UTC or Local datetime 49 convertUtcToLocalDateTime(); 50 $(ageClass).show(); 51 } 52 else if (strGlobal == strDateTime) { 53 $("#lnkAgeDateTime").text(strDateTime); 54 $("#lnkAgeDateTime").attr("title", strAgeTitle); 55 $(ageClass).hide(); 56 $(dateTimeClass).show(); 57 //check display UTC or Local datetime 58 convertUtcToLocalDateTime(); 59 //show UTC with timezone on column header 60 if (offsetHoursFinal !== undefined) { 61 $("#lnkAgeDateTime").text(strDateTimeLocal); 62 } 63 } 64 65 if (strGlobalFee == null || strGlobalFee == "null" || strGlobalFee == strTxnFee) { 66 $(".switch-txn-fee-gas-price").text(strTxnFee); 67 $(".switch-txn-fee-gas-price").attr("title", $("#hdnTxnFeeTitle").val()); 68 $(".showTxnFee").show(); 69 $(".showGasPrice").hide(); 70 } else if (strGlobalFee == strGasPrice) { 71 $(".switch-txn-fee-gas-price").text(strGasPrice); 72 $(".switch-txn-fee-gas-price").attr("title", $("#hdnGasPriceTitle").val()); 73 $(".showTxnFee").hide(); 74 $(".showGasPrice").show(); 75 } 76 77 if (strGlobalSlotEpoch == null || strGlobalSlotEpoch == "null" || strGlobalSlotEpoch == "Slot") { 78 $(".switch-slot-epoch").text("Slot"); 79 $(".switch-slot-epoch").attr("title", "Click to show Epoch"); 80 $(".switch-slot-epoch").attr("data-bs-title", "Click to show Epoch"); 81 $(".showSlotNumber").show(); 82 $(".showEpochNumber").hide(); 83 } else if (strGlobalSlotEpoch == "Epoch") { 84 $(".switch-slot-epoch").text("Epoch"); 85 $(".switch-slot-epoch").attr("title", "Click to show Slot"); 86 $(".switch-slot-epoch").attr("data-bs-title", "Click to show Slot"); 87 $(".showSlotNumber").hide(); 88 $(".showEpochNumber").show(); 89 } 90 91 if (!isDataTable) { 92 renderFnTooltip($("#lnkAgeDateTime"), 0); 93 renderFnTooltip($(".switch-txn-fee-gas-price"), 0); 94 renderFnTooltip($(".switch-slot-epoch"), 0); 95 } 96} 97 98function onDateAgeDocumentReady(opts) { 99 strGlobal = getCookie(strSiteName + "_switch_age_datetime"); 100 var el = $(".hc_lnkAgeDateTime") 101 var customAgeText = strAge 102 var customDateTime = strDateTime 103 104 if (typeof opts !== 'undefined') { 105 if (opts.el) { 106 el = $(opts.el) 107 } 108 109 if (opts.customAgeText) { 110 customAgeText = opts.customAgeText 111 } 112 if (opts.customDateTime) { 113 customDateTime = opts.customDateTime 114 } 115 } 116 117 if (strGlobal == "" || strGlobal == strAge) { 118 el.text(customAgeText); 119 el.attr("title", strDateTimeTitle); 120 $(dateTimeClass).hide(); 121 //check display UTC or Local datetime 122 convertUtcToLocalDateTime(); 123 $(ageClass).show(); 124 } 125 else if (strGlobal == strDateTime) { 126 el.text(customDateTime); 127 el.attr("title", strAgeTitle); 128 $(ageClass).hide(); 129 130 //check display UTC or Local datetime 131 convertUtcToLocalDateTime(); 132 //show UTC with timezone on column header 133 if (offsetHoursFinal !== undefined) { 134 el.text(strDateTimeLocal); 135 } 136 137 $(dateTimeClass).show(); 138 } 139 140 renderFnTooltip(el, 0) 141} 142 143function switchAgeToDateTime(data) { 144 145 disposeFnTooltip($("#" + data.id)) 146 147 var strVal = $("#" + data.id).text(); 148 if (strVal == strAge) { 149 $("#" + data.id).text(strDateTime); 150 $("#" + data.id).attr("title", strAgeTitle); 151 $(dateTimeClass).show(); 152 153 //check display UTC or Local datetime 154 convertUtcToLocalDateTime(); 155 //show UTC with timezone on column header 156 if (offsetHoursFinal !== undefined) { 157 $("#" + data.id).text(strDateTimeLocal); 158 } 159 160 $(ageClass).hide(); 161 setAgeDateTimeCookie(strDateTime); 162 } 163 else if (strVal == strDateTime || strVal == strDateTimeLocal) { 164 $("#" + data.id).text(strAge); 165 $("#" + data.id).attr("title", strDateTimeTitle); 166 $(dateTimeClass).hide(); 167 $(ageClass).show(); 168 setAgeDateTimeCookie(strAge); 169 } 170 171 renderFnTooltip($("#" + data.id), 1) 172} 173 174function switchAgeToDateTimeV2(self, opts) { 175 var strVal = $("#" + self.id).text(); 176 var el = self ? $(self) : $(".hc_lnkAgeDateTime") 177 disposeFnTooltip(el) 178 179 var customAgeText = strAge 180 var customDateTime = strDateTime 181 var elParent = "" 182 var elChild = "" 183 184 if (typeof opts !== 'undefined') { 185 if (opts.el) { 186 el = $(opts.el) 187 } 188 if (opts.customAgeText) { 189 customAgeText = opts.customAgeText 190 } 191 if (opts.customDateTime) { 192 customDateTime = opts.customDateTime 193 } 194 if (opts.elParent) { 195 elParent = opts.elParent 196 } 197 if (opts.elParent) { 198 elChild = opts.elChild 199 } 200 } 201 if (strVal == customAgeText) { 202 el.text(customDateTime); 203 el.attr("title", strAgeTitle); 204 $(dateTimeClass).show(); 205 206 //check display UTC or Local datetime 207 convertUtcToLocalDateTime(); 208 //show UTC with timezone on column header 209 if (offsetHoursFinal !== undefined) { 210 el.text(strDateTimeLocal); 211 } 212 213 $(ageClass).hide(); 214 setAgeDateTimeCookie(strDateTime); 215 } 216 else if (strVal == customDateTime || strVal == strDateTimeLocal) { 217 el.text(customAgeText); 218 el.attr("title", strDateTimeTitle); 219 $(dateTimeClass).hide(); 220 $(ageClass).show(); 221 setAgeDateTimeCookie(strAge); 222 } 223 224 renderFnTooltip(el, 1) 225} 226 227function onAddressDocReady() { 228 if (strGlobal == "" || strGlobal == strAge) { 229 $("#lnkTxAgeDateTime").text(strAge); 230 $("#lnkTxAgeDateTime").attr("title", strDateTimeTitle); 231 $("#lnkIntAgeDateTime").text(strAge); 232 $("#lnkIntAgeDateTime").attr("title", strDateTimeTitle); 233 $("#lnkMinBlkAgeDateTime").text(strAge); 234 $("#lnkMinBlkAgeDateTime").attr("title", strDateTimeTitle); 235 $("#lnkMinUncAgeDateTime").text(strAge); 236 $("#lnkMinUncAgeDateTime").attr("title", strDateTimeTitle); 237 $("#lnkWithBlkAgeDateTime").text(strAge); 238 $("#lnkWithBlkAgeDateTime").attr("title", strDateTimeTitle); 239 $("#lnkDepositBlkAgeDateTime").text(strAge); 240 $("#lnkDepositBlkAgeDateTime").attr("title", strDateTimeTitle); 241 $("#hdnErc20").val(strAge); 242 $(dateTimeClass).attr("style", "display:none !important"); 243 $(ageClass).show(); 244 } 245 else if (strGlobal == strDateTime) { 246 $("#lnkTxAgeDateTime").text(strDateTime); 247 $("#lnkTxAgeDateTime").attr("title", strAgeTitle); 248 $("#lnkIntAgeDateTime").text(strDateTime); 249 $("#lnkIntAgeDateTime").attr("title", strAgeTitle); 250 $("#lnkMinBlkAgeDateTime").text(strDateTime); 251 $("#lnkMinBlkAgeDateTime").attr("title", strAgeTitle); 252 $("#lnkMinUncAgeDateTime").text(strDateTime); 253 $("#lnkMinUncAgeDateTime").attr("title", strAgeTitle); 254 $("#lnkWithBlkAgeDateTime").text(strDateTime); 255 $("#lnkWithBlkAgeDateTime").attr("title", strAgeTitle); 256 $("#lnkDepositBlkAgeDateTime").text(strDateTime); 257 $("#lnkDeposithBlkAgeDateTime").attr("title", strAgeTitle); 258 $("#hdnErc20").val(strDateTime); 259 $(ageClass).attr("style", "display:none !important"); 260 $(dateTimeClass).show(); 261 262 //check display UTC or Local datetime 263 convertUtcToLocalDateTime(); 264 //show UTC with timezone on column header 265 if (offsetHoursFinal !== undefined) { 266 $("#lnkTxAgeDateTime").text(strDateTimeLocal); 267 $("#lnkIntAgeDateTime").text(strDateTimeLocal); 268 $("#lnkMinBlkAgeDateTime").text(strDateTimeLocal); 269 $("#lnkWithBlkAgeDateTime").text(strDateTimeLocal); 270 $("#lnkDepositBlkAgeDateTime").text(strDateTimeLocal); 271 } 272 } 273 274 renderFnTooltip($("#lnkTxAgeDateTime"), 0) 275 renderFnTooltip($("#lnkIntAgeDateTime"), 0) 276 renderFnTooltip($("#lnkMinBlkAgeDateTime"), 0) 277 renderFnTooltip($("#lnkMinUncAgeDateTime"), 0) 278 renderFnTooltip($("#lnkWithBlkAgeDateTime"), 0) 279 renderFnTooltip($("#lnkDepositBlkAgeDateTime"), 0) 280} 281 282function switchAgeToDateTimeInAddPage(data) { 283 disposeFnTooltip($("#lnkTxAgeDateTime")) 284 disposeFnTooltip($("#lnkIntAgeDateTime")) 285 disposeFnTooltip($("#lnkMinBlkAgeDateTime")) 286 disposeFnTooltip($("#lnkMinUncAgeDateTime")) 287 disposeFnTooltip($("#lnkWithBlkAgeDateTime")) 288 disposeFnTooltip($("#lnkDepositBlkAgeDateTime")) 289 290 var strVal = $("#" + data.id).text(); 291 if (strVal == strAge) { 292 $("#lnkTxAgeDateTime").text(strDateTime); 293 $("#lnkTxAgeDateTime").attr("title", strAgeTitle); 294 $("#lnkIntAgeDateTime").text(strDateTime); 295 $("#lnkIntAgeDateTime").attr("title", strAgeTitle); 296 $("#lnkMinBlkAgeDateTime").text(strDateTime); 297 $("#lnkMinBlkAgeDateTime").attr("title", strAgeTitle); 298 $("#lnkMinUncAgeDateTime").text(strDateTime); 299 $("#lnkMinUncAgeDateTime").attr("title", strAgeTitle); 300 $("#lnkWithBlkAgeDateTime").text(strDateTime); 301 $("#lnkWithBlkAgeDateTime").attr("title", strAgeTitle); 302 $("#lnkDepositBlkAgeDateTime").text(strDateTime); 303 $("#lnkDepositBlkAgeDateTime").attr("title", strAgeTitle); 304 $("#hdnErc20").val(strDateTime); 305 $(dateTimeClass).show(); 306 $(ageClass).attr("style", "display:none !important"); 307 setAgeDateTimeCookie(strDateTime); 308 309 //check display UTC or Local datetime 310 convertUtcToLocalDateTime(); 311 //show UTC with timezone on column header 312 if (offsetHoursFinal !== undefined) { 313 $("#lnkTxAgeDateTime").text(strDateTimeLocal); 314 $("#lnkIntAgeDateTime").text(strDateTimeLocal); 315 $("#lnkMinBlkAgeDateTime").text(strDateTimeLocal); 316 $("#lnkWithBlkAgeDateTime").text(strDateTimeLocal); 317 $("#lnkDepositBlkAgeDateTime").text(strDateTimeLocal); 318 } 319 320 if (document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime') != null) { 321 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').text = strDateTime; 322 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').title = strAgeTitle; 323 $("#tokenpageiframe").contents().find(dateTimeClass).show(); 324 $("#tokenpageiframe").contents().find(ageClass).hide(); 325 } 326 327 //if (document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime') != null) { 328 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').text = strDateTime; 329 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').title = strAgeTitle; 330 // $("#tokenerc721_pageiframe").contents().find(dateTimeClass).show(); 331 // $("#tokenerc721_pageiframe").contents().find(ageClass).hide(); 332 //} 333 334 //if (document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime') != null) { 335 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').text = strDateTime; 336 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').title = strAgeTitle; 337 // $("#tokenerc1155_pageiframe").contents().find(dateTimeClass).show(); 338 // $("#tokenerc1155_pageiframe").contents().find(ageClass).hide(); 339 //} 340 341 if (document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime') != null) { 342 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').text = strDateTime; 343 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').title = strAgeTitle; 344 $("#loans_pageiframe").contents().find(dateTimeClass).show(); 345 $("#loans_pageiframe").contents().find(ageClass).hide(); 346 } 347 } 348 else if (strVal == strDateTime || strVal == strDateTimeLocal) { 349 $("#lnkTxAgeDateTime").text(strAge); 350 $("#lnkTxAgeDateTime").attr("title", strDateTimeTitle); 351 $("#lnkIntAgeDateTime").text(strAge); 352 $("#lnkIntAgeDateTime").attr("title", strDateTimeTitle); 353 $("#lnkMinBlkAgeDateTime").text(strAge); 354 $("#lnkMinBlkAgeDateTime").attr("title", strDateTimeTitle); 355 $("#lnkMinUncAgeDateTime").text(strAge); 356 $("#lnkMinUncAgeDateTime").attr("title", strDateTimeTitle); 357 $("#lnkWithBlkAgeDateTime").text(strAge); 358 $("#lnkWithBlkAgeDateTime").attr("title", strDateTimeTitle); 359 $("#lnkDepositBlkAgeDateTime").text(strAge); 360 $("#lnkDepositBlkAgeDateTime").attr("title", strDateTimeTitle); 361 $("#hdnErc20").val(strAge); 362 $(dateTimeClass).attr("style", "display:none !important"); 363 $(ageClass).show(); 364 setAgeDateTimeCookie(strAge); 365 366 if (document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime') != null) { 367 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').text = strAge; 368 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').title = strDateTimeTitle; 369 $("#tokenpageiframe").contents().find(dateTimeClass).hide(); 370 $("#tokenpageiframe").contents().find(ageClass).show(); 371 } 372 373 //if (document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime') != null) { 374 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').text = strAge; 375 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').title = strDateTimeTitle; 376 // $("#tokenerc721_pageiframe").contents().find(dateTimeClass).hide(); 377 // $("#tokenerc721_pageiframe").contents().find(ageClass).show(); 378 //} 379 380 //if (document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime') != nu
380ll) { 381 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').text = strAge; 382 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').title = strDateTimeTitle; 383 // $("#tokenerc1155_pageiframe").contents().find(dateTimeClass).hide(); 384 // $("#tokenerc1155_pageiframe").contents().find(ageClass).show(); 385 //} 386 387 if (document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime') != null) { 388 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').text = strAge; 389 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').title = strDateTimeTitle; 390 $("#loans_pageiframe").contents().find(dateTimeClass).hide(); 391 $("#loans_pageiframe").contents().find(ageClass).show(); 392 } 393 } 394 395 renderFnTooltip($("#lnkTxAgeDateTime"), (data.id === "lnkTxAgeDateTime" ? 1 : 0)) 396 renderFnTooltip($("#lnkIntAgeDateTime"), (data.id === "lnkIntAgeDateTime" ? 1 : 0)) 397 renderFnTooltip($("#lnkMinBlkAgeDateTime"), (data.id === "lnkMinBlkAgeDateTime" ? 1 : 0)) 398 renderFnTooltip($("#lnkMinUncAgeDateTime"), (data.id === "lnkMinUncAgeDateTime" ? 1 : 0)) 399 renderFnTooltip($("#lnkWithBlkAgeDateTime"), (data.id === "lnkWithBlkAgeDateTime" ? 1 : 0)) 400 renderFnTooltip($("#lnkDepositBlkAgeDateTime"), (data.id === "lnkDepositBlkAgeDateTime" ? 1 : 0)) 401} 402 403function setGlobalValue(data) { 404 var strVal = $("#" + data.id).val(); 405 if (strVal == "" || strVal == strAge) { 406 setAgeDateTimeCookie(strAge); 407 switchAgeDateTimeFromIframe(data); 408 } 409 else if (strVal == strDateTime) { 410 setAgeDateTimeCookie(strDateTime); 411 switchAgeDateTimeFromIframe(data); 412 } 413} 414 415function switchAgeDateTimeFromIframe(data) { 416 disposeFnTooltip($("#lnkTxAgeDateTime")) 417 disposeFnTooltip($("#lnkIntAgeDateTime")) 418 disposeFnTooltip($("#lnkMinBlkAgeDateTime")) 419 disposeFnTooltip($("#lnkMinUncAgeDateTime")) 420 disposeFnTooltip($("#lnkWithBlkAgeDateTime")) 421 disposeFnTooltip($("#lnkDepositBlkAgeDateTime")) 422 423 var strVal = $("#" + data.id).val(); 424 if (strVal == strDateTime) { 425 $("#lnkTxAgeDateTime").text(strDateTime); 426 $("#lnkTxAgeDateTime").attr("title", strAgeTitle); 427 $("#lnkIntAgeDateTime").text(strDateTime); 428 $("#lnkIntAgeDateTime").attr("title", strAgeTitle); 429 $("#lnkMinBlkAgeDateTime").text(strDateTime); 430 $("#lnkMinBlkAgeDateTime").attr("title", strAgeTitle); 431 $("#lnkMinUncAgeDateTime").text(strDateTime); 432 $("#lnkMinUncAgeDateTime").attr("title", strAgeTitle); 433 $("#lnkWithBlkAgeDateTime").text(strDateTime); 434 $("#lnkWithBlkAgeDateTime").attr("title", strAgeTitle); 435 $("#lnkDepositBlkAgeDateTime").text(strDateTime); 436 $("#lnkDepositBlkAgeDateTime").attr("title", strAgeTitle); 437 $(dateTimeClass).show(); 438 439 $(ageClass).attr("style", "display:none !important"); 440 441 if (document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime') != null) { 442 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').text = strDateTime; 443 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').title = strAgeTitle; 444 $("#tokenpageiframe").contents().find(dateTimeClass).show(); 445 $("#tokenpageiframe").contents().find(ageClass).hide(); 446 447 //check display UTC or Local datetime 448 convertUtcToLocalDateTime(); 449 //show UTC with timezone on column header 450 if (offsetHoursFinal !== undefined) { 451 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').text = strDateTimeLocal; 452 } 453 } 454 455 //if (document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime') != null) { 456 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').text = strDateTime; 457 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').title = strAgeTitle; 458 // $("#tokenerc721_pageiframe").contents().find(dateTimeClass).show(); 459 // $("#tokenerc721_pageiframe").contents().find(ageClass).hide(); 460 //} 461 462 //if (document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime') != null) { 463 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').text = strDateTime; 464 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').title = strAgeTitle; 465 // $("#tokenerc1155_pageiframe").contents().find(dateTimeClass).show(); 466 // $("#tokenerc1155_pageiframe").contents().find(ageClass).hide(); 467 //} 468 469 if (document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime') != null) { 470 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').text = strDateTime; 471 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').title = strAgeTitle; 472 $("#loans_pageiframe").contents().find(dateTimeClass).show(); 473 $("#loans_pageiframe").contents().find(ageClass).hide(); 474 } 475 } 476 else if (strVal == strAge) { 477 $("#lnkTxAgeDateTime").text(strAge); 478 $("#lnkTxAgeDateTime").attr("title", strDateTimeTitle); 479 $("#lnkIntAgeDateTime").text(strAge); 480 $("#lnkIntAgeDateTime").attr("title", strDateTimeTitle); 481 $("#lnkMinBlkAgeDateTime").text(strAge); 482 $("#lnkMinBlkAgeDateTime").attr("title", strDateTimeTitle); 483 $("#lnkMinUncAgeDateTime").text(strAge); 484 $("#lnkMinUncAgeDateTime").attr("title", strDateTimeTitle); 485 $("#lnkWithBlkAgeDateTime").text(strAge); 486 $("#lnkWithBlkAgeDateTime").attr("title", strDateTimeTitle); 487 $("#lnkDepositBlkAgeDateTime").text(strAge); 488 $("#lnkDepositBlkAgeDateTime").attr("title", strDateTimeTitle); 489 $(dateTimeClass).attr("style", "display:none !important"); 490 $(ageClass).show(); 491 492 if (document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime') != null) { 493 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').text = strAge; 494 document.getElementById('tokenpageiframe').contentWindow.document.getElementById('lnkErc20AgeDateTime').title = strDateTimeTitle; 495 $("#tokenpageiframe").contents().find(dateTimeClass).hide(); 496 $("#tokenpageiframe").contents().find(ageClass).show(); 497 } 498 499 //if (document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime') != null) { 500 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').text = strAge; 501 // document.getElementById('tokenerc721_pageiframe').contentWindow.document.getElementById('lnkErc721AgeDateTime').title = strDateTimeTitle; 502 // $("#tokenerc721_pageiframe").contents().find(dateTimeClass).hide(); 503 // $("#tokenerc721_pageiframe").contents().find(ageClass).show(); 504 //} 505 506 //if (document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime') != null) { 507 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').text = strAge; 508 // document.getElementById('tokenerc1155_pageiframe').contentWindow.document.getElementById('lnkErc1155AgeDateTime').title = strDateTimeTitle; 509 // $("#tokenerc1155_pageiframe").contents().find(dateTimeClass).hide(); 510 // $("#tokenerc1155_pageiframe").contents().find(ageClass).show(); 511 //} 512 513 if (document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime') != null) { 514 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').text = strAge; 515 document.getElementById('loans_pageiframe').contentWindow.document.getElementById('lnkLoanAgeDateTime').title = strDateTimeTitle; 516 $("#loans_pageiframe").contents().find(dateTimeClass).hide(); 517 $("#loans_pageiframe").contents().find(ageClass).show(); 518 } 519 } 520 521 renderFnTooltip($("#lnkTxAgeDateTime"), (data.id === "lnkTxAgeDateTime" ? 1 : 0)) 522 renderFnTooltip($("#lnkIntAgeDateTime"), (data.id === "lnkIntAgeDateTime" ? 1 : 0)) 523 renderFnTooltip($("#lnkMinBlkAgeDateTime"), (data.id === "lnkMinBlkAgeDateTime" ? 1 : 0)) 524 renderFnTooltip($("#lnkMinUncAgeDateTime"), (data.id === "lnkMinUncAgeDateTime" ? 1 : 0)) 525 renderFnTooltip($("#lnkWithBlkAgeDateTime"), (data.id === "lnkWithBlkAgeDateTime" ? 1 : 0)) 526 renderFnTooltip($("#lnkDepositBlkAgeDateTime"), (data.id === "lnkDepositBlkAgeDateTime" ? 1 : 0)) 527} 528 529function onAddTokenDocReady() { 530 var obj = window.parent.document.getElementById('hdnErc20'); 531 if (obj.value == "" || obj.value == strAge) { 532 $("#lnkErc20AgeDateTime").text(strAge); 533 $("#lnkErc20AgeDateTime").attr("title", strDateTimeTitle); 534 $(dateTimeClass).hide(); 535 $(ageClass).show(); 536 } 537 else if (obj.value == strDateTime) { 538 $("#lnkErc20AgeDateTime").text(strDateTime); 539 $("#lnkErc20AgeDateTime").attr("title", strAgeTitle); 540 $(ageClass).hide(); 541 $(dateTimeClass).show(); 542 543 //check display UTC or Local datetime 544 convertUtcToLocalDateTime(); 545 //show UTC with timezone on column header 546 if (offsetHoursFinal !== undefined) { 547 $("#lnkErc20AgeDateTime").text(strDateTimeLocal); 548 } 549 550 551 } 552 553 renderFnTooltip($("#lnkErc20AgeDateTime"), 0) 554} 555 556function switchAgeToDateTimeAddToken(data) { 557 558 disposeFnTooltip($("#" + data.id)) 559 var strVal = $("#" + data.id).text(); 560 if (strVal == strAge) { 561 $("#" + data.id).text(strDateTime); 562 $("#" + data.id).attr("title", strAgeTitle); 563 $(dateTimeClass).show(); 564 565 //check display UTC or Local datetime 566 convertUtcToLocalDateTime(); 567 //show UTC with timezone on column header 568 if (offsetHoursFinal !== undefined) { 569 $("#" + data.id).text(strDateTimeLocal); 570 } 571 572 $(ageClass).hide(); 573 var obj = window.parent.document.getElementById('hdnErc20'); 574 obj.value = strDateTime; 575 parent.setGlobalValue(obj); 576 } 577 else if (strVal == strDateTime || strVal == strDateTimeLocal) { 578 $("#" + data.id).text(strAge); 579 $("#" + data.id).attr("title", strDateTimeTitle); 580 $(dateTimeClass).hide(); 581 $(ageClass).show(); 582 var obj = window.parent.document.getElementById('hdnErc20'); 583 obj.value = strAge; 584 parent.setGlobalValue(obj); 585 } 586 587 renderFnTooltip($("#" + data.id), 1) 588} 589 590function onERC721DocReady() { 591 var obj = window.parent.document.getElementById('hdnErc20'); 592 if (obj.value == "" || obj.value == strAge) { 593 $("#lnkErc721AgeDateTime").text(strAge); 594 $("#lnkErc721AgeDateTime").attr("title", strDateTimeTitle); 595 $(dateTimeClass).hide(); 596 $(ageClass).show(); 597 } 598 else if (obj.value == strDateTime) { 599 $("#lnkErc721AgeDateTime").text(strDateTime); 600 $("#lnkErc721AgeDateTime").attr("title", strAgeTitle); 601 $(ageClass).hide(); 602 $(dateTimeClass).show(); 603 604 //check display UTC or Local datetime 605 convertUtcToLocalDateTime(); 606 //show UTC with timezone on column header 607 if (offsetHoursFinal !== undefined) { 608 $("#lnkErc721AgeDateTime").text(strDateTimeLocal); 609 } 610 } 611 612 renderFnTooltip($("#lnkErc721AgeDateTime"), 0) 613} 614 615function switchAgeToDateTimeERC721Token(data) { 616 disposeFnTooltip($("#" + data.id)) 617 var strVal = $("#" + data.id).text(); 618 if (strVal == strAge) { 619 $("#" + data.id).text(strDateTime); 620 $("#" + data.id).attr("title", strAgeTitle); 621 $(dateTimeClass).show(); 622 623 //check display UTC or Local datetime 624 convertUtcToLocalDateTime(); 625 //show UTC with timezone on column header 626 if (offsetHoursFinal !== undefined) { 627 $("#" + data.id).text(strDateTimeLocal); 628 } 629 630 $(ageClass).hide(); 631 var obj = window.parent.document.getElementById('hdnErc20'); 632 obj.value = strDateTime; 633 parent.setGlobalValue(obj); 634 } 635 else if (strVal == strDateTime || strVal == strDateTimeLocal) { 636 $("#" + data.id).text(strAge); 637 $("#" + data.id).attr("title", strDateTimeTitle); 638 $(dateTimeClass).hide(); 639 $(ageClass).show(); 640 var obj = window.parent.document.getElementById('hdnErc20'); 641 obj.value = strAge; 642 parent.setGlobalValue(obj); 643 } 644 645 renderFnTooltip($("#" + data.id), 1) 646} 647 648function onERC1155DocReady() { 649 var obj = window.parent.document.getElementById('hdnErc20'); 650 if (obj.value == "" || obj.value == strAge) { 651 $("#lnkErc1155AgeDateTime").text(strAge); 652 $("#lnkErc1155AgeDateTime").attr("title", strDateTimeTitle); 653 $(dateTimeClass).hide(); 654 $(ageClass).show(); 655 } 656 else if (obj.value == strDateTime) { 657 $("#lnkErc1155AgeDateTime").text(strDateTime); 658 $("#lnkErc1155AgeDateTime").attr("title", strAgeTitle); 659 $(ageClass).hide(); 660 $(dateTimeClass).show(); 661 } 662 663 renderFnTooltip($("#lnkErc1155AgeDateTime"), 0) 664} 665 666function onBridgeDepositDocReady() { 667 var obj = window.parent.document.getElementById('hdnErc20'); 668 if (obj.value == "" || obj.value == strAge) { 669 $("#lnkBridgeDepositAgeDateTime").text(strAge); 670 $("#lnkBridgeDepositAgeDateTime").attr("title", strDateTimeTitle); 671 $(dateTimeClass).hide(); 672 $(ageClass).show(); 673 } 674 else if (obj.value == strDateTime) { 675 $("#lnkBridgeDepositAgeDateTime").text(strDateTime); 676 $("#lnkBridgeDepositAgeDateTime").attr("title", strAgeTitle); 677 $(ageClass).hide(); 678 $(dateTimeClass).show(); 679 680 //check display UTC or Local datetime 681 convertUtcToLocalDateTime(); 682 //show UTC with timezone on column header 683 if (offsetHoursFinal !== undefined) { 684 $("#lnkBridgeDepositAgeDateTime").text(strDateTimeLocal); 685 } 686 } 687 $("#lnkBridgeDepositAgeDateTime").attr("data-toggle-commonjs", "tooltip"); 688 $("[data-toggle-commonjs='tooltip']").tooltip(); 689} 690 691function onRewardDocReady() { 692 var obj = window.parent.document.getElementById('hdnErc20'); 693 if (obj.value == "" || obj.value == strAge) { 694 $("#lnkRewardAgeDateTime").text(strAge); 695 $("#lnkRewardAgeDateTime").attr("title", strDateTimeTitle); 696 $(dateTimeClass).hide(); 697 $(ageClass).show(); 698 } 699 else if (obj.value == strDateTime) { 700 $("#lnkRewardAgeDateTime").text(strDateTime); 701 $("#lnkRewardAgeDateTime").attr("title", strAgeTitle); 702 $(ageClass).hide(); 703 $(dateTimeClass).show(); 704 705 //check display UTC or Local datetime 706 convertUtcToLocalDateTime(); 707 //show UTC with timezone on column header 708 if (offsetHoursFinal !== undefined) { 709 $("#lnkRewardAgeDateTime").text(strDateTimeLocal); 710 } 711 } 712 $("#lnkRewardAgeDateTime").attr("data-toggle-commonjs", "tooltip"); 713 $("[data-toggle-commonjs='tooltip']").tooltip(); 714} 715 716function clearGlobalValue() { 717
717 strGlobal = ""; 718 document.cookie = strSiteName + "_switch_age_datetime=" + strGlobal; 719} 720 721function onTokenTxnsDocReady() { 722 var obj = window.parent.document.getElementById('hdnTokenTxns2'); 723 if (obj.value == "" || obj.value == "null" || obj.value == strAge) { 724 $("#lnkTokenTxnsAgeDateTime").text(strAge); 725 $("#lnkTokenTxnsAgeDateTime").attr("title", strDateTimeTitle); 726 $(dateTimeClass).hide(); 727 //check display UTC or Local datetime 728 convertUtcToLocalDateTime(); 729 $(ageClass).show(); 730 } 731 else if (obj.value == strDateTime) { 732 $("#lnkTokenTxnsAgeDateTime").text(strDateTime); 733 $("#lnkTokenTxnsAgeDateTime").attr("title", strAgeTitle); 734 $(ageClass).hide(); 735 $(dateTimeClass).show(); 736 737 //check display UTC or Local datetime 738 convertUtcToLocalDateTime(); 739 //show UTC with timezone on column header 740 if (offsetHoursFinal !== undefined) { 741 $("#lnkTokenTxnsAgeDateTime").text(strDateTimeLocal); 742 } 743 } 744 745 renderFnTooltip($("#lnkTokenTxnsAgeDateTime"), 0) 746} 747 748function switchAgeToDateTimeTokenTxns(data) { 749 disposeFnTooltip($("#" + data.id)) 750 var strVal = $("#" + data.id).text(); 751 if (strVal == strAge) { 752 $("#" + data.id).text(strDateTime); 753 $("#" + data.id).attr("title", strAgeTitle); 754 $(dateTimeClass).show(); 755 756 //check display UTC or Local datetime 757 convertUtcToLocalDateTime(); 758 //show UTC with timezone on column header 759 if (offsetHoursFinal !== undefined) { 760 $("#" + data.id).text(strDateTimeLocal); 761 } 762 763 $(ageClass).hide(); 764 var obj = window.parent.document.getElementById('hdnTokenTxns2'); 765 obj.value = strDateTime; 766 parent.setGlobalTokenValue(obj); 767 } 768 else if (strVal == strDateTime || strVal == strDateTimeLocal) { 769 $("#" + data.id).text(strAge); 770 $("#" + data.id).attr("title", strDateTimeTitle); 771 $(dateTimeClass).hide(); 772 $(ageClass).show(); 773 var obj = window.parent.document.getElementById('hdnTokenTxns2'); 774 obj.value = strAge; 775 parent.setGlobalTokenValue(obj); 776 } 777 778 renderFnTooltip($("#" + data.id), 1) 779} 780 781function onAddLoanDocReady() { 782 var obj = window.parent.document.getElementById('hdnErc20'); 783 if (obj.value == "" || obj.value == strAge) { 784 $("#lnkLoanAgeDateTime").text(strAge); 785 $("#lnkLoanAgeDateTime").attr("title", strDateTimeTitle); 786 $(dateTimeClass).hide(); 787 $(ageClass).show(); 788 } 789 else if (obj.value == strDateTime) { 790 $("#lnkLoanAgeDateTime").text(strDateTime); 791 $("#lnkLoanAgeDateTime").attr("title", strAgeTitle); 792 $(ageClass).hide(); 793 $(dateTimeClass).show(); 794 } 795 796 renderFnTooltip($("#lnkLoanAgeDateTime"), 0) 797} 798 799function onDexTradeDocReady() { 800 var obj = window.parent.document.getElementById('hdnTokenTxns2'); 801 if (obj.value == "" || obj.value == "null" || obj.value == strAge) { 802 $("#lnkDexTradeAgeDateTime").text(strAge); 803 $("#lnkDexTradeAgeDateTime").attr("title", strDateTimeTitle); 804 $(dateTimeClass).hide(); 805 $(ageClass).show(); 806 } 807 else if (obj.value == strDateTime) { 808 $("#lnkDexTradeAgeDateTime").text(strDateTime); 809 $("#lnkDexTradeAgeDateTime").attr("title", strAgeTitle); 810 $(ageClass).hide(); 811 $(dateTimeClass).show(); 812 //check display UTC or Local datetime 813 convertUtcToLocalDateTime(); 814 //show UTC with timezone on column header 815 if (offsetHoursFinal !== undefined) { 816 $("#lnkDexTradeAgeDateTime").text(strDateTimeLocal); 817 } 818 } 819 820 renderFnTooltip($("#lnkDexTradeAgeDateTime"), 0) 821} 822 823function switchTxFeeGasPrice(self) { 824 disposeFnTooltip(self ? $(self) : $(".switch-txn-fee-gas-price")) 825 826 var strVal = self ? $(self).text() : $(".switch-txn-fee-gas-price").text(); 827 if (strVal == strTxnFee) { 828 $(".switch-txn-fee-gas-price").text(strGasPrice); 829 $(".switch-txn-fee-gas-price").attr("title", $("#hdnGasPriceTitle").val()); 830 $(".showGasPrice").show(); 831 $(".showTxnFee").hide(); 832 sessionStorage.setItem("ShowFee", strGasPrice); 833 } 834 else if (strVal == strGasPrice) { 835 $(".switch-txn-fee-gas-price").text(strTxnFee); 836 $(".switch-txn-fee-gas-price").attr("title", $("#hdnTxnFeeTitle").val()); 837 $(".showGasPrice").hide(); 838 $(".showTxnFee").show(); 839 sessionStorage.setItem("ShowFee", strTxnFee); 840 } 841 842 if (self) { 843 renderFnTooltip($(self), 1) 844 } else { 845 renderFnTooltip($(".switch-txn-fee-gas-price"), 1) 846 } 847 848} 849 850function switchSlotAndEpoch(self) { 851 disposeFnTooltip(self ? $(self) : $(".switch-slot-epoch")) 852 853 var strVal = self ? $(self).text() : $(".switch-slot-epoch").text(); 854 if (strVal == "Slot") { 855 $(".switch-slot-epoch").text("Epoch"); 856 $(".switch-slot-epoch").attr("title", "Click to show Slot"); 857 $(".switch-slot-epoch").attr("data-bs-title", "Click to show Slot"); 858 $(".showEpochNumber").show(); 859 $(".showSlotNumber").hide(); 860 sessionStorage.setItem("ShowSlotEpoch", "Epoch"); 861 } 862 else if (strVal == "Epoch") { 863 $(".switch-slot-epoch").text("Slot"); 864 $(".switch-slot-epoch").attr("title", "Click to show Epoc
864h"); 865 $(".switch-slot-epoch").attr("data-bs-title", "Click to show Epoch"); 866 $(".showEpochNumber").hide(); 867 $(".showSlotNumber").show(); 868 sessionStorage.setItem("ShowSlotEpoch", "Slot"); 869 } 870 871 if (self) { 872 renderFnTooltip($(self), 1) 873 } else { 874 renderFnTooltip($(".switch-slot-epoch"), 1) 875 } 876} 877 878function setGlobalTokenValue(data) { 879 var strVal = $("#" + data.id).val(); 880 if (strVal == "" || strVal == strAge) { 881 setAgeDateTimeCookie(strAge); 882 switchAgeDateTimeInTokenIframe(data); 883 } 884 else if (strVal == strDateTime) { 885 setAgeDateTimeCookie(strDateTime); 886 switchAgeDateTimeInTokenIframe(data); 887 } 888} 889 890function switchAgeDateTimeInTokenIframe(data) { 891 var strVal = $("#" + data.id).val(); 892 if (strVal == strDateTime) { 893 if (document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime') != null) { 894 document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime').text = strDateTime; 895 document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime').title = strAgeTitle; 896 $("#tokentxnsiframe").contents().find(dateTimeClass).show(); 897 $("#tokentxnsiframe").contents().find(ageClass).hide(); 898 } 899 900 if (document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime') != null) { 901 document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime').text = strDateTime; 902 document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime').title = strAgeTitle; 903 $("#dextrackeriframe").contents().find(dateTimeClass).show(); 904 $("#dextrackeriframe").contents().find(ageClass).hide(); 905 } 906 } 907 else if (strVal == strAge) { 908 if (document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime') != null) { 909 document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime').text = strAge; 910 document.getElementById('tokentxnsiframe').contentWindow.document.getElementById('lnkTokenTxnsAgeDateTime').title = strDateTimeTitle; 911 $("#tokentxnsiframe").contents().find(dateTimeClass).hide(); 912 $("#tokentxnsiframe").contents().find(ageClass).show(); 913 } 914 915 if (document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime') != null) { 916 document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime').text = strAge; 917 document.getElementById('dextrackeriframe').contentWindow.document.getElementById('lnkDexTradeAgeDateTime').title = strDateTimeTitle; 918 $("#dextrackeriframe").contents().find(dateTimeClass).hide(); 919 $("#dextrackeriframe").contents().find(ageClass).show(); 920 } 921 } 922} 923 924function disposeFnTooltip(el, type) { 925 el.tooltip("dispose"); 926} 927 928function renderFnTooltip(el, type) { 929 if (type === 1) { 930 el.tooltip("toggle"); 931 } else { 932 el.attr("data-bs-toggle", "tooltip"); 933 el.tooltip(); 934 } 935} 936 937myFn_boxExpand = { 938 actionParam: "", 939 toggleAction: "", 940 spinner: '<div class="popover popover-body pagecustom_popover" id="spinner-wrapper" style="height: 40px!important;"><i class="fas fa-circle-notch fa-spin spinner-wrapper__icon position-relativer text-primary fa-2x mb-2" style="top: unset"></i></div>', 941 init: function (strElement, toggleAction, actionParam) { 942 var self = this; 943 self.actionParam = actionParam 944 self.toggleAction = toggleAction 945 946 $(strElement).on("click", function (e) { 947 self.fnClick(e) 948 }); 949 }, 950 fnClick: function (e) { 951 var target = e.currentTarget 952 $(target).off('click'); 953 e.preventDefault(); 954 e.stopPropagation(); 955 956 var self = this; 957 self.fnProcess(e, function () { 958 self.fnOnClick(target) 959 }); 960 }, 961 fnOnClick: function (target) { 962 var self = this; 963 $(target).on("click", function (e) { 964 self.fnClick(e) 965 }); 966 }, 967 fnProcess_Popover: function (e, callback) { 968 var self = this; 969 var el = $(e.currentTarget); 970 971 if (!el.attr("data-bs-content")) { 972 el.popover({ 973 trigger: 'manual', 974 html: true, 975 placement: 'right', 976 content: self.spinner, 977 boundary: "window" 978 }).popover("show"); 979 980 var el_parent_tr = el.parents("tr"); 981 var str_el_next = el_parent_tr.find('.myFnExpandBox_searchVal').text() 982 self.expandBox(0, str_el_next, function (data) { 983 el.attr('data-bs-content', data); 984 el.popover("show") 985 }) 986 987 el.click(function () { 988 $(this).popover('toggle'); 989 }).blur(function () { 990 //$(this).popover('hide'); 991 var _this = this; 992 setTimeout(function () { 993 $(_this).popover('hide'); 994 }, 150); 995 }); 996 } 997 }, 998 fnProcess_Popover_Data: function (e, callback) { 999 var self = this; 1000 var el = $(e.currentTarget); 1001 1002 if (!el.attr("data-bs-content")) { 1003 el.popover({ 1004 trigger: 'manual', 1005 html: true, 1006 placement: 'right', 1007 content: self.spinner, 1008 }).popover("show"); 1009 1010 var el_parent_tr = el.parents("tr"); 1011 var str_el_next = el_parent_tr.find('.myFnExpandBox_withData').attr("box-data"); 1012 var str_el_headers = el_parent_tr.find('.myFnExpandBox_withData').attr("box-header"); 1013 self.expandBoxWithData(str_el_next.split(','), str_el_headers.split(','), function (data) { 1014 el.attr('data-bs-content', data); 1015 el.popover("show") 1016 }) 1017 1018 el.click(function () { 1019 $(this).popover('toggle'); 1020 }).blur(function () { 1021 var _this = this; 1022 setTimeout(function () { 1023 $(_this).popover('hide'); 1024 }, 150); 1025 }); 1026 } 1027 }, 1028 fnProcess_Table: function (e, callback) { 1029 var self = this; 1030 var el = $(e.currentTarget); 1031 var el_parent_tr = el.parents("tr"); 1032 var str_el_next = el_parent_tr.find('.myFnExpandBox_searchVal').text() 1033 var el_parent_tr__child_length = el_parent_tr.children().length; 1034 var el_parent_tr_next = "" 1035 1036 if (el.hasClass("myfn_boxExpand_open")) { 1037 el_parent_tr_next = el_parent_tr.next(".myExpandBox"); 1038 1039 el.removeClass("myfn_boxExpand_open"); 1040 el.addClass("fa-chevron-up"); 1041 el.removeClass("fa-chevron-down"); 1042 1043 el_parent_tr_next.remove(); 1044 callback() 1045 } else { 1046 el.addClass("myfn_boxExpand_open"); 1047 el.removeClass("fa-chevron-up"); 1048 el.addClass("fa-chevron-down"); 1049 1050 el_parent_tr.after('<tr class="myExpandBox"><td colspan="' + el_parent_tr__child_length + '" style="white-space: unset;padding-top:1.25rem;">' + self.spinner + '</td></tr>'); 1051 self.expandBox(el_parent_tr__child_length, str_el_next, function (data) { 1052 el_parent_tr_next = el_parent_tr.next(".myExpandBox"); 1053 el_parent_tr_next.remove(); 1054 1055 el_parent_tr.after(data); 1056 $.HSCore.components.HSClipboard.init('.js-clipboard'); 1057 $.HSCore.components.HSMalihuScrollBar.init($('.js-scrollbar')); 1058 callback() 1059 }); 1060 } 1061 }, 1062 fnProcess: function (e, callback) { 1063 var self = this; 1064 if (self.toggleAction == "popover") { 1065 self.fnProcess_Popover(e, callback) 1066 } 1067 else if (self.toggleAction == "popOverWithData") {
1068 self.fnProcess_Popover_Data(e, callback) 1069 } 1070 else { 1071 self.fnProcess_Table(e, callback) 1072 } 1073 }, 1074 expandBoxWithData: function (dataArray, dataHeader, callback) { 1075 var strResult = ""; 1076 if (dataArray.length == 0 || dataArray.length != dataHeader.length) { 1077 strResult += "<tr>"; 1078 strResult += '<td>'; 1079 strResult += "something wrong"; 1080 strResult += "</td>"; 1081 strResult += "</tr>"; 1082 } 1083 else { 1084 strResult = generateTable(dataArray, dataHeader); 1085 } 1086 callback(strResult) 1087 1088 function generateTable(dataArray, dataHeader) { 1089 var strResult = "<h4 class='h5 mb-3'>Additional Info</h4>"; 1090 for (let i = 0; i < dataArray.length; i++) { 1091 if (dataArray[i] == "") { 1092 continue; 1093 } 1094 strResult += "<h5 class='fs-1 fw-bold mb-1'>" + dataHeader[i] + ":</h5>"; 1095 strResult += dataArray[i]; 1096 strResult += "<hr class='hr-space'>"; 1097 } 1098 return strResult; 1099 } 1100 }, 1101 expandBox: function (colspan_number, strSearchVal, callback) { 1102 var tmp_overlayMain = window.parent.document.getElementById('overlayMain') 1103 if (tmp_overlayMain) { 1104 window.parent.document.getElementById('overlayMain').style.display = 'none'; 1105 } 1106 var self = this; 1107 $.ajax({
1108 type: 'Get', 1109 url: '/txsHandler.ashx', 1110 data: { strSearchVal: strSearchVal, toggleAction: self.toggleAction, actionParam: self.actionParam }, 1111 }).done(function (data, textStatus, xhr) { 1112 var strResult = ""; 1113 if (colspan_number) { 1114 if (textStatus === "success") { 1115 strResult += '<tr class="myExpandBox">'; 1116 strResult += '<td colspan="' + colspan_number + '" style="white-space: unset;">'; 1117 strResult += data; 1118 strResult += "</td>"; 1119 strResult += "</tr>"; 1120 } else { 1121 strResult += "<tr>"; 1122 strResult += '<td colspan="' + colspan_number + '">'; 1123 strResult += "something wrong"; 1124 strResult += "</td>"; 1125 strResult += "</tr>"; 1126 } 1127 } else { 1128 strResult = (data) 1129 } 1130 callback(strResult) 1131 1132 }); 1133 } 1134}; 1135 1136var commonHashControl = { 1137 inithash: function (callback) { 1138 var hash = window.location.hash.substring(1); 1139 if (hash != '') { 1140 this.activaTab(hash); 1141 }; 1142 1143 if (callback) { 1144 callback(hash) 1145 } 1146 }, 1147 activaTab: function (tab) { 1148 $('a[href="#' + tab + '"]').tab('show') 1149 //.on('shown.bs.tab', function (event) { 1150 //$('#' + tab)[0].scrollIntoView() 1151 //}); 1152 }, 1153 updatehash: function (strhash) { 1154 try { 1155 if (strhash === '') { 1156 history.replaceState("", document.title, window.location.href.split('#')[0]); 1157 } else { 1158 var baseUrl = window.location.href.split('#')[0]; 1159 history.replaceState("", document.title, baseUrl + '#' + strhash); 1160 } 1161 } catch (err) { 1162 } 1163 this.activaTab(strhash); 1164 }, 1165} 1166 1167function getParameterByName(key) { 1168 return decodeURIComponent(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURIComponent(key).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")); 1169} 1170 1171function getCookie(cname) { 1172 var name = cname + "="; 1173 var ca = document.cookie.split(';'); 1174 for (var i = 0; i < ca.length; i++) { 1175 var c = ca[i]; 1176 while (c.charAt(0) === ' ') { 1177 c = c.substring(1); 1178 } 1179 if (c.indexOf(name) === 0) { 1180 return c.substring(name.length, c.length); 1181 } 1182 } 1183 return ""; 1184} 1185 1186function handleHtmlString(strVal) { 1187 strVal = strVal.replace(' ', '').replace('@', '').replace("'", "").replace("*", "").replace("(", "").replace(")", "").replace(";", "").replace(",", "").replace("<script", "").trim(); 1188 return strVal; 1189} 1190 1191function clearSearchInput() { 1192 const urlParams = new URLSearchParams(window.location.search); 1193 const strSearchVal = urlParams.get('q'); 1194 if (strSearchVal !== "") { 1195 $("#q").val(""); 1196 } 1197} 1198 1199function initDateTimeTooltip(useShortHeader = false) { 1200 1201 let headerText = ""; 1202 let tooltipTitle = ""; 1203 const datetimeTextCookie = getCookie(strSiteName + "_switch_age_datetime"); 1204 if (datetimeTextCookie == '' || datetimeTextCookie == strAge) { 1205 headerText = strAge; 1206 tooltipTitle = strDateTimeTitle; 1207 $(dateTimeClass).hide(); 1208 1209 //check display UTC or Local datetime 1210 convertUtcToLocalDateTime(); 1211 1212 $(ageClass).show(); 1213 } 1214 else { 1215 headerText = useShortHeader ? "UTC" : strDateTime; 1216 1217 //check display UTC or Local datetime 1218 convertUtcToLocalDateTime(); 1219 //show UTC with timezome on column header 1220 if (offsetHoursFinal !== undefined) { 1221 //var datetimeTextLocal = "Date Time (UTC" + offsetHoursFinal + ")"; 1222 if (useShortHeader) { 1223 headerText = strDateTimeLocalShort; 1224 } 1225 else { 1226 headerText = strDateTimeLocal; 1227 } 1228 } 1229 1230 tooltipTitle = strAgeTitle; 1231 $(dateTimeClass).show(); 1232 $(ageClass).hide(); 1233 } 1234 1235 const tooltipTriggerList = document.querySelectorAll('.age-datetime-with-tooltip'); 1236 const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => { 1237 $(tooltipTriggerEl).text(headerText); 1238 1239 const newTooltip = new bootstrap.Tooltip(tooltipTriggerEl, { 1240 title: tooltipTitle, 1241 trigger: "hover" 1242 }); 1243 1244 return newTooltip; 1245 });
1246} 1247 1248function convertUtcTimestampToLocalTime(showShortMonth = true) { 1249 1250 strDateTimeFormat = getCookie(strSiteName + "_datetime_format"); 1251 if (strDateTimeFormat === "LOCAL") { 1252 const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone; 1253 var unixTimestamp = $("#showUtcLocalDate").attr("data-timestamp"); 1254 const utcDate = new Date(unixTimestamp * 1000); 1255 const offsetMinutes = utcDate.getTimezoneOffset(); 1256 const offsetHours = Math.abs(offsetMinutes / 60); 1257 const sign = offsetMinutes > 0 ? '-' : '+'; 1258 const offsetHoursFinal = sign + offsetHours; 1259 const day = utcDate.getDate(); 1260 const month = utcDate.toLocaleString('default', { timeZone: tzid, month: 'short' }); 1261 const year = utcDate.getFullYear(); 1262 const time = utcDate.toLocaleTimeString('default', { timeZone: tzid }); 1263 1264 // create a new formatted date string 1265 var formattedDateString = `${month}-${day}-${year} ${time}`; 1266 if(showShortMonth) { 1267 $("#showUtcLocalDate").text(formattedDateString + " UTC" + offsetHoursFinal); 1268 } 1269 else { 1270 formattedDateString = utcDate.toLocaleString('sv-SE', { timeZone: tzid }); 1271 $("#showUtcLocalDate").text(formattedDateString + " UTC" + offsetHoursFinal); 1272 } 1273 1274 } 1275} 1276 1277function convertMultipleUtcTimestampToLocalTime() { 1278 strDateTimeFormat = getCookie("etherscan_datetime_format"); 1279 if (strDateTimeFormat === "LOCAL") { 1280 const el_showUtcLocalDate = $(".showUtcLocalDate") 1281 1282 el_showUtcLocalDate.each(function () { 1283 const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone; 1284 var unixTimestamp = $(this).attr("data-timestamp");
1285 const utcDate = new Date(unixTimestamp * 1000); 1286 const offsetMinutes = utcDate.getTimezoneOffset(); 1287 const offsetHours = Math.abs(offsetMinutes / 60); 1288 const sign = offsetMinutes > 0 ? '-' : '+'; 1289 const offsetHoursFinal = sign + offsetHours; 1290 const day = utcDate.getDate(); 1291 const month = utcDate.toLocaleString('default', { timeZone: tzid, month: 'short' }); 1292 const year = utcDate.getFullYear(); 1293 const time = utcDate.toLocaleTimeString('default', { timeZone: tzid }); 1294 // create a new formatted date string 1295 const formattedDateString = `${month}-${day}-${year} ${time}`; 1296 $(this).text(formattedDateString + " UTC" + offsetHoursFinal); 1297 }); 1298 } 1299} 1300 1301function convertUtcToLocalDateTime(showUTCText = false, showAge = true) { 1302 1303 strDateTimeFormat = getCookie(strSiteName + "_datetime_format"); 1304 if (strDateTimeFormat === "LOCAL") { 1305 1306 var localDateTimeArray = new Array(); 1307 //var offsetHoursFinal; 1308 const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone; 1309 1310 if ($(localDateTimeClass).length > 0) { 1311 1312 var $localDatetimeColumn = $(localDateTimeClass); 1313 $localDatetimeColumn.each(function (i, v) { 1314 const unixTimestamp = v.innerText ? v.innerText.trim() : ''; 1315 if (!unixTimestamp) { 1316 localDateTimeArray.push(null); 1317 return; 1318 }
1319 const utcDate = new Date(unixTimestamp * 1000); 1320 const offsetMinutes = utcDate.getTimezoneOffset(); 1321 const offsetHours = Math.abs(offsetMinutes / 60); 1322 const sign = offsetMinutes > 0 ? '-' : '+'; 1323 offsetHoursFinal = sign + offsetHours; 1324 const localDateTime = utcDate.toLocaleString("sv-SE", { 1325 timeZone: tzid, 1326 year: "numeric", 1327 month: "2-digit", 1328 day: "2-digit", 1329 hour: "2-digit", 1330 minute: "2-digit", 1331 second: "2-digit", 1332 //timeZoneName: "short" 1333 }); 1334 1335 var html = v.innerHTML; 1336 var content = html.replace(unixTimestamp, localDateTime); 1337 localDateTimeArray.push(content); 1338 1339 }); 1340 1341 for (var j = 0; j < localDateTimeArray.length; j++) { 1342 if (!localDateTimeArray[j]) continue; 1343 var datetimeColumn = $(dateTimeClass); 1344 if (!datetimeColumn[j]) continue; 1345 datetimeColumn[j].innerHTML = cleanHtmlStr(localDateTimeArray[j]); 1346 } 1347 1348 for (var k = 0; k < localDateTimeArray.length; k++) { 1349 if (!localDateTimeArray[k] || !$(ageClass)[k]) continue; 1350 var utc = $($(ageClass)[k].innerHTML).attr("data-bs-title"); 1351 var ageHtml = $(ageClass)[k].innerHTML; 1352 var localDT = $(localDateTimeArray[k]); 1353 if (!localDT.length || !localDT[0]) continue; 1354 var content = ageHtml.replace(utc, localDT[0].innerHTML); 1355 $(ageClass)[k].innerHTML = cleanHtmlStr(content); 1356 } 1357 } 1358 else if ($(localDateTimeNFTClass).length > 0) { 1359 1360 var $localDatetimeNFTColumn = $(localDateTimeNFTClass); 1361 $localDatetimeNFTColumn.each(function (i, v) { 1362 const dateText = v.innerText; 1363 1364 // need to split the date string, add leading zeroes to hour and replace space with T for Safari 1365 var parts = dateText.split(" "); 1366 var datePart = parts[0]; 1367 var timePart = parts[1]; 1368 1369 var timeParts = timePart.split(":"); 1370 var hours = timeParts[0]; 1371 var minutes = timeParts[1]; 1372 var seconds = timeParts[2]; 1373 1374 hours = hours.padStart(2, "0"); 1375 var dateText2 = datePart + "T" + hours + ":" + minutes + ":" + seconds; 1376 1377 const date = new Date(dateText2); 1378 const offsetMinutes = date.getTimezoneOffset(); 1379 const offsetHours = Math.abs(offsetMinutes / 60); 1380 const sign = offsetMinutes > 0 ? '-' : '+'; 1381 offsetHoursFinal = sign + offsetHours; 1382 1383 const utcTimestamp = Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), 1384 date.getHours(), date.getMinutes(), date.getSeconds()); 1385 const localDateTimeNFT = new Date(utcTimestamp).toLocaleString('sv-SE', { 1386 timeZone: tzid, 1387 year: "numeric", 1388 month: "2-digit", 1389 day: "2-digit", 1390 hour: "2-digit", 1391 minute: "2-digit", 1392 second: "2-digit", 1393 }); 1394 1395 var html = v.innerHTML; 1396 var utcTxtString = ""; 1397 if(showUTCText){ 1398 utcTxtString = " UTC" + offsetHoursFinal 1399 } 1400 var content = html.replace(dateText, localDateTimeNFT + utcTxtString); 1401 localDateTimeArray.push(content); 1402 1403 }); 1404 1405 for (var j = 0; j < localDateTimeArray.length; j++) { 1406 var datetimeColumn = $(dateTimeClass); 1407 datetimeColumn[j].innerHTML = cleanHtmlStr(localDateTimeArray[j]); 1408 } 1409 1410 if (showAge) { 1411 for (var k = 0; k < localDateTimeArray.length; k++) { 1412 var utc = $($(ageClass)[k].innerHTML).attr("title"); 1413 var ageHtml = $(ageClass)[k].innerHTML; 1414 var content = ageHtml.replace(utc, $(localDateTimeArray[k])[0].innerHTML); 1415 $(ageClass)[k].innerHTML = cleanHtmlStr(content); 1416 } 1417 } 1418 1419 1420 } 1421 1422 //for (var j = 0; j < localDateTimeArray.length; j++) { 1423 // var datetimeColumn = $(dateTimeClass); 1424 // datetimeColumn[j].innerHTML = cleanHtmlStr(localDateTimeArray[j]); 1425 //} 1426 1427 //for (var k = 0; k < localDateTimeArray.length; k++) { 1428 // var utc = $($(ageClass)[k].innerHTML).attr("data-bs-title"); 1429 // var ageHtml = $(ageClass)[k].innerHTML; 1430 // var content = ageHtml.replace(utc, $(localDateTimeArray[k])[0].innerHTML); 1431 // $(ageClass)[k].innerHTML = cleanHtmlStr(content); 1432 //} 1433 } 1434 else { 1435 offsetHoursFinal = undefined 1436 } 1437 1438 //reinit tooltip 1439 $(`[data-bs-toggle="tooltip"]`).tooltip(); 1440} 1441 1442function cleanHtmlStr(strVal) { 1443 strVal = strVal.replace('@', '').replace("'", "").replace("*", "").replace("(", "").replace(")", "").replace(";", "").replace(",", "").replace("<script", "").trim(); 1444 return strVal; 1445} 1446 1447function switchAgeToDateTimeNew(el, useShortHeader = false) { 1448 const self = $(el); 1449 const tooltip = bootstrap.Tooltip.getOrCreateInstance(el); 1450 const currentHeaderText = self.text(); 1451 const datetimeText = useShortHeader ? "UTC" : strDateTime; 1452 const table = self.closest('table'); 1453 1454 if (currentHeaderText == strAge) { 1455 self.text(datetimeText); 1456 table.find(dateTimeClass).show(); 1457 1458 //check display UTC or Local datetime 1459 convertUtcToLocalDateTime(); 1460 //show UTC with timezone on column header 1461 if (offsetHoursFinal !== undefined) { 1462 if (useShortHeader) { 1463 self.text(strDateTimeLocalShort); 1464 } 1465 else { 1466 self.text(strDateTimeLocal); 1467 } 1468 } 1469 1470 table.find(ageClass).hide(); 1471 setAgeDateTimeCookie(strDateTime); 1472 1473 tooltip.setContent({ '.tooltip-inner': strAgeTitle }); 1474 } 1475 else if (currentHeaderText == datetimeText || currentHeaderText == strDateTimeLocal || currentHeaderText == strDateTimeLocalShort) { 1476 self.text(strAge); 1477 table.find(dateTimeClass).hide(); 1478 table.find(ageClass).show(); 1479 setAgeDateTimeCookie(strAge); 1480 1481 tooltip.setContent({ '.tooltip-inner': strDateTimeTitle }); 1482 } 1483} 1484 1485function switchAgeDateTimeWithEffective(el) { 1486 var table = $(el).closest('table'); 1487 var ageLink = table.find('.age-datetime-with-tooltip')[0]; 1488 if (ageLink) { 1489 switchAgeToDateTimeNew(ageLink); 1490 } 1491 1492 var ageText = table.find('.age-datetime-with-tooltip').text().trim(); 1493 var $eff = table.find('.effective-datetime-with-tooltip'); 1494 if (ageText === strDateTime) { 1495 $eff.text("Effective (UTC)"); 1496 } else if (ageText === strDateTimeLocal) { 1497 $eff.text("Effective (Local)"); 1498 } else { 1499 $eff.text("Effective"); 1500 } 1501} 1502 1503function initTxFeeGasPriceTooltip() { 1504 let headerText = ""; 1505 let tooltipTitle = ""; 1506 if (strGlobalFee == null || strGlobalFee == "null" || strGlobalFee == strTxnFee) { 1507 headerText = strTxnFee; 1508 tooltipTitle = $("#hdnTxnFeeTitle").val(); 1509 $(".showTxnFee").show(); 1510 $(".showGasPrice").hide(); 1511 } else if (strGlobalFee == strGasPrice) { 1512 headerText = strGasPrice; 1513 tooltipTitle = $("#hdnGasPriceTitle").val(); 1514 $(".showTxnFee").hide(); 1515 $(".showGasPrice").show(); 1516 } 1517 1518 const tooltipTriggerList = document.querySelectorAll('.switch-txn-fee-gas-price'); 1519 const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => { 1520 $(tooltipTriggerEl).text(headerText); 1521 1522 const newTooltip = new bootstrap.Tooltip(tooltipTriggerEl, { 1523 title: tooltipTitle, 1524 trigger: "hover" 1525 }); 1526 1527 return newTooltip; 1528 });
1529} 1530 1531function switchTxFeeGasPriceNew(el) { 1532 const self = $(el); 1533 const tooltip = bootstrap.Tooltip.getOrCreateInstance(el); 1534 const strVal = self.text(); 1535 if (strVal == strTxnFee) { 1536 self.text(strGasPrice); 1537 $(".showGasPrice").show(); 1538 $(".showTxnFee").hide(); 1539 sessionStorage.setItem("ShowFee", strGasPrice); 1540 1541 tooltip.setContent({ '.tooltip-inner': $("#hdnGasPriceTitle").val() }); 1542 } 1543 else if (strVal == strGasPrice) { 1544 self.text(strTxnFee); 1545 $(".showGasPrice").hide(); 1546 $(".showTxnFee").show(); 1547 sessionStorage.setItem("ShowFee", strTxnFee); 1548 1549 tooltip.setContent({ '.tooltip-inner': $("#hdnTxnFeeTitle").val() }); 1550 } 1551} 1552 1553function switchAmountToValue(el, text1, text2, isStart) { 1554 if (el) { 1555 var cAmountPrice = getCookie(strSiteName + "_switch_token_amount_value"); 1556 1557 if ((isStart == false && cAmountPrice == "value") || (isStart == true && cAmountPrice == "amount")) { 1558 $(el).html(text1) 1559 $("#tooltipAmountValue").show() 1560 $(".td_showValue").show() 1561 $(".td_showAmount").hide() 1562 writeCookie(strSiteName + "_switch_token_amount_value", "amount") 1563 } else { 1564 $(el).html(text2) 1565 $("#tooltipAmountValue").hide() 1566 $(".td_showValue").hide() 1567 $(".td_showAmount").show() 1568 writeCookie(strSiteName + "_switch_token_amount_value", "value") 1569 } 1570 } 1571} 1572 1573function switchMethodColumn(el, text1, text2, isStart) { 1574 if (el) { 1575 var res = getCookie(strSiteName + "_switch_function_name"); 1576 1577 if ((isStart == false && res == "method") || (isStart == true && res == "action")) { 1578 $(el).html(text1) 1579 $(el).attr("data-bs-toggle", "tooltip") 1580 $(el).attr("data-bs-trigger", "hover") 1581 $(el).attr("data-bs-title", "Click to show curated Action where applicable") 1582 $(".td_functionNameOri").show() 1583 $(".td_functionNameCustom").hide() 1584 $(".method-tooltip").show() 1585 $(".action-tooltip").hide() 1586 writeCookie(strSiteName + "_switch_function_name", "action") 1587 } else { 1588 $(el).html(text2) 1589 $(el).attr("data-bs-toggle", "tooltip") 1590 $(el).attr("data-bs-trigger", "hover") 1591 $(el).attr("data-bs-title", "Click to show executed Function") 1592 $(".td_functionNameOri").hide() 1593 $(".td_functionNameCustom").show() 1594 $(".method-tooltip").hide() 1595 $(".action-tooltip").show() 1596 writeCookie(strSiteName + "_switch_function_name", "method") 1597 } 1598 1599 // Get the existing tooltip instance 1600 let tooltipInstance = bootstrap.Tooltip.getInstance(el); 1601 if (tooltipInstance) { 1602 // Update the content of the tooltip while it's still shown 1603 tooltipInstance.setContent({ 1604 '.tooltip-inner': $(el).attr("data-bs-title") 1605 }); 1606 tooltipInstance.update(); // Refresh the tooltip position and size 1607 } else { 1608 // Create a new tooltip instance if not already initialized 1609 new bootstrap.Tooltip(el, { 1610 title: $(el).attr("data-bs-title"), 1611 trigger: 'hover' 1612 }); 1613 } 1614 } 1615 TextHighlight.init(); 1616 $("#headerMethod").show() 1617 $("#headerMethod_internaltx").show() 1618 $("#headerMethod_AA").show() 1619 $("#headerMethod_label").show() 1620 1621} 1622 1623function initPopover() { 1624 const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]') 1625 const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl)) 1626} 1627 1628function registerPreviewButtonEvent() { 1629 document.removeEventListener('click', handleTxPreviewOnClick); 1630 document.addEventListener('click', handleTxPreviewOnClick); 1631 1632 if (window.top != window.self) { 1633 window.parent.document.removeEventListener('click', handleTxPreviewOnClick); 1634 window.parent.document.addEventListener('click', handleTxPreviewOnClick); 1635 } 1636} 1637 1638var txPreviewPopoverGlobal = null; 1639function handleTxPreviewOnClick(e) { 1640 var targetedClass = e.target.closest('.js-tnx-preview'); 1641 1642 if (txPreviewPopoverGlobal !== null) { 1643 if ( 1644 !(targetedClass && 1645 txPreviewPopoverGlobal === bootstrap.Popover.getOrCreateInstance(targetedClass)) 1646 ) { 1647 txPreviewPopoverGlobal.hide(); 1648 } else { 1649 // if the same element is clicked again, need to hide the popover and do nothing 1650 let currrentModel = bootstrap.Popover.getOrCreateInstance(targetedClass) 1651 if (currrentModel && currrentModel._isShown()) { 1652 currrentModel.hide(); 1653 return; 1654 } 1655 } 1656 1657 } 1658 1659 if (e.target.closest('.js-tnx-preview')) { 1660 txPreviewPopoverGlobal = bootstrap.Popover.getOrCreateInstance(targetedClass); 1661 txPreviewPopoverGlobal.show(); 1662 } 1663 1664 if (targetedClass) { 1665 const self = $(targetedClass); 1666 const isInitialized = self.data("initialized"); 1667 1668 if (isInitialized === false) { 1669 const txHash = $.trim(self.parents("tr").find('.myFnExpandBox_searchVal').text()); 1670 1671 $.ajax({
1672 type: 'Get', 1673 url: '/txsHandler.ashx', 1674 data: { strSearchVal: txHash, toggleAction: "popover", actionParam: "txs" }, 1675 }).done(function (data, textStatus, xhr) { 1676 self.data("initialized", true); 1677 1678 if (window.top != window.self) { 1679 txPreviewPopoverGlobal.dispose() 1680 txPreviewPopoverGlobal = bootstrap.Popover.getOrCreateInstance(targetedClass); 1681 txPreviewPopoverGlobal._config.content = data; 1682 txPreviewPopoverGlobal.show() 1683 txPreviewPopoverGlobal._config.container = window.parent.document.body 1684 1685 txPreviewPopoverGlobal._element.addEventListener('hidden.bs.popover', () => { 1686 txPreviewPopoverGlobal._config.container = window.document.body 1687 txPreviewPopoverGlobal.update(); 1688 }) 1689 txPreviewPopoverGlobal._element.addEventListener('shown.bs.popover', () => { 1690 txPreviewPopoverGlobal._config.container = window.parent.document.body 1691 txPreviewPopoverGlobal.update(); 1692 }) 1693 } else { 1694 txPreviewPopoverGlobal.tip.querySelectorAll(".popover-body")[0].innerHTML = data 1695 txPreviewPopoverGlobal._config.content = data; 1696 txPreviewPopoverGlobal.update(); 1697 } 1698 }); 1699 } 1700 } 1701 1702} 1703 1704function initAdvPopover() { 1705 const popoverTriggerList = document.querySelectorAll('.myFnExpandBoxData'); 1706 const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl)); 1707} 1708 1709function registerDataPreviewButtonEvent() { 1710 $(".myFnExpandBoxData").on("click", function (event) { 1711 const self = $(event.currentTarget); 1712 const isInitialized = self.data("initialized"); 1713 1714 if (isInitialized === false) { 1715 const popover = bootstrap.Popover.getOrCreateInstance(self[0]); 1716 var self_parent_tr = self.parents("tr"); 1717 //var str_self_count = self_parent_tr.find('.myFnExpandBox_withData').attr("counter-data"); 1718 var str_self_next = self_parent_tr.find('.myFnExpandBox_withData').attr("box-data"); 1719 var str_self_next_full = self_parent_tr.find('.myFnExpandBox_withData').attr("box-data-full"); 1720 var str_self_headers = self_parent_tr.find('.myFnExpandBox_withData').attr("box-header"); 1721 var strData = expandBoxWithData(str_self_next.split(','), str_self_headers.split(','), str_self_next_full.split(',')); 1722 1723 //popover.setContent({ 1724 // ".popover-body": strData 1725 //}); 1726 self.data("initialized", true); 1727 1728 popover.dispose(); 1729 1730 const popover_add = new bootstrap.Popover(self[0], { 1731 "content": function () { 1732 return strData; 1733 }, 1734 "html": true, 1735 "sanitize": false 1736 }).show(); 1737 1738 $('[data-bs-add-toggle="tooltip"]').tooltip(); 1739 self[0].addEventListener('shown.bs.popover', () => { 1740 $('[data-bs-add-toggle="tooltip"]').tooltip(); 1741 }); 1742 } 1743 }); 1744} 1745 1746function expandBoxWithData(dataArray, dataHeader, dataArrayFull) { 1747 var strResult = ""; 1748 if (dataArray.length == 0 || dataArrayFull.length == 0 || dataArray.length != dataHeader.length) { 1749 strResult += "<tr>"; 1750 strResult += '<td>'; 1751 strResult += "something wrong"; 1752 strResult += "</td>"; 1753 strResult += "</tr>"; 1754 } 1755 else { 1756 var strResult = "<h4 class='fs-base fw-bold mb-4'>Additional Info</h4>"; 1757 for (let i = 0; i < dataArray.length; i++) { 1758 var fullData = dataArrayFull[i] || dataArray[i]; 1759 if (fullData == "") { 1760 continue; 1761 } 1762 var strCopyButton = "<button type='button' class='btn btn-sm btn-white d-inline-flex align-items-center gap-1 mt-2' onclick='generateCopyFunction(this, this.getAttribute(\"data-copy-text\"))' data-copy-text='" + htmlEnc(fullData) + "' data-bs-add-toggle='tooltip' data-bs-placement='top' title='Copy " + htmlEnc(dataHeader[i]) + " Data'><i class='far fa-copy fa-fw'></i>Copy " + htmlEnc(dataHeader[i]) + " Data</button>"; 1763 strResult += "<h6 class='fw-bold mb-1'>" + htmlEnc(dataHeader[i]) + ":</h6>"; 1764 strResult += "<div class='overflow-auto scrollbar-custom text-break' style='max-height: 15rem; white-space: normal;
1764 overflow-wrap: anywhere;'>" + htmlEnc(fullData) + "</div>" + strCopyButton; 1765 strResult += "<hr class='hr-space'>"; 1766 } 1767 } 1768 return strResult; 1769} 1770 1771function generateCopyFunction(el, text) { 1772 try { 1773 1774 //copy to clipboard code 1775 var elem = document.createElement('textarea'); 1776 elem.value = text; 1777 document.body.appendChild(elem); 1778 elem.select(); 1779 document.execCommand('copy'); 1780 document.body.removeChild(elem); 1781 1782 //get i element and original image class 1783 generateCopyIcon(el, "Copied"); 1784 1785 } catch (err) { 1786 } 1787} 1788 1789function generateCopyIcon(el, tooltipText) { 1790 var iElem = $(el).children("i")[0]; 1791 var oriImageClass = $(iElem).attr("class"); 1792 var oriTooltip = $(el).attr('data-bs-original-title') || $(el).attr('data-original-title') || $(el).attr('title') || "Copy"; 1793 var checkImageClass = 'fa fa-check btn-icon__inner' 1794 1795 $(iElem).removeClass(oriImageClass).addClass(checkImageClass); 1796 $(el).attr('data-original-title', tooltipText); 1797 $(el).attr('data-bs-original-title', tooltipText); 1798 $(el).attr('title', tooltipText); 1799 1800 setTimeout(() => { 1801 $(el).tooltip('show'); 1802 }, 1); 1803 1804 setTimeout(() => { 1805 $(iElem).removeClass(checkImageClass).addClass(oriImageClass); 1806 $(el).attr('data-original-title', oriTooltip); 1807 $(el).attr('data-bs-original-title', oriTooltip); 1808 $(el).attr('title', oriTooltip); 1809 }, 1000) 1810} 1811 1812function writeCookie(key, value, days) { 1813 var date = new Date(); 1814 days = days || 365; 1815 date.setTime(+ date + (days * 86400000)); 1816 window.document.cookie = key + "=" + value + "; expires=" + date.toGMTString() + "; path=/"; 1817 return value; 1818} 1819 1820//use by nft-tarnsfers, nft-trades, nft-last-mints 1821if (!String.prototype.format) { 1822 String.prototype.format = function () { 1823 var args = arguments; 1824 return this.replace(/{(\d+)}/g, function (match, number) { 1825 return typeof args[number] != 'undefined' ? args[number] : match; 1826 }); 1827 }; 1828} 1829//use by advance_search, nft-last-mints, nft-trades, nft-transfers, nftitem, tokenholdingnew 1830function numberWithCommas(x) { 1831 return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); 1832} 1833//use by home(js), nft-tarnsfers, nft-trades, nft-last-mints, name-lookup-search 1834function getTruncatedAddress(strAddress, maxW = "max-width: 11.5rem") { 1835 var strVal = ""; 1836 if (strAddress !== "") { 1837 1838 const isAddress = /^0x[0-9a-fA-F]{40}$/.test(strAddress); 1839 if (!isAddress) { 1840 strVal = "<span class='hash-tag text-truncate' style='" + maxW + "'>" + htmlEnc(strAddress) + "</span>"; 1841 return strVal; 1842 } 1843 1844 var strTruncateType = getCookie(strSiteName + "_address_format"); 1845 if (strTruncateType === "") { 1846 strTruncateType = "0"; 1847 } 1848 1849 if (strTruncateType === "0" || strTruncateType === null || strTruncateType === "") { 1850 strVal = "<span data-highlight-target='" + strAddress + "'>" + strAddress.substring(0, 10) + "..." + strAddress.substring(strAddress.length - 9) + "</span>"; 1851 } else if (strTruncateType === "1") { 1852 strVal = "<span class='hash-tag text-truncate' style='" + maxW + "'>" + htmlEnc(strAddress) + "</span>"; 1853 } 1854 } 1855 return strVal; 1856} 1857//use by nft-tarnsfers, nft-trades, nft-last-mints,name-lookup-search 1858function generateCopyToClipboard(strText, count, title) { 1859 if (!title) title = "Copy Address"; 1860 var res = "<a class='js-clipboard link-secondary' href='javascript:;' data-clipboard-text='" + strText + "'" 1861 res += "data-bs-toggle='tooltip' data-bs-trigger='hover' data-bs-html='true' data-bs-boundary='viewport' title='" + title +"' data-hs-clipboard-options='{ " 1862 res += '"type": "tooltip", "successText": "Copied!", "classChangeTarget": "#linkIcon_' + count + '", ' 1863 res += '"defaultClass": "fa-copy", "successClass": "fa-check" }' 1864 res += "'>" 1865 res += "<i id='linkIcon_" + count + "' class='far fa-copy fa-fw'></i> " 1866 res += "</a>" 1867 1868 return res; 1869} 1870 1871//global init 1872function registerTrigger() { 1873 const triggerHover = document.querySelectorAll('a[data-bs-toggle="tooltip"]:not([data-bs-trigger="hover"]):not([data-clipboard-text])'); 1874 triggerHover.forEach(element => { 1875 var triggerHoverTooltip = bootstrap.Tooltip.getInstance(element); 1876 if (triggerHoverTooltip) { 1877 triggerHoverTooltip.dispose(); 1878 element.setAttribute("data-bs-trigger", "hover"); 1879 triggerHoverTooltip = bootstrap.Tooltip.getOrCreateInstance(element); 1880 } 1881 });
1882} 1883 1884function handleBackButtonTooltip() { 1885 let el_handleTooltipPageShow = document.querySelector('.bs-tooltip-auto') 1886 if (el_handleTooltipPageShow) { 1887 let targetedElem = document.querySelector(`[aria-describedby='${document.querySelector('.bs-tooltip-auto').getAttribute('id')}']`) 1888 if (targetedElem) { 1889 let tooltipTemp = bootstrap.Tooltip.getInstance(targetedElem); 1890 tooltipTemp.hide(); 1891 } 1892 } 1893} 1894 1895function htmlEnc(s) { 1896 if (s != null) { 1897 return s.replace(/&/g, '&') 1898 .replace(/</g, '<') 1899 .replace(/>/g, '>') 1900 .replace(/'/g, ''') // Single quote 1901 .replace(/"/g, '"') // Double quote 1902 .replace(/`/g, '`') // Backtick 1903 .replace(/\//g, '/') // Forward slash 1904 .replace(/\\/g, '\') // Backslash 1905 } else { 1906 return "" 1907 } 1908} 1909 1910window.removeEventListener('pageshow', handleBackButtonTooltip); 1911window.addEventListener('pageshow', handleBackButtonTooltip); 1912registerTrigger(); 1913 1914var themeMode = localStorage.getItem('theme'); 1915if (themeMode === null) { 1916 themeMode = 'light'; 1917} 1918 1919var cThemeMode = getCookie('displaymode'); 1920 1921$(document).ready(function () { 1922 1923 $('.theme-btn').click(function () { 1924 themeMode = localStorage.getItem('theme'); 1925 cThemeMode = themeMode; 1926 if (themeMode === null) { 1927 themeMode = 'light'; 1928 } 1929 1930 $("iframe").each(function () { 1931 var src = $(this).contents().find('html'); 1932 1933 if (cThemeMode === 'light' || themeMode === 'light') { 1934 src.attr('data-bs-theme', 'light'); 1935 } else if (cThemeMode === 'dim' || themeMode === 'dim') { 1936 src.attr('data-bs-theme', 'dim'); 1937 } else if (cThemeMode === 'dark' || themeMode === 'dark') { 1938 src.attr('data-bs-theme', 'dark'); 1939 } else if (cThemeMode === 'auto' || themeMode === 'auto') { 1940 src.attr('data-bs-theme', getCookie('site_auto_theme')); 1941 } 1942 1943 if (src.prevObject.prevObject[0].id === "token_analytics_pageiframe") { 1944 var iframeSrc = src.prevObject.prevObject.contents().find('iframe'); 1945 var htmlSrc = iframeSrc.contents().find('html'); 1946 if (cThemeMode === 'light' || themeMode === 'light') { 1947 htmlSrc.attr('data-bs-theme', 'light'); 1948 } else if (cThemeMode === 'dim' || themeMode === 'dim') { 1949 htmlSrc.attr('data-bs-theme', 'dim'); 1950 } else if (cThemeMode === 'dark' || themeMode === 'dark') { 1951 htmlSrc.attr('data-bs-theme', 'dark'); 1952 } else if (cThemeMode === 'auto' || themeMode === 'auto') { 1953 htmlSrc.attr('data-bs-theme', getCookie('site_auto_theme')); 1954 } 1955 } 1956 }); 1957 1958 var className = document.getElementsByClassName('editor'); 1959 var classNameCount = className.length; 1960 for (var j = 0; j < classNameCount; j++) { 1961 var aceEditor = ace.edit(className[j].id); 1962 var editorSearch = ace.edit(className[j].id); 1963 if (cThemeMode === 'light' || themeMode === 'light') { 1964 aceEditor.setTheme(ace_editor_theme); 1965 } else if (cThemeMode === 'dim' || themeMode === 'dim') { 1966 aceEditor.setTheme(ace_editor_theme_dim); 1967 } else if (cThemeMode === 'dark' || themeMode === 'dark') { 1968 aceEditor.setTheme(ace_editor_theme_dark); 1969 } else if (cThemeMode === 'auto' || themeMode === 'auto') { 1970 aceEditor.setTheme('data-bs-theme', getCookie('site_auto_theme')); 1971 } 1972 } 1973 }); 1974 1975}); 1976 1977(function () { 1978 if (cThemeMode === 'light' || themeMode === 'light') { 1979 document.documentElement.setAttribute('data-bs-theme', 'light'); 1980 } else if (cThemeMode === 'dim' || themeMode === 'dim') { 1981 document.documentElement.setAttribute('data-bs-theme', 'dim'); 1982 } else if (cThemeMode === 'dark' || themeMode === 'dark') { 1983 document.documentElement.setAttribute('data-bs-theme', 'dark'); 1984 } else if (cThemeMode === 'auto' || themeMode === 'auto') { 1985 document.documentElement.setAttribute('data-bs-theme', getCookie('site_auto_theme')); 1986 } 1987})(); 1988 1989//Private Note Quick Add Edit Start
1990function appendReturnUrl(returnUrl) { 1991 let hash = ""; 1992 let isIframe = (window.self !== window.top); 1993 1994 try { 1995 // Check if in an iframe and if same-origin with parent 1996 if (isIframe && window.parent.location.origin === window.location.origin) { 1997 hash = window.parent.location.hash.substring(1); 1998 } else { 1999 hash = window.location.hash.substring(1); 2000 } 2001 } catch (e) { 2002 console.warn("Cross-origin access blocked"); 2003 } 2004 2005 // Add hash if it exists, with proper URL encoding 2006 if (hash) { 2007 returnUrl += "&hash=" + encodeURIComponent(hash); 2008 } 2009 2010 // Redirect to login 2011 if (isIframe) { 2012 window.parent.location.href = "/login?" + returnUrl; 2013 } else { 2014 window.location.href = "/login?" + returnUrl; 2015 } 2016} 2017function quickEditTxPrivateNote(txhash, result, element) { 2018 window.parent.document.getElementById("modalElement").value = element; 2019 window.parent.$('#tnxPrivateNoteModal').modal('show'); 2020 window.parent.document.getElementById("editTxnNote").value = result; 2021 window.parent.document.getElementById("saveTxnNoteHash").value = txhash; 2022 window.parent.document.getElementById("txtPrivateNoteTip").innerHTML = ""; 2023} 2024function quickAddTxPrivateNote(txhash, element) { 2025 window.parent.document.getElementById("modalElement").value = element; 2026 window.parent.$('#tnxPrivateNoteModal').modal('show'); 2027 window.parent.document.getElementById("editTxnNote").value = ""; 2028 window.parent.document.getElementById("saveTxnNoteHash").value = txhash; 2029 window.parent.document.getElementById("txtPrivateNoteTip").innerHTML = ""; 2030} 2031function quickSubmitTxPrivateNote() { 2032 var txhash = window.parent.document.getElementById("saveTxnNoteHash").value; 2033 var privnote = htmlEnc(window.parent.document.getElementById("editTxnNote").value.trim()); 2034 2035 $.ajax({
2036 type: 'Get', 2037 url: '/updateHandler', 2038 data: { 2039 opr: 'updatenotetx', 2040 tx: txhash, 2041 txt: privnote, 2042 sid: sid 2043 }, 2044 success: function (res) { 2045 if (res == 0) { 2046 window.parent.$('#tnxPrivateNoteModal').modal('hide'); 2047 var element = window.parent.document.getElementById("modalElement").value; 2048 updateTransactionHash(txhash, privnote, element) 2049 } else if (res == 1) { 2050 $("#txtPrivateNoteTip").html("<i class='far fa-exclamation-circle text-secondary'></i> Sorry but to update your private note, You have to be <a href='/login'><b>Logged In</b></a> first."); 2051 } else if (res == 2) { 2052 $("#txtPrivateNoteTip").html("<i class='far fa-exclamation-triangle text-danger'></i> Unable to update private note. General exception error occurred."); 2053 } else if (res == 3) { 2054 window.parent.$('#tnxPrivateNoteModal').modal('hide'); 2055 var element = window.parent.document.getElementById("modalElement").value; 2056 removePrivateNote(element) 2057 } else if (res == 4) { 2058 $("#txtPrivateNoteTip").html("<i class='far fa-exclamation-triangle text-danger'></i> Unable to remove private note. General exception error occurred."); 2059 } else if (res == 5) { 2060 $("#txtPrivateNoteTip").html("<i class='far fa-exclamation-triangle text-danger'></i> Sorry, we were unable to add a new private Note. You have exceeded the maximum allowed quota for your account."); 2061 } else if (res == 6) { 2062 $("#txtPrivateNoteTip").html("<i class='far fa-exclamation-triangle text-danger'></i> Invalid Tx Hash"); 2063 } 2064 }, 2065 error: function (XMLHttpRequest, textStatus, errorThrown) { 2066 console.log(textStatus); 2067 } 2068 }); 2069}; 2070function removePrivateNote(element) { 2071 const existingElement = element.closest('div.d-flex').nextElementSibling; 2072 if (existingElement != null) { 2073 existingElement.remove() 2074 } 2075} 2076function updateTransactionHash(searchHash, privnote, element) { 2077 // Encode privnote and searchHash to prevent XSS 2078 privnote = htmlEnc(privnote); 2079 searchHash = encodeURIComponent(searchHash); 2080 2081 // Create a new HTML element instead of setting `innerHTML` directly 2082 const newDiv = document.createElement('div'); 2083 newDiv.classList.add('d-inline-flex', 'align-items-center', 'gap-1', 'appendPrivNote'); 2084 newDiv.setAttribute('data-bs-toggle', 'popover'); 2085 newDiv.setAttribute('data-bs-trigger', 'hover'); 2086 newDiv.setAttribute('data-bs-content', privnote); 2087 2088 const icon = document.createElement('i'); 2089 icon.classList.add('far', 'fa-regular', 'small', 'fa-note-sticky', 'text-muted', 'mt-0.5'); 2090 newDiv.appendChild(icon); 2091 2092 const spanText = document.createElement('span'); 2093 spanText.classList.add('text-muted', 'small', 'hash-tag', 'text-truncate'); 2094 spanText.textContent = privnote; 2095 newDiv.appendChild(spanText); 2096 2097 // Replace or insert the new element as required 2098 const existingElement = element.closest('div.d-flex').nextElementSibling; 2099 if (existingElement != null && existingElement.classList.contains('d-inline-flex')) { 2100 existingElement.replaceWith(newDiv); 2101 } else { 2102 element.closest('div.d-flex').insertAdjacentElement('afterend', newDiv); 2103 } 2104 2105 // Create the edit button safely 2106 const editBtnSpan = document.createElement('span'); 2107 editBtnSpan.classList.add('group-lg-hover', 'transition-all'); 2108 editBtnSpan.setAttribute('data-bs-toggle', 'tooltip'); 2109 editBtnSpan.setAttribute('data-bs-trigger', 'hover'); 2110 editBtnSpan.setAttribute('data-bs-placement', 'top'); 2111 editBtnSpan.setAttribute('title', 'Edit Transaction Private Note'); 2112 2113 const editLink = document.createElement('a'); 2114 editLink.classList.add('link-muted'); 2115 editLink.setAttribute('href', 'javascript:;'); 2116 editLink.addEventListener('click', function () { 2117 quickEditTxPrivateNote(searchHash, privnote, this); 2118 });
2119 2120 const editIcon = document.createElement('i'); 2121 editIcon.classList.add('far', 'fa-pen-to-square'); 2122 editLink.appendChild(editIcon); 2123 editBtnSpan.appendChild(editLink); 2124 2125 element.closest('span.group-lg-hover').replaceWith(editBtnSpan); 2126 2127 initPopover(); 2128 $("[data-bs-toggle='tooltip']").tooltip(); 2129} 2130//Private Note Quick Add Edit End 2131 2132//Private Name Tag Quick Add Edit Start 2133var strAddressPublicTag = "" 2134var strAddressENS = "" 2135var blnIsContract = false 2136function quickEditPrivateNameTag(address, addressPrivateTag, addressPublicTag, addressENS, isContract, privateNote, element, istab) { 2137 2138 strAddressPublicTag = htmlEnc(addressPublicTag) 2139 strAddressENS = htmlEnc(addressENS) 2140 blnIsContract = htmlEnc(isContract) 2141 addressPrivateTag = htmlEnc(addressPrivateTag) 2142 privateNote = htmlEnc(privateNote) 2143 2144 if (istab === "true") { 2145 window.parent.document.getElementById("modalElementPrivateNameTag").value = element; 2146 window.parent.$('#privateNameTagModal').modal('show'); 2147 window.parent.document.getElementById("txtAddress").value = address; 2148 window.parent.document.getElementById("txtPrivateNameTagMain").value = addressPrivateTag; 2149 window.parent.document.getElementById("txtPrivateNoteAreaMain").value = privateNote; 2150 //window.parent.document.getElementById("privatetagtip").innerHTML = ""; 2151 } 2152 else { 2153 document.getElementById("modalElementPrivateNameTag").value = element; 2154 $('#privateNameTagModal').modal('show'); 2155 document.getElementById("txtAddress").value = address; 2156 document.getElementById("txtPrivateNameTagMain").value = addressPrivateTag; 2157 document.getElementById("txtPrivateNoteAreaMain").value = privateNote; 2158 //document.getElementById("privatetagtip").innerHTML = ""; 2159 } 2160 2161} 2162function quickAddPrivateNameTag(address, addressPrivateTag, addressPublicTag, addressENS, isContract, privateNote, element, istab) { 2163 2164 strAddressPublicTag = htmlEnc(addressPublicTag) 2165 strAddressENS = htmlEnc(addressENS) 2166 blnIsContract = htmlEnc(isContract) 2167 2168 if (istab === "true") { 2169 window.parent.document.getElementById("modalElementPrivateNameTag").value = element; 2170 window.parent.$('#privateNameTagModal').modal('show'); 2171 window.parent.document.getElementById("txtAddress").value = address; 2172 window.parent.document.getElementById("txtPrivateNameTagMain").value = ""; 2173 window.parent.document.getElementById("txtPrivateNoteAreaMain").value = ""; 2174 //window.parent.document.getElementById("privatetagtip").innerHTML = ""; 2175 } 2176 else { 2177 document.getElementById("modalElementPrivateNameTag").value = element; 2178 $('#privateNameTagModal').modal('show'); 2179 document.getElementById("txtAddress").value = address; 2180 document.getElementById("txtPrivateNameTagMain").value = ""; 2181 document.getElementById("txtPrivateNoteAreaMain").value = ""; 2182 //document.getElementById("privatetagtip").innerHTML = ""; 2183 } 2184 2185} 2186function quickSubmitPrivateNameTag() { 2187 2188 var address = htmlEnc(document.getElementById("txtAddress").value); 2189 address = address.replace(/^\s+|\s+$/gm, ''); 2190 var privname = htmlEnc(document.getElementById("txtPrivateNameTagMain").value); 2191 var privnote = htmlEnc(document.getElementById("txtPrivateNoteAreaMain").value); 2192 2193 $.ajax({
2194 type: 'Get', 2195 url: '/updateHandler', 2196 data: { 2197 opr: 'updatenoteaddr', 2198 a: address, 2199 nametag: privname, 2200 txt: privnote, 2201 isReturnHtml: '1', 2202 sid: sid 2203 }, 2204 success: function (res) { 2205 2206 if (!isNaN(res)) { 2207 res = parseInt(res); 2208 2209 if (res == 0) { 2210 $('#privateNameTagModal').modal('toggle'); 2211 var element = document.getElementById("modalElementPrivateNameTag").value; 2212 UpdatePrivateNameTag(address, privname, blnIsContract, privnote, element) 2213 } else if (res == 1) { 2214 $("#privatenotetipMain").html("<font color='gray'><i class='fa fa-exclamation-circle'></i> Sorry but to update your private Note, You have to be <font color='#48B8EE'><a href='/login'><b>Logged In</b></a></font> first.</font>"); 2215 } else if (res == 2) { 2216 $("#privatenotetipMain").html("<font color='gray'><i class='far fa-exclamation-triangle'></i> Unable to update private Note. General exception error occurred.</font>"); 2217 } else if (res == 3) { 2218 $('#privateNameTagModal').modal('toggle'); 2219 } else if (res == 4) { 2220 $("#privatenotetipMain").html("<font color='gray'><i class='far fa-exclamation-triangle'></i> Unable to remove private Note. General exception error occurred.</font>"); 2221 } else if (res == 5) { 2222 $("#privatenotetipMain").html("<font color='red'><i class='far fa-exclamation-triangle'></i> Sorry, we were unable to add a new private Note. You have exceeded the maximum allowed quota for your account</font>"); 2223 } 2224 } 2225 else { 2226 $('#privateNameTagModal').modal('toggle'); 2227 var element = document.getElementById("modalElementPrivateNameTag").value; 2228 removePrivateNameTag(element, res) 2229 } 2230 }, 2231 error: function (XMLHttpRequest, textStatus, errorThrown) { 2232 } 2233 }); 2234} 2235 2236function UpdatePrivateNameTag(address, privname, blnIsContract, privNote, element) { 2237 2238 address = htmlEnc(address); 2239 privname = htmlEnc(privname); 2240 privNote = htmlEnc(privNote); 2241 2242 address = address.toLowerCase(); 2243 //const links = document.querySelectorAll('a.js-clipboard.link-secondary'); 2244 const links = document.querySelectorAll( 2245 'a.js-clipboard.link-secondary, a.js-clipboard-required-confirmation.link-secondary' 2246 ); 2247 2248 for (let link of links) { 2249 2250 const linkAddress = link.getAttribute('data-clipboard-text'); 2251 if (linkAddress && linkAddress.toLowerCase() === address) { 2252 let displayElement = link.closest('div.d-flex'); 2253 if (displayElement && displayElement.closest('td') && displayElement.firstElementChild && !displayElement.classList.contains('d-none') && privname !== "") { 2254 var tooltip = 'My Name Tag: ' + privname + ' <br> (' + address + ')'; 2255 if (strAddressPublicTag !== "") { 2256 tooltip = 'My Name Tag: ' + privname + ' <br> Public Tag: ' + strAddressPublicTag + ' (' + address + ')'; 2257 } 2258 2259 // Create the icon element 2260 const icon = document.createElement('i'); 2261 icon.classList.add('far', 'fa-memo', 'text-secondary'); 2262 icon.setAttribute('data-bs-toggle', 'tooltip'); 2263 icon.setAttribute('data-bs-title', 'Contract'); 2264 2265 // Create nametag element 2266 const nametag = document.createElement('a'); 2267 nametag.href = "/address/" + address; 2268 nametag.className = "badge border text-dark fw-normal fs-sm rounded-pill hash-tag text-truncate py-1.5 bg-light border-dark dark:border-white border-opacity-10"; 2269 nametag.setAttribute("data-bs-toggle", "tooltip"); 2270 nametag.setAttribute("data-bs-trigger", "hover"); 2271 nametag.setAttribute("data-bs-html", "true"); 2272 nametag.setAttribute("data-bs-title", tooltip); 2273 2274 if (blnIsContract === "true") { 2275 nametag.appendChild(icon); 2276 nametag.innerHTML += " " + privname; 2277 } 2278 else { 2279 nametag.innerHTML = privname; 2280 } 2281 2282 2283 displayElement.replaceChild(nametag, displayElement.firstElementChild); 2284 2285 TextHighlight.addContent(privname, nametag); 2286 2287 // Create the edit button 2288 const editBtnSpan = document.createElement('span'); 2289 editBtnSpan.classList.add('group-lg-hover', 'transition-all'); 2290 editBtnSpan.setAttribute('data-bs-toggle', 'tooltip'); 2291 editBtnSpan.setAttribute('data-bs-trigger', 'hover'); 2292 editBtnSpan.setAttribute('data-bs-placement', 'top'); 2293 editBtnSpan.setAttribute('title', 'Edit Private Name Tag'); 2294 2295 const editLink = document.createElement('a'); 2296 editLink.classList.add('link-muted'); 2297 //editLink.setAttribute('href', 'javascript:;'); 2298 editLink.href = "#"; 2299 editLink.addEventListener('click', function (event) { 2300 event.preventDefault(); 2301 quickEditPrivateNameTag(address, privname, strAddressPublicTag, strAddressENS, blnIsContract, privNote, this); 2302 }); 2303 2304 const editIcon = document.createElement('i'); 2305 editIcon.classList.add('far', 'fa-pen-to-square'); 2306 editLink.appendChild(editIcon); 2307 editBtnSpan.appendChild(editLink); 2308 2309 //element.closest('span.group-lg-hover').replaceWith(editBtnSpan); 2310 displayElement.querySelector('span.group-lg-hover').replaceWith(editBtnSpan); 2311 } 2312 } 2313 } 2314 2315 $("[data-bs-toggle='tooltip']").tooltip(); 2316} 2317function removePrivateNameTag(element, res) { 2318 try { 2319 if (res.html) { 2320 const match = res.html.match(/data-clipboard-text=['"]([^'"]+)['"]/); 2321 let address = match ? match[1].toLowerCase() : null; 2322 2323 //const links = document.querySelectorAll('a.js-clipboard.link-secondary'); 2324 const links = document.querySelectorAll( 2325 'a.js-clipboard.link-secondary, a.js-clipboard-required-confirmation.link-secondary' 2326 ); 2327 2328 for (let link of links) { 2329 const linkAddress = link.getAttribute('data-clipboard-text'); 2330 if (linkAddress && linkAddress.toLowerCase() === address) { 2331 let displayElement = link.closest('div.d-flex'); 2332 if (displayElement) { 2333 displayElement.innerHTML = res.html; 2334 } 2335 } 2336 } 2337 } 2338 } catch (error) { 2339 console.error("Error removing private name tag:", error); 2340 } 2341} 2342 2343//Private Name Tag Quick Add Edit End 2344 2345//// CONTENT BLOCKER DETECTION 2346//// ======================================================= 2347//const POLL_MS = 250; 2348//const MAX_POLLS = 12; 2349 2350//function show(group, showAlt) { 2351// group.querySelector('.default-content').style.display = showAlt ? 'none' : ''; 2352// group.querySelector('.alternate-content').style.display = showAlt ? '' : 'none'; 2353//} 2354 2355//function waitForCreative(container, group, n = 0) { 2356// const hasCreative = container.querySelector('iframe,img') && container.offsetHeight > 0; 2357// if (hasCreative) return show(group, false); 2358// if (n < MAX_POLLS) { 2359// return setTimeout(() => waitForCreative(container, group, n + 1), POLL_MS); 2360// } 2361// show(group, true); 2362//} 2363 2364//window.addEventListener('DOMContentLoaded', () => { 2365// document.querySelectorAll('[data-featured-group]').forEach(group => { 2366// const container = group.querySelector('.featured-container'); 2367// if (!container) return; 2368 2369// /* Grab the first provider <script src> inside the container */ 2370// const tag = container.querySelector('script[src]'); 2371// if (!tag) { 2372// return waitForCreative(container, group); 2373// } 2374 2375// /* Probe the same URL with <link rel="preload"> (tiny request) */ 2376// const probe = document.createElement('link'); 2377// probe.rel = 'preload'; 2378// probe.as = 'script'; 2379// probe.href = tag.src; 2380 2381// probe.onerror = () => show(group, true); 2382// probe.onload = () => waitForCreative(container, group); 2383 2384// document.head.appendChild(probe); 2385// });
2386//}); 2387 2388function initTimestampSwitcher(elId, dropdownId, copyBtnId) { 2389 const el = document.getElementById(elId); 2390 const switcher = document.getElementById(dropdownId); 2391 const copyBtn = document.getElementById(copyBtnId); 2392 if (!el || !switcher) return; 2393 2394 const modeInput = switcher.querySelector("#tsModeValue"); 2395 const modeLabel = switcher.querySelector("#tsModeLabel"); 2396 const triggerBtn = switcher.querySelector(".ts-dropdown-trigger"); 2397 const tooltipTarget = switcher.querySelector(".ts-tooltip-target"); 2398 const menuEl = switcher.querySelector(".dropdown-menu"); 2399 const utcValueEl = switcher.querySelector("#tsUtcValue"); 2400 const localValueEl = switcher.querySelector("#tsLocalValue"); 2401 const unixValueEl = switcher.querySelector("#tsUnixValue"); 2402 const copyButtons = switcher.querySelectorAll(".ts-copy-btn"); 2403 2404 const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 2405 const timestamp = Number(el.dataset.timestamp); 2406 const date = new Date(timestamp * 1000); 2407 const tooltipTarget$ = tooltipTarget ? $(tooltipTarget) : null; 2408 2409 if (switcher.dataset.tsInitialized === "1") { 2410 refreshMenuValues(); 2411 const mode = getMode(); 2412 setMode(mode); 2413 render(mode); 2414 updateCopyButton(); 2415 return; 2416 } 2417 2418 function pad(n) { 2419 return n.toString().padStart(2, "0"); 2420 } 2421 2422 function formatUTC(d) { 2423 let h = d.getUTCHours(); 2424 const ampm = h >= 12 ? "PM" : "AM"; 2425 h = h % 12 || 12; 2426 return `${months[d.getUTCMonth()]}-${pad(d.getUTCDate())}-${d.getUTCFullYear()} ` + 2427 `${pad(h)}:${pad(d.getUTCMinutes())}:${pad(d.getUTCSeconds())} ${ampm} +UTC`; 2428 } 2429 2430 function formatLocal(d) { 2431 let h = d.getHours(); 2432 const ampm = h >= 12 ? "PM" : "AM"; 2433 h = h % 12 || 12; 2434 const offsetMinutes = -d.getTimezoneOffset(); 2435 const sign = offsetMinutes >= 0 ? "+" : "-"; 2436 const hours = Math.floor(Math.abs(offsetMinutes) / 60); 2437 const minutes = Math.abs(offsetMinutes) % 60; 2438 const utcOffset = `UTC${sign}${pad(hours)}${minutes ? ":" + pad(minutes) : ""}`; 2439 return `${months[d.getMonth()]}-${pad(d.getDate())}-${d.getFullYear()} ` + 2440 `${pad(h)}:${pad(d.getMinutes())}:${pad(d.getSeconds())} ${ampm} ${utcOffset}`; 2441 } 2442 2443 function getMode() { 2444 if (!modeInput || !modeInput.value) { 2445 return "utc"; 2446 } 2447 return modeInput.value.toLowerCase(); 2448 } 2449 2450 function setMode(mode) { 2451 if (modeInput) { 2452 modeInput.value = mode; 2453 } 2454 } 2455 2456 function refreshMenuValues() { 2457 if (utcValueEl) { 2458 utcValueEl.textContent = formatUTC(date); 2459 } 2460 if (localValueEl) { 2461 localValueEl.textContent = formatLocal(date); 2462 } 2463 if (unixValueEl) { 2464 unixValueEl.textContent = `${timestamp}`; 2465 } 2466 } 2467 2468 function render(mode) { 2469 if (mode === "unix") { 2470 el.textContent = timestamp; 2471 } 2472 else if (mode === "local") { 2473 el.textContent = formatLocal(date); 2474 } 2475 else { 2476 el.textContent = formatUTC(date); 2477 } 2478 if (modeLabel) { 2479 modeLabel.textContent = el.textContent; 2480 } 2481 } 2482 2483 function updateCopyButton() { 2484 if (copyBtn) { 2485 copyBtn.style.display = "none"; 2486 } 2487 } 2488 2489 async function copyText(value, iconEl) { 2490 try { 2491 if (navigator.clipboard && navigator.clipboard.writeText) { 2492 await navigator.clipboard.writeText(value); 2493 } else { 2494 const textarea = document.createElement("textarea"); 2495 textarea.value = value; 2496 textarea.style.position = "fixed"; 2497 textarea.style.opacity = "0"; 2498 document.body.appendChild(textarea); 2499 textarea.focus(); 2500 textarea.select(); 2501 document.execCommand("copy"); 2502 document.body.removeChild(textarea); 2503 } 2504 if (iconEl) { 2505 const icon = iconEl.querySelector("i") || iconEl; 2506 icon.classList.remove("fa-copy"); 2507 icon.classList.add("fa-check"); 2508 const button$ = $(iconEl); 2509 const originalTooltip = button$.attr("data-bs-original-title") || button$.attr("data-original-title") || button$.attr("title") || "Copy"; 2510 const placement = button$.attr("data-bs-placement") || "top"; 2511 const container = button$.attr("data-bs-container") || "body"; 2512 2513 button$.tooltip("dispose"); 2514 button$.removeAttr("data-bs-original-title"); 2515 button$.removeAttr("data-original-title"); 2516 button$.removeAttr("title"); 2517 button$.tooltip({ 2518 trigger: "manual", 2519 placement: placement, 2520 container: container, 2521 title: "Copied!" 2522 }); 2523 button$.tooltip("show"); 2524 2525 setTimeout(() => { 2526 icon.classList.remove("fa-check"); 2527 icon.classList.add("fa-copy"); 2528 button$.tooltip("dispose"); 2529 button$.attr("title", originalTooltip); 2530 button$.attr("data-bs-placement", placement); 2531 button$.attr("data-bs-trigger", "hover"); 2532 button$.attr("data-bs-container", container); 2533 renderFnTooltip(button$, 0); 2534 }, 800); 2535 } 2536 } catch (err) { 2537 console.error("Unable to copy timestamp value", err); 2538 } 2539 } 2540 2541 copyButtons.forEach(icon => { 2542 icon.addEventListener("click", (event) => { 2543 event.preventDefault(); 2544 event.stopPropagation(); 2545 const target = icon.getAttribute("data-copy-target"); 2546 let textToCopy = ""; 2547 if (target === "local") { 2548 textToCopy = localValueEl ? localValueEl.textContent : ""; 2549 } else if (target === "unix") { 2550 textToCopy = unixValueEl ? unixValueEl.textContent : ""; 2551 } else { 2552 textToCopy = utcValueEl ? utcValueEl.textContent : ""; 2553 } 2554 if (textToCopy) { 2555 copyText(textToCopy, icon); 2556 } 2557 }); 2558 });
2559 2560 refreshMenuValues(); 2561 const defaultMode = getMode(); 2562 setMode(defaultMode); 2563 render(defaultMode); 2564 updateCopyButton(); 2565 2566 if (tooltipTarget$ && tooltipTarget$.length) { 2567 tooltipTarget$.attr("data-bs-placement", "top"); 2568 tooltipTarget$.attr("data-bs-trigger", "hover"); 2569 tooltipTarget$.attr("data-bs-container", "body"); 2570 renderFnTooltip(tooltipTarget$, 0); 2571 } 2572 2573 function showMenu() { 2574 if (!menuEl || !triggerBtn) return; 2575 menuEl.classList.add("show"); 2576 switcher.classList.add("show"); 2577 triggerBtn.setAttribute("aria-expanded", "true"); 2578 } 2579 2580 function hideMenu() { 2581 if (!menuEl || !triggerBtn) return; 2582 menuEl.classList.remove("show"); 2583 switcher.classList.remove("show"); 2584 triggerBtn.setAttribute("aria-expanded", "false"); 2585 } 2586 2587 function toggleMenu() { 2588 if (!menuEl) return; 2589 if (menuEl.classList.contains("show")) { 2590 hideMenu(); 2591 } else { 2592 showMenu(); 2593 } 2594 } 2595 2596 if (triggerBtn && menuEl && !switcher.dataset.dropdownClickBound) { 2597 triggerBtn.addEventListener("click", (event) => { 2598 event.preventDefault(); 2599 event.stopPropagation(); 2600 toggleMenu(); 2601 }); 2602 switcher.dataset.dropdownClickBound = "1"; 2603 } 2604 2605 if (!switcher.dataset.outsideCloseBound) { 2606 document.addEventListener("click", (event) => { 2607 const isInsideSwitcher = switcher.contains(event.target); 2608 if (!isInsideSwitcher) { 2609 hideMenu(); 2610 } 2611 }, true); 2612 switcher.dataset.outsideCloseBound = "1"; 2613 } 2614 2615 if (copyButtons && copyButtons.length) { 2616 copyButtons.forEach((btn) => { 2617 const button$ = $(btn); 2618 button$.attr("data-bs-placement", "top"); 2619 button$.attr("data-bs-trigger", "hover"); 2620 button$.attr("data-bs-container", "body"); 2621 renderFnTooltip(button$, 0); 2622 }); 2623 } 2624 2625 switcher.dataset.tsInitialized = "1"; 2626 2627}
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.