1 2function UCPostAccordion(objAccordion){ 3 4 var g_activeClass; 5 var g_dataLinkNum, g_accItem, g_scrollOffset; 6 7 //scroll func 8 function scrollToTop(){ 9 var panel = jQuery(this).closest(".uc_ac_box"); 10 11 jQuery('html, body').animate({ 12 scrollTop: panel.offset().top + g_scrollOffset 13 }, 400); 14 } 15 16 function onItemClick(){ 17 18 var objCaption = jQuery(this); 19 var objContent = objCaption.next(); 20 var objItem = objCaption.parent(); 21 22 var isActive = objItem.hasClass(g_activeClass); 23 var objOpened = objAccordion.find("."+g_activeClass); 24 var dataCloseothers = objAccordion.data("closeothers"); 25 26 if(dataCloseothers == true){ 27 if(isActive == true){ 28 objItem.removeClass(g_activeClass); 29 objContent.slideUp(); 30 return(true); 31 } 32 33 objOpened.removeClass(g_activeClass); 34 objOpened.find(".uc_content").slideUp(); 35 36 } 37 objItem.addClass(g_activeClass); 38 39 var dataScroll = objAccordion.data('scroll'); 40 41 if (dataScroll == "desktop"){ 42 if(window.matchMedia("(min-width: 1024px)").matches){ 43 objContent.slideDown(scrollToTop); 44 }else{ 45 objContent.slideDown(); 46 } 47 } 48 49 if (dataScroll == "mobile"){ 50 if(window.matchMedia("(max-width: 1024px)").matches){ 51 objContent.slideDown(scrollToTop); 52 }else{ 53 objContent.slideDown(); 54 } 55 } 56 57 if (dataScroll == "desktop+mobile"){ 58 objContent.slideDown(scrollToTop); 59 } 60 61 if (dataScroll == "off"){ 62 objContent.slideDown(); 63 } 64 65 return false; 66 } 67 68 69 function linkToSlideScroll(){ 70 71 jQuery('html, body').animate({ 72 scrollTop: g_accItem.offset().top + g_scrollOffset 73 }, 400); 74 } 75 76 /* 77 * check if element is in viewport 78 */ 79 function isElementInViewport(objElement) { 80 81 var elementTop = objElement.offset().top; 82 var elementBottom = elementTop + objElement.outerHeight(); 83 84 var viewportTop = jQuery(window).scrollTop(); 85 var viewportBottom = viewportTop + jQuery(window).height(); 86 87 var isInViwport = elementBottom > viewportTop && elementTop < viewportBottom; 88 89 return(isInViwport); 90 } 91 92 /* 93 * on trigger link click 94 */ 95 function onLinkClick(e){ 96 97 var objLink = jQuery(this); 98 99 var dataAccName = objAccordion.data('name'); 100 var dataLinkName = objLink.data('name'); 101 g_dataLinkNum = objLink.data('num'); 102 g_accItem = objAccordion.find('.uc_ac_box .uc_trigger').eq(g_dataLinkNum - 1); 103 var accItemNumber = objAccordion.find('.uc_ac_box').length; 104 105 if(dataLinkName != dataAccName) 106 return(false); 107 108 if(dataLinkName == undefined || g_dataLinkNum == '' || g_dataLinkNum > accItemNumber) 109 return(false); 110 111 var accItemContent = g_accItem.next(); 112 var accItemParent = g_accItem.parent(); 113 var isItemParentActive = accItemParent.hasClass("uc-item-active"); 114 115 e.preventDefault(); 116 117 if(isItemParentActive == true && isElementInViewport(objAccordion) == false){ 118 119 linkToSlideScroll(); 120 121 }else if(isItemParentActive == false && isElementInViewport(objAccordion) == false){ 122 123 onItemClick(); 124 accItemContent.slideDown(linkToSlideScroll); 125 accItemParent.addClass("uc-item-active"); 126 127 }else if(isItemParentActive == false && isElementInViewport(objAccordion) == true){ 128 129 onItemClick(); 130 accItemContent.slideDown(); 131 accItemParent.addClass("uc-item-active"); 132 } 133 } 134 135 /** 136 * init open links 137 */ 138 function initLinks(){ 139 140 141 var objLinks = jQuery('.ue-link-goto-item').not(".uc-link-inited"); 142 143 if(objLinks.length == 0){ 144 return(false); 145 } 146 147 var elementName = objAccordion.data("name"); 148 149 jQuery.each(objLinks, function(index, linkElement){ 150 151 var objLink = jQuery(linkElement); 152 153 var name = objLink.data("name"); 154 155 if(name != elementName) 156 return(true); 157 158 objLink.addClass("uc-link-inited"); 159 160 objLink.on("click", onLinkClick); 161 162 }); 163 164 165 } 166 167
168 function runPostAccordion(){ 169 //init globals 170 171 g_activeClass = "uc-item-active"; 172 173 g_scrollOffset = objAccordion.data('offset'); 174 175 initLinks(); 176 177 //init events 178 179 objAccordion.on("click", ".uc_trigger", onItemClick); 180 objAccordion.on("ucclick", ".uc_trigger", onItemClick); 181 } 182 183 runPostAccordion(); 184 185}
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.