1(function() { 2 //They will probably only be one player on a page, but we want to support multiples, so we can't store a list 3 //of elems we work with, we must always work relative to our parent .advm class 4 5 var 6 7 init = function() { 8 9 //setup initial layout for each viewer 10 $(this).find('.small-viewer').each(function() { 11 setupViewer($(this)); 12 }); 13 14 //setup thumb click handler 15 setupThumbnail(); 16 17 //setup the next/prev buttons 18 setupNextPrev(); 19 }, 20 21 // 22 // setup each basic viewer 23 // 24 setupViewer = function($viewer) { 25 //get the count, add rows to viewer 26 var cnt = $viewer.find('.large-image').length; 27 $viewer.attr('data-rows', Math.ceil(cnt/3)); 28 $viewer.attr('data-current-row', 0); 29 30 //hide large images except first 31 $viewer.find('.large-image:not(:first)').addClass('visuallyhidden'); 32 33 //hide the thumbnails, add index to each 34 if (cnt == 1) { 35 $viewer.find('.small-image-hole').addClass('visuallyhidden'); 36 } else { 37 $viewer.find('.small-image-hole').each(function(index) { 38 //add the index 39 $(this).attr('data-index', index); 40 41 //add the row 42 $(this).attr('data-row', Math.floor(index/3)); 43 44 45 //hide those not on first row 46 if (index > 2) { 47 $(this).addClass('visuallyhidden'); 48 } 49 50 //set selected 51 if (index == 0) { 52 $(this).addClass('selected'); 53 } 54 55 //add first/middle/last class so css is correct. 56 switch(index % 3) { 57 case 0: 58 $(this).addClass('first'); 59 break; 60 case 1: 61 $(this).addClass('middle'); 62 break; 63 case 2: 64 $(this).addClass('last'); 65 break; 66 } 67 }); 68 } 69 70 //setup buttons 71 if (cnt <= 3) { 72 //hide buttons 73 $viewer.find('a.replace.button').css('display', 'none'); 74 } else { 75 //set prev to diabled 76 $viewer.find('.btn_previous').addClass('disabled'); 77 } 78 79 }, 80 81 // 82 // setup the thumbnail click hanlder 83 // 84 setupThumbnail = function() { 85 $('.small-viewer').on('click', '.small-image-hole', function() { 86 thumbnailClick($(this)); 87 }); 88 }, 89 90 // 91 // setup the next prev buttons 92 // 93 setupNextPrev = function() { 94 //$('.small-viewer').on('click', 'a.replace.button', function() { 95 $('.small-viewer').on('click', 'a.btn_previous, a.btn_next', function() { 96 nextPrevClick($(this)); 97 return false; 98 }); 99 100 }, 101 102 103 // 104 // handle thumbnail click 105 // 106 thumbnailClick = function($img) { 107 //get the viewer 108 var $viewer = $img.closest('.small-viewer'); 109 110 //get the thumb index 111 var index = $img.attr('data-index'); 112 113 //hide/show the main image 114 $viewer.find('.large-image').addClass('visuallyhidden'); 115 $viewer.find('.large-image').eq(index).removeClass('visuallyhidden'); 116 117 //set selected thumb 118 $viewer.find('.small-image-hole').removeClass('selected'); 119 $img.addClass('selected'); 120 }, 121 122 // 123 // next/prev button click 124 // 125 nextPrevClick = function($btn) { 126 //only if not disabled 127 if (!$btn.hasClass('disabled')) { 128 //find the viewer 129 $viewer = $btn.closest('.small-viewer'); 130 131 //get the current row & row count 132 var row = parseInt($viewer.attr('data-current-row')); 133 var row_count = parseInt($viewer.attr('data-rows')); 134 135 //update the current row 136 if ($btn.hasClass('btn_next')) { 137 row++; 138 } else if ($btn.hasClass('btn_previous')) { 139 row--; 140 } 141 $viewer.attr('data-current-row', row); 142 143 //hide show the thumbs 144 $thumbs = $viewer.find('.small-image-hole'); 145 $thumbs.removeClass('visuallyhidden'); 146 $thumbs.siblings('.small-image-hole[data-row!="' + row + '"]').addClass('visuallyhidden'); 147 148 //enable/disable the buttons 149 if (row > 0) { 150 $viewer.find('.btn_previous').removeClass('disabled'); 151 } else { 152 $viewer.find('.btn_previous').addClass('disabled'); 153 } 154 155 if (row < row_count -1) { 156 $viewer.find('.btn_next').removeClass('disabled'); 157 } else { 158 $viewer.find('.btn_next').addClass('disabled'); 159 } 160 } 161 }, 162 163 dummy = function() {}; 164 165 $(document).ready(init); 166 167 168})(); 169 170 171/* 172
173// http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth 174// http://peter.michaux.ca/articles/wrapping-functions-in-javascript 175 176;var OHH = (function(parent, $, UTIL, undefined) { 177 var me = parent.smallviewer = parent.smallviewer || {}; 178 179 me.name = parent.name + ".smallviewer"; 180 181 var nimages = 0; 182 var npages = 0; 183 var perpage = 3; 184 var page = 0; 185 186 function setPage (i) { 187 $(".small-viewer .nav .small-image-hole").addClass("visuallyhidden").removeClass("middle").removeClass("first").removeClass("last"); 188 189 for (var j = 0; j < perpage; j++) { 190 if (j == 0) { 191 $(".small-viewer .nav .small-image-hole:eq(" + (i * perpage + j) + ")").removeClass("visuallyhidden").addClass("first"); 192 } else if (j == perpage - 1) { 193 $(".small-viewer .nav .small-image-hole:eq(" + (i * perpage + j) + ")").removeClass("visuallyhidden").addClass("last"); 194 } else { 195 $(".small-viewer .nav .small-image-hole:eq(" + (i * perpage + j) + ")").removeClass("visuallyhidden").addClass("middle"); 196 } 197 } 198 199 page = i; 200 201 if (i == 0) $(".small-viewer .nav .btn_previous").addClass("disabled"); 202 else $(".small-viewer .nav .btn_previous").removeClass("disabled"); 203 204 if (i == npages - 1) $(".small-viewer .nav .btn_next").addClass("disabled"); 205 else $(".small-viewer .nav .btn_next").removeClass("disabled"); 206 207 //console.log(me.name + ".setPage()", i, npages); 208 } 209 210 function setActive (i) { 211 $(".small-viewer .large-image").addClass("visuallyhidden"); 212 $(".small-viewer .large-image:eq(" + i + ")").removeClass("visuallyhidden"); 213 214 $(".small-viewer .nav .small-image-hole").removeClass("selected"); 215 $(".small-viewer .nav .small-image-hole:eq(" + i + ")").addClass("selected"); 216 217 var h1 = $(".small-viewer").data("h"); 218 if (! h1) h1 = $(".small-viewer .large-image:eq(" + i + ")").height(); 219 220 var h2 = $(".small-viewer .large-image:eq(" + i + ")").height(); 221 222 var h = Math.max(h1, h2); 223 224 $(".small-viewer .large-images").height(h); 225 $(".small-viewer").data("h", h); 226 227 //console.log(me.name + ".setActive()", i, nimages, h); 228 } 229 230 function setupViewer () { 231 nimages = $(".small-viewer .large-image").length; 232 npages = Math.ceil(nimages / perpage); 233 234 if (nimages == 1) { 235 $(".small-viewer .nav").remove(); 236 return; 237 } else if (nimages <= perpage) { 238 $(".small-viewer .nav .btn_previous, .small-viewer .nav .btn_next").remove(); 239 } 240 241 $(".small-viewer .large-image").each(function (i) { 242 var $this = $(this); 243 244 $this.data("pos", i); 245 }); 246 247 $(".small-viewer .nav .small-image-hole").each(function (i) { 248 var $this = $(this); 249 250 $this.data("pos", i); 251 }).on("click", function () { 252 var $this = $(this); 253 254 var i = $(this).data("pos"); 255 256 setActive(i); 257 }); 258 259 $(".small-viewer .nav .btn_previous").on("click", function () { 260 if (page > 0) { 261 setPage(page - 1); 262 } 263 264 return false; 265 }); 266 267 $(".small-viewer .nav .btn_next").on("click", function () { 268 if (page < npages - 1) { 269 setPage(page + 1); 270 } 271 272 return false; 273 }); 274 275 setPage(0); 276 setActive(0); 277 278 //console.log(me.name + ".setupViewer()", nimages, npages); 279 } 280 281 function init () { 282 //setupViewer(); 283 }; 284 285 $(document).ready(init); 286 287 return parent; 288}(OHH || {}, jQuery, UTIL)); 289*/
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.