1;(function(root, factory) { 2 if (typeof exports === 'object') { 3 require('./adLoader.css') 4 module.exports = factory(require('jquery')) 5 } else { 6 if (typeof jQuery === 'undefined') { 7 throw new Error( 8 "adloader's JavaScript requires jQuery. jQuery must be included before adloader's JavaScript. " 9 ) 10 } 11 root.AdLoader = factory(jQuery) 12 } 13})(window, function($) { 14 window.Global || (Global = {fullHost: window.location.origin, authHost: window.location.origin,apiHost:window.location.origin}); 15 Global.isAndroid = window.navigator.userAgent.indexOf('Android') > -1 || window.navigator.userAgent.indexOf('Linux') > -1; //androidç»ç«¯æè ucæµè§å¨; 16 Global.isiOS = /iPhone|iPad|iPod|ios|IOS/.test(window.navigator.userAgent); 17 18 var loadedAdsKeys = [] 19 // è·ååå¸å 20 function getCityName() { 21 return userInfo('to8to_wap_tname', 'to8to_tname') 22 } 23 24 // è·å uid 25 function getUid() { 26 return userInfo('to8to_uid', 'to8to_uid') 27 } 28 29 // è·åcookieã name ä¸ä¸å¾å«æéè¦è½¬ä¹çå符 30 function getCookie(name) { 31 var r = new RegExp('(\\b)' + name + '=([^;]*)(;|$)') 32 var m = document.cookie.match(r) 33 var val = '' 34 try { 35 val = !m ? '' : decodeURIComponent(m[2]) 36 } catch (e) { 37 val = !m ? '' : m[2] 38 } 39 return val 40 } 41 // å¤æç§»å¨ç«¯ã ç§»å¨ç«¯è¿å true 42 function getDeviceInfo() { 43 return !!navigator.userAgent.match( 44 /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i 45 ) 46 } 47 /* 48 * åç¨æ·ä¿¡æ¯ 49 * wap 为åç§»å¨ç«¯åå¨çä¿¡æ¯ 50 * pc 为PCä¸åå¨çä¿¡æ¯ 51 */ 52 function userInfo(wap, pc) { 53 return getDeviceInfo() ? getCookie(wap) : getCookie(pc) 54 } 55 56 function findItem(dataSource, key, value) { 57 var item = {} 58 if ($.isArray(dataSource)) { 59 for (var i = dataSource.length; i > 0; i--) { 60 if (dataSource[i - 1][key] === value) { 61 item = dataSource[i - 1] 62 break 63 } 64 } 65 } else if (dataSource && dataSource[key] === value) { 66 item = dataSource 67 } 68 return item 69 } 70 71 function isIncludeKeys(keys, key) { 72 var flag = false 73 $.each(keys, function(index, value) { 74 if (value === key) { 75 flag = true 76 return false 77 } 78 }) 79 return flag 80 } 81 82 function getInlineWidthAndHeight($container) { 83 var $c = $($container[0]) 84 return { 85 width: $c.width(), 86 height: $c.height(), 87 } 88 } 89 90 function mergeClass() { 91 var classes = [] 92 $.each(arguments, function(index, value) { 93 if (value && typeof value === 'string') { 94 classes.push(value) 95 } 96 }) 97 return classes.join(' ') 98 } 99 100 function getAdNodesProps(selector) { 101 var props = [] 102 var $adConatiners = $(selector) 103 if ($adConatiners.length === 0) { 104 return props 105 } 106 $.each($adConatiners, function(index, item) { 107 var id = $(item).attr('id') 108 if (id && !isIncludeKeys(loadedAdsKeys, id)) { 109 props.push({ 110 id: id, 111 }) 112 } 113 }) 114 return props 115 } 116 117 function hiddenContainer(container) { 118 $(container).css({ 119 display: 'none', 120 }) 121 } 122 function showContainer(container) { 123 $(container).css({ 124 display: 'block', 125 }) 126 } 127 /** 128 * æ·»å å¹¿åæ è¯ 129 * @param {*} options 130 */ 131 function getAdmarkDomString(options) { 132 var size = options.size || 'normal' 133 var theme = options.theme 134 var className = mergeClass('ad-mark', size, theme) 135 return '<div class="' + className + '"></div>' 136 } 137 138 function getAdLoaderUrl(adskeys, options) { 139 var api = options.api 140 var client = options.client 141 var pt = options.pt 142 var city = getCityName() 143 var material_type = $(options.selector).attr('material-type') 144 var joinedKeys = adskeys.join(',') 145 var userUid = getUid() || '' // ç¨æ·id 146 var url = api + '?' + 'adskey=' + joinedKeys + '&pt=' + pt 147 if (city !== '') { 148 url = url + '&city=' + city 149 } 150 if (client) { 151 url = url + '&client=' + client 152 } 153 if (material_type !== '' && material_type != undefined) { 154 url = url + '&material_type=' + material_type 155 } 156 if (userUid) { 157 url = url + '&uid=' + userUid 158 } 159 return url 160 } 161 162 function setWidthAndHeight($ele, width, height) { 163 var css = {} 164 if (width && parseInt(width) !== 0) { 165 css.width = width 166 } 167 if (height && parseInt(height) !== 0) { 168 css.height = height 169 } 170 $ele.css(css) 171 } 172 173 function isWap() { 174 var userAgentInfo = navigator.userAgent 175 var agents = ['Android', 'iPhone', 'Windows Phone', 'iPad', 'iPod'] 176 var flag = false 177 for (var v = 0; v < agents.length; v++) { 178 if (userAgentInfo.indexOf(agents[v]) > 0) { 179 flag = true 180 break 181 } 182 } 183 return flag 184 } 185 186 /** 187 * èªå®ä¹å¹¿å渲æ 188 * @param {*} 189 * @param {*} renderOption 190 */ 191 function supportCustomRender(data, $container, renderOption) { 192 var render = renderOption.render 193 var appendedCallback = renderOption.appendedCallback 194 if (typeof render === 'function') { 195 var element = render(data) 196 $container.append(element) 197 if (typeof appendedCallback === 'function') { 198 appendedCallback(element) 199 } 200 return true 201 } else { 202 return false 203 } 204 } 205 206 /** 207 * ç¹å»ãæå ç»è®¡ 208 */ 209 function reportData() { 210 var exptags = [] 211 var selector = this.config.selector 212 var report = function() { 213 $(selector + ' [data-ptag]').each(function(index, ele) { 214 var $ele = $(ele) 215 var ptag = $ele.data('ptag') 216 var exptag = $ele.data('exptag') 217 if (exptags.join().indexOf(exptag) === -1) { 218 exptags.push(exptag) 219 } 220 $ele.click(function() { 221 clickStream.getCvParams(ptag) 222 }) 223 }) 224 for (var i = exptags.length; i > 0; i--) { 225 clickStream.getCvParams(exptags[i - 1]) 226 } 227 } 228 if ( 229 typeof clickStream !== 'undefined' && 230 typeof clickStream.getCvParams === 'function' 231 ) { 232 report() 233 } 234 } 235 236 function reportCountData() { 237 if (typeof t8tc !== 'undefined') { 238 t8tc.postParams({ 239 evt: 'click', 240 pg: $(this).data('pg'), 241 rsc: [ 242 { 243 rty: $(this).data('rty'), 244 rid: $(this).data('rid'), 245 rtt: $(this).data('rtt'), 246 radk: $(this).data('radk'), 247 }, 248 ], 249 }) 250 } 251 } 252 253 function reportExposureData(el) { 254 if (typeof t8tc !== 'undefined') { 255 t8tc.postParams({ 256 evt: 'show', 257 pg: el.data('pg'), 258 rsc: [ 259 { 260 rty: el.data('rty'), 261 rid: el.data('rid'), 262 rtt: el.data('rtt'), 263 radk: el.data('radk'), 264 }, 265 ], 266 }) 267 } 268 } 269 270 function isEleInView(el) { 271 var elOffsetTop = $(el).offset().top, 272 elOuterHeight = $(el).outerHeight(), 273 windowHeight = $(window).height(), 274 windowScrollTop = $(window).scrollTop() 275 276 return ( 277 !(windowScrollTop > elOffsetTop + elOuterHeight) && 278 !(windowScrollTop < elOffsetTop - windowHeight) 279 ) 280 } 281 282 function debounce(method, delay) { 283 var timer = null 284 return function() { 285 var self = this, 286 args = arguments 287 timer && clearTimeout(timer) 288 timer = setTimeout(function() { 289 method.apply(self, args) 290 }, delay) 291 } 292 } 293 294 function adHasBeenExposed(ad) { 295 return exposureAds.indexOf(ad) > -1 296 } 297 298 function initReportExposureData() { 299 $.each($('.ad-data-report'), function(index, el) { 300 var ad = $(el).data('rid') 301 302 if (adHasBeenExposed(ad) || !isEleInView(el)) { 303 return 304 } else { 305 if ( 306 $(el).hasClass('ad-data-report-carousel') && 307 !$(el) 308 .parent() 309 .hasClass('swiper-slide-active') 310 ) { 311 return 312 } 313 314 exposureAds.push(ad) 315 reportExposureData($(el)) 316 } 317 }) 318 } 319 320 var exposureAds = [] 321 322 ;(function() { 323 $(window).on('scroll', debounce(initReportExposureData, 200)) 324 325 $('body').on('click', '.ad-data-report', function() { 326 reportCountData.call(this) 327 }) 328 })() 329 330 /** 331 * éæå¾å¼å¹¿å 332 * @param {*} data 333 * @param {*} container 334 * @param {*} renderOption 335 */ 336 function loadAdWithBanner(data, container, renderOption) { 337 var $container = $(container) 338 if (supportCustomRender(data, $container, renderOption)) { 339 return 340 } 341 if (!data || !data.folder || !data.folder.length > 0) { 342 hiddenContainer(container) 343 return 344 } 345 346 var folder = data.folder[0] 347 var theme = renderOption.theme || {} 348 var showTxt = renderOption.showTxt || '' 349 var adMarkOption = renderOption.adMark || {} 350 var linkClasses = mergeClass( 351 'ad-data-report', 352 'ad-banner-link', 353 theme.link 354 ) 355 var imgClasses = mergeClass(theme.img) 356 var txtClasses = mergeClass('ad-banner-txt', theme.txt) 357 358 var rty = 'ad', 359 rid = folder.adpos_id || '', 360 rtt = folder.txt || '', 361 radk = data.adskey || '' 362 363 if (!folder.resource_url) { 364 if (Array.isArray(folder.material) && folder.material.length >= 1) { 365 folder.resource_url = folder.material[0]['resource_url'] 366 } 367 } 368 369 if (!folder.link_to) { 370 folder.link_to = Global.isiOS ? folder.ios_url : folder.android_url 371 } 372 373 var fragment = 374 '<a href="' + 375 folder.link_to + 376 '" rel="nofollow" class="' + 377 linkClasses + 378 '" data-ptag="' + 379 (folder.ptag || '') + 380 '" data-exptag="' + 381 (folder.exptag || '') + 382 '" data-pg="' + 383 (folder.ptag || '') + 384 '" data-rty="' + 385 rty + 386 '" data-rid="' + 387 rid + 388 '" data-rtt="' + 389 rtt + 390 '" data-radk="' + 391 radk + 392 '">' + 393 '<img src="' + 394 folder.resource_url + 395 '" class="' + 396 imgClasses + 397 '">' 398 if (showTxt) { 399 fragment = 400 fragment + 401 '<span class="' + 402 txtClasses + 403 '">' + 404 folder.txt + 405 '</span>' 406 } 407 fragment = fragment + '</a>' 408 if (parseInt(folder.flag)) { 409 fragment = fragment + getAdmarkDomString(adMarkOption) 410 } 411 $container.append(fragment) 412 413 if (!this.config.isWap) { 414 setWidthAndHeight($container.find('img'), data.width, data.height) 415 } 416 showContainer(container) 417 } 418 419 /** 420 * è½®æå¼å¹¿å 421 * @param {*} data 422 * @param {*} container 423 * @param {*} renderOption 424 */ 425 function loadAdWithCarousel(data, container, renderOption) { 426 var $container = $(container) 427 if (supportCustomRender(data, $container, renderOption)) { 428 return 429 } 430 if (!data || !data.folder || !data.folder.length > 0) { 431 hiddenContainer(container) 432 return 433 } 434 var folder = data.folder 435 var result = folder.length > 1 436 var size = getInlineWidthAndHeight($container) 437 var swiperId = 'swiperContainer' + data.adskey 438 var swiperBtnsId = 'swiperBtns' + data.adskey 439 var sliders = '' 440 441 var rty = 'ad', 442 radk = data.adskey || '' 443 var swiperOptions = $.extend( 444 { 445 autoplay: result ? 3000 : 0, 446 loop: false, 447 simulateTouch: result ? true : false, 448 pagination: result ? '#' + swiperBtnsId : '', 449 paginationType: this.config.isWap ? 'bullets' : 'line', 450 autoplayDisableOnInteraction: false, 451 onSlideChangeEnd: function(swiper) { 452 var el = $(swiper.slides[swiper.activeIndex]).find( 453 '.ad-data-report' 454 ) 455 var ad = el.data('rid') 456 457 if ( 458 adHasBeenExposed(ad) ||
459 !isEleInView('.t8t-ad-swiper') 460 ) { 461 return 462 } else { 463 exposureAds.push(ad) 464 reportExposureData(el) 465 } 466 }, 467 }, 468 renderOption.swiperOptions 469 ) 470 471 var theme = renderOption.theme || {} 472 var showTxt = renderOption.showTxt || '' 473 var adMarkOption = renderOption.adMark || {} 474 var autoplay = renderOption.adMark || 3000 475 var loop = renderOption.adMark || true 476 477 // custom theme 478 var rootClass = mergeClass('ad-carousel-container', theme.root) 479 if (result) { 480 var arrowLeftClass = mergeClass( 481 'ad-carousel-arrow-left', 482 theme.arrow, 483 theme.arrowLeft 484 ) 485 var arrowRightClass = mergeClass( 486 'ad-carousel-arrow-right', 487 theme.arrow, 488 theme.arrowRight 489 ) 490 } 491 var arrowIconLeftClass = mergeClass( 492 'ad-carousel-arrow-icon', 493 'ad-carousel-arrow-icon-left', 494 theme.arrowIconLeft 495 ) 496 var arrowIconRightClass = mergeClass( 497 'ad-carousel-arrow-icon', 498 'ad-carousel-arrow-icon-right', 499 theme.arrowIconRight 500 ) 501 502 var swiperContainerClass = mergeClass( 503 'swiper-container', 504 't8t-ad-swiper', 505 theme.swiperContainer 506 ) 507 var swiperWrapperClass = mergeClass( 508 'swiper-wrapper', 509 theme.swiperWrapper 510 ) 511 var swiperSlideClass = mergeClass( 512 'swiper-slide', 513 'ad-carousel-swiper-slide', 514 theme.swiperSlide 515 ) 516 517 var swiperSlideLinkClass = mergeClass( 518 'ad-data-report', 519 'ad-data-report-carousel', 520 'ad-carousel-swiper-slide-link', 521 theme.swiperSlideLink 522 ) 523 var swiperSlideTitle = mergeClass( 524 'ad-carousel-swiper-slide-title', 525 theme.swiperSlideTitle 526 ) 527 var sliderBtnsClass = mergeClass( 528 'ad-carousel-slider-btns', 529 'slider-btns-style-' + swiperOptions.paginationType, 530 theme.sliderBtns 531 ) 532 533 for (var i = 0, length = folder.length; i < length; i++) { 534 var folderItem = folder[i], 535 rid = folderItem.adpos_id || '', 536 rtt = folderItem.txt || '' 537 538 if(!folderItem.resource_url) { 539 if (Array.isArray(folderItem.material) && folderItem.material.length >= 1) { 540 folderItem.resource_url = folderItem.material[0]['resource_url'] 541 } 542 } 543 544 if (!folderItem.link_to) { 545 folderItem.link_to = Global.isiOS ? folderItem.ios_url : folderItem.android_url 546 } 547 548 var sliderItem = 549 '<div class="' + 550 swiperSlideClass + 551 '">' + 552 '<a href="' + 553 folderItem.link_to + 554 '" target="_blank" class="' + 555 swiperSlideLinkClass + 556 '" data-ptag="' + 557 (folderItem.ptag || '') + 558 '" data-exptag="' + 559 (folderItem.exptag || '') + 560 '" data-pg="' + 561 (folderItem.ptag || '') + 562 '" data-rty="' + 563 rty + 564 '" data-rid="' + 565 rid + 566 '" data-rtt="' + 567 rtt + 568 '" data-radk="' + 569 radk + 570 '">' + 571 '<img src="' + 572 folderItem.resource_url + 573 '">' 574 575 if (showTxt) { 576 sliderItem = 577 sliderItem + 578 '<span class="' + 579 swiperSlideTitle + 580 '">' + 581 folderItem.txt + 582 '</span>' 583 } 584 sliderItem = sliderItem + '</a>' 585 if (parseInt(folderItem.flag)) { 586 sliderItem = sliderItem + getAdmarkDomString(adMarkOption) 587 } 588 sliderItem = sliderItem + '</div>' 589 sliders = sliders + sliderItem 590 } 591 var swiperContainer = 592 '<div class="' + 593 swiperContainerClass + 594 '">' + 595 '<div class="' + 596 swiperWrapperClass + 597 '">' + 598 sliders + 599 '</div>' + 600 '</div>' 601 602 swiperContainer = 603 '<div class="' + 604 rootClass + 605 '" id="' + 606 swiperId + 607 '">' + 608 '<a href="javascript:void(0);" class="' + 609 arrowLeftClass + 610 '"><span class="' + 611 arrowIconLeftClass + 612 '"></span></a>' + 613 '<a href="javascript:void(0);" class="' + 614 arrowRightClass + 615 '"><span class="' + 616 arrowIconRightClass + 617 '"></span></a>' + 618 swiperContainer 619 if (swiperOptions.pagination) { 620 swiperContainer = 621 swiperContainer + 622 '<div class="' + 623 sliderBtnsClass + 624 '" id="' + 625 swiperBtnsId + 626 '"></div>' 627 } 628 629 swiperContainer = swiperContainer + '</div>' 630 631 $container.append(swiperContainer) 632 633 if (!this.config.isWap) { 634 setWidthAndHeight( 635 $container.find('.swiper-container'), 636 data.width || size.width, 637 data.height || size.height 638 ) 639 setWidthAndHeight($container.find('.swiper-container img'), '100%') 640 } 641 642 var initSwiper = function() { 643 var swiperObj = new Swiper( 644 '#' + swiperId + ' .swiper-container', 645 swiperOptions 646 ) 647 648 $('#' + swiperBtnsId).css({ 649 marginLeft:
650 '-' + parseFloat($('#' + swiperBtnsId).width()) / 2 + 'px', 651 left: '50%', 652 }) 653 654 $('#' + swiperId + ' .ad-carousel-arrow-left').click(function() { 655 swiperObj.swipePrev() 656 setTimeout(function() { 657 swiperObj.startAutoplay() 658 }, 3000) 659 }) 660 $('#' + swiperId + ' .ad-carousel-arrow-right').click(function() { 661 swiperObj.swipeNext() 662 setTimeout(function() { 663 swiperObj.startAutoplay() 664 }, 3000) 665 }) 666 var $switch = $('#' + swiperBtnsId + ' .swiper-pagination-switch') 667 $switch.click(function() { 668 var index = $switch.index(this) 669 swiperObj.swipeTo(index, 1000, false) 670 swiperObj.stopAutoplay() 671 setTimeout(function() { 672 swiperObj.startAutoplay() 673 }, 0) 674 }) 675 } 676 677 if (!window.Swiper) { 678 var cssURL = 679 '//static.to8to.com/to8to_pc/common/libs/swiper-2.7/swiper.css' 680 var linkTag = $( 681 '<link href="' + 682 cssURL + 683 '" rel="stylesheet" type="text/css" " charset="utf-8"/>' 684 ) 685 $($('head')[0]).append(linkTag) 686 $.getScript( 687 '//static.to8to.com/to8to_pc/common/libs/swiper-2.7/swiper-2.7.js', 688 initSwiper 689 ) 690 } else { 691 initSwiper() 692 } 693 showContainer(container) 694 } 695 696 function loadAdWithScript(data, container, renderOption) { 697 var $container = $(container) 698 if (supportCustomRender(data, $container, renderOption)) { 699 return 700 } 701 if (!data || !data.folder || !data.folder.length > 0) { 702 hiddenContainer(container) 703 return 704 } 705 var folder = data.folder[0] 706 var size = getInlineWidthAndHeight($container) 707 708 var theme = renderOption.theme || {} 709 var showTxt = renderOption.showTxt || '' 710 var adMark = renderOption.adMark || {} 711 var iframeClass = mergeClass('ad-script-iframe', theme.iframe) 712 var txtClasses = mergeClass('ad-script-txt', theme.txt) 713 714 var adFrame = 715 '<iframe src="' + 716 folder.resource_url + 717 '" class="' + 718 iframeClass + 719 '" data-ptag="' + 720 (folder.ptag || '') + 721 '" data-exptag="' + 722 (folder.exptag || '') + 723 '">' + 724 '</iframe>' 725 if (showTxt) { 726 adFrame = 727 adFrame + 728 '<span class="' + 729 txtClasses + 730 '">' + 731 folder.txt + 732 '</span>' 733 } 734 if (parseInt(folder.flag)) { 735 adFrame = adFrame + getAdmarkDomString(adMark) 736 } 737 $container.append(adFrame) 738 if (!this.config.isWap) { 739 setWidthAndHeight( 740 $container.find('iframe'), 741 data.width || size.width, 742 data.height || size.height 743 ) 744 } 745 } 746 747 function loadAdWithxTile(data, container, renderOption) { 748 var $container = $(container) 749 if (supportCustomRender(data, $container, renderOption)) { 750 return 751 } 752 if (!data || !data.folder || !data.folder.length > 0) { 753 hiddenContainer(container) 754 return 755 } 756 } 757 758 function loadAdWithyTile(data, container, renderOption) { 759 var $container = $(container) 760 if (supportCustomRender(data, $container, renderOption)) { 761 return 762 } 763 if (!data || !data.folder || !data.folder.length > 0) { 764 hiddenContainer(container) 765 return 766 } 767 768 var folder = data.folder 769 var theme = renderOption.theme || {} 770 var showTxt = renderOption.showTxt || '' 771 var adMarkOption = renderOption.adMark || {} 772 var linkClasses = mergeClass( 773 'ad-data-report', 774 'ad-banner-link', 775 theme.link 776 ) 777 var imgClasses = mergeClass(theme.img) 778 var txtClasses = mergeClass('ad-banner-txt', theme.txt) 779 780 var rty = 'ad', 781 radk = data.adskey || '' 782 783 var childs = '' 784 $.each(folder, function(index, item) {
785 var rid = item.adpos_id || '', 786 rtt = item.txt || '' 787 var fragment = 788 '<a href="' + 789 item.link_to + 790 '"target="_blank" class="' + 791 linkClasses + 792 '" data-ptag="' + 793 (item.ptag || '') + 794 '" data-exptag="' + 795 (item.exptag || '') + 796 '" data-pg="' + 797 (item.ptag || '') + 798 '" data-rty="' + 799 rty + 800 '" data-rid="' + 801 rid + 802 '" data-rtt="' + 803 rtt + 804 '" data-radk="' + 805 radk + 806 '">' + 807 '<img src="' + 808 item.resource_url + 809 '" class="' + 810 imgClasses + 811 '">' 812 if (showTxt) { 813 fragment = 814 fragment + 815 '<span class="' + 816 txtClasses + 817 '">' + 818 item.txt + 819 '</span>' 820 } 821 if (parseInt(item.flag)) { 822 fragment = fragment + getAdmarkDomString(adMarkOption) 823 } 824 fragment = fragment + '</a>' 825 826 childs = childs + fragment 827 }) 828 829 $container.append(childs) 830 831 if (!this.config.isWap) { 832 setWidthAndHeight($container.find('img'), data.width, data.height) 833 } 834 showContainer(container) 835 } 836 837 /** 838 * 纯æåå¼ 839 * 馿¬¡ä½¿ç¨: éææåä¸çç¸å ³é®çï¼çº¯æå建议èªå®ä¹å è½½ 840 * @param {*} data 841 * @param {*} container 842 * @param {*} renderOption 843 */ 844 function loadAdWithText(data, container, renderOption) { 845 var $container = $(container) 846 if (supportCustomRender(data, $container, renderOption)) { 847 return 848 } 849 if (!data || !data.folder || !data.folder.length > 0) { 850 hiddenContainer(container) 851 return 852 } 853 } 854 855 var loaders = { 856 carousel: loadAdWithCarousel, 857 banner: loadAdWithBanner, 858 xTile: loadAdWithxTile, 859 yTile: loadAdWithyTile, 860 third_party_script: loadAdWithScript, 861 text: loadAdWithText, 862 } 863 864 function fetchJavaAdData(adskeys, options, cb) { 865 $.ajax({
866 type: 'post', 867 url: options.javaApi, 868 data: JSON.stringify({ 869 adskey: adskeys.join(','), 870 pt: options.pt, 871 city: getCityName() || '', 872 client: options.client || '', 873 material_type: $(options.selector).attr('material-type') || '', 874 uid: getUid() || '' 875 }), 876 dataType: 'json', 877 success: function(data) { 878 cb(data.result) 879 }, 880 }) 881 } 882 883 function fetchAdData(adskeys, url, cb) { 884 var jsonpCallback = 'jsonpCallbackOfGlobalADS' + adskeys.join('') 885 $.ajax({ 886 type: 'get', 887 url: url, 888 dataType: 'jsonp', 889 jsonpCallback: jsonpCallback, 890 cache: true, 891 success: function(data) { 892 cb(data) 893 }, 894 }) 895 } 896 897 function renderAdNode(data, element, renderOption) { 898 let defaultLoader = data.folder && data.folder.length >= 2 ? 'carousel' : 'banner' 899 if (typeof loaders[data.display || defaultLoader] === 'function') { 900 loaders[data.display || defaultLoader].call( 901 this, 902 data, 903 element, 904 renderOption 905 ) 906 907 if ( 908 renderOption && 909 typeof renderOption.appendedCallback === 'function' 910 ) { 911 renderOption.appendedCallback(data) 912 } 913 } else { 914 throw new Error( 915 'can not find any ad loader to mathch `' + 916 data.display + 917 '` display type' 918 ) 919 } 920 } 921 922 function renderAllAdNodes(adskeys, data, renderOptions, callback) { 923 var $containers = $(this.config.selector) 924 if ($containers.length === 0) { 925 return 926 } 927 if (this.config.isWap) { 928 $containers.addClass(this.config.wapClass) 929 } 930 var self = this 931 var adskeyStr = adskeys.join() 932 $.each($containers, function(index, element) { 933 var adskey = $(element).attr('id') 934 var dataItem = findItem(data, 'adskey', adskey) 935 // åªå¤çå½å请æ±ä¸ç广åä½ 936 if (adskeyStr.indexOf(adskey) === -1) { 937 return true 938 } 939 var renderOption = findItem(renderOptions, 'id', adskey) 940 renderAdNode.call(self, dataItem, element, renderOption) 941 }) 942 if (typeof callback === 'function') { 943 callback(data) 944 } 945 return reportData.call(this) 946 } 947 948 var defaultConfig = { 949 selector: '.ad-rabbit', 950 wapClass: 'ad-rabbit-wap', 951 javaApi: '//apigwc1.to8to.com/cgi/aoc/ad/operation', 952 api: '//secure.to8to.com/api/ggdata.php', 953 pt: 'to8to', 954 isWap: isWap(), 955 } 956 957 /** 958 * 959 * @param {Object} å¯éé ç½®è¦çé»è®¤é ç½® 960 * 961 */ 962 function AdLoader(cfg) { 963 var config = findItem(window.__adLoaderOptions, 'global', true) 964 this.config = $.extend({}, defaultConfig, config.config, cfg) 965 } 966 967 /** 968 * 969 * ååæ¹æ³ï¼å è½½é¡µé¢ææå¹¿å 970 * 971 * @param {*} [renderOption] 972 * 973 */ 974 AdLoader.prototype.loadAllAds = function() { 975 var callback, 976 renderOptions = [] 977 if (arguments.length === 1 && typeof arguments[0] === 'function') { 978 callback = arguments[0] 979 } else { 980 renderOptions = arguments[0] || [] 981 callback = arguments[1] 982 } 983 984 if (window.__adLoaderOptions && $.isArray(window.__adLoaderOptions)) { 985 $.merge(renderOptions, window.__adLoaderOptions) 986 } 987 988 var selector = this.config.selector 989 if ($(selector).length === 0) { 990 return 991 } 992 var props = getAdNodesProps(selector) 993 if (props.length === 0) { 994 return 995 } 996 var adskeys = $.map(props, function(item) { 997 // use container's id as adskey 998 return item.id 999 }) 1000 $.merge(loadedAdsKeys, adskeys) 1001 var url = getAdLoaderUrl(adskeys, this.config) 1002 var self = this 1003 fetchJavaAdData(adskeys, this.config, function(data) { 1004 renderAllAdNodes.call(self, adskeys, data, renderOptions, callback) 1005 }) 1006 // fetchAdData(adskeys, url, function(data) { 1007 // renderAllAdNodes.call(self, adskeys, data, renderOptions, callback) 1008 // }) 1009 } 1010 1011 $(function() { 1012 // çå¾ è·ååå¸ç«ä¿¡æ¯åè°cookieé设 ç´§æ¥ä¿®å¤çåæ³ tracy.xu 1013 setTimeout(function() { 1014 var adLoaderInstance = new AdLoader() 1015 adLoaderInstance.loadAllAds(initReportExposureData) 1016 }, 400) 1017 }) 1018 1019 return AdLoader 1020})
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.