1/** 2 * PgwSlider - Version 1.1 3 * 4 * Copyright 2014, Jonathan M. Piat 5 * http://pgwjs.com - http://pagawa.com 6 * 7 * Released under the MIT license - http://opensource.org/licenses/MIT 8 */ 9;(function($){ 10 $.fn.pgwSlider = function(options) { 11 12 var defaults = { 13 autoSlide : true, 14 adaptiveHeight : false, 15 adaptiveDuration : 400, 16 transitionDuration : 400, 17 intervalDuration : 3000 18 }; 19 20 if (this.length == 0) { 21 return this; 22 } else if(this.length > 1) { 23 this.each(function() { 24 $(this).pgwSlider(options); 25 }); 26 return this; 27 } 28 29 var pgwSlider = {}; 30 pgwSlider.plugin = this; 31 pgwSlider.data = []; 32 pgwSlider.config = {}; 33 pgwSlider.currentNb = 0; 34 pgwSlider.nbElements = 0; 35 pgwSlider.eventInterval = null; 36 pgwSlider.window = $(window); 37 38 // Init 39 var init = function() { 40 41 // Merge the user options with the defaults config 42 pgwSlider.config = $.extend({}, defaults, options); 43 44 // Setup 45 setup(); 46 47 // Activate interval 48 if (pgwSlider.config.autoSlide) { 49 activateInterval(); 50 } 51 52 return true; 53 }; 54 55 // Get element 56 var getElement = function(obj) { 57 var element = {}; 58 59 // Get link 60 var elementLink = obj.find('a').attr('href'); 61 if ((typeof elementLink != 'undefined') && (elementLink != '')) { 62 element.link = elementLink; 63 var elementLinkTarget = obj.find('a').attr('target'); 64 if ((typeof elementLinkTarget != 'undefined') && (elementLinkTarget != '')) { 65 element.linkTarget = elementLinkTarget; 66 } 67 } 68 69 // Get image
70 var elementThumbnail = obj.find('img').attr('src'); 71 if ((typeof elementThumbnail != 'undefined') && (elementThumbnail != '')) { 72 element.thumbnail = elementThumbnail; 73 } 74 75 var elementImage = obj.find('img').attr('data-large-src'); 76 if ((typeof elementImage != 'undefined') && (elementImage != '')) { 77 element.image = elementImage; 78 } 79 80 // Get title 81 var elementSpan = obj.find('span').text(); 82 if ((typeof elementSpan != 'undefined') && (elementSpan != '')) { 83 element.title = elementSpan; 84 } else { 85 var elementTitle = obj.find('img').attr('alt'); 86 if ((typeof elementTitle != 'undefined') && (elementTitle != '')) { 87 element.title = elementTitle; 88 } 89 } 90 91 // Get description 92 var elementDescription = obj.find('img').attr('data-description'); 93 if ((typeof elementDescription != 'undefined') && (elementDescription != '')) { 94 element.description = elementDescription; 95 } 96 97 return element; 98 }; 99 100 // Update the current height 101 var updateHeight = function(height, animate) { 102 103 // Adjust the height of the right list items 104 var elementHeight = ((height - ((pgwSlider.nbElements - 1) * 6)) / pgwSlider.nbElements); 105 var elementWidth = (100 / pgwSlider.nbElements); 106 pgwSlider.plugin.find('ul li').css({ width: elementWidth + '%' }); 107 108 // Adjust the height of the main container 109 if (typeof animate != 'undefined' && animate) { 110 pgwSlider.plugin.find('.ps-current').animate({ 111 height: height 112 }, pgwSlider.config.adaptiveDuration, function() { 113 pgwSlider.plugin.find('ul li').animate({ height: elementHeight }, pgwSlider.config.adaptiveDuration); 114 }); 115 116 } else { 117 pgwSlider.plugin.find('.ps-current').css('height', height); 118 pgwSlider.plugin.find('ul li').css('height', elementHeight); 119 } 120 121 return true; 122 }; 123 124 // Setup 125 var setup = function() { 126 127 // Create container 128 pgwSlider.plugin.wrap('<div class="pgwSlider"></div>'); 129 pgwSlider.plugin = pgwSlider.plugin.parent(); 130 pgwSlider.plugin.find('ul').removeClass('pgwSlider'); 131 pgwSlider.plugin.prepend('<div class="ps-current"></div>'); 132 pgwSlider.nbElements = pgwSlider.plugin.find('ul li').length; 133 134 // Get slider elements 135 var elementId = 0; 136 pgwSlider.plugin.find('ul li').each(function() { 137 var element = getElement($(this)); 138 element.id = elementId; 139 pgwSlider.data.push(element); 140 141 $(this).addClass('elt_' + element.id); 142 143 if (element.title) { 144 if ($(this).find('span').length == 1) { 145 if ($(this).find('span').text() == '') { 146 $(this).find('span').text(element.title); 147 } 148 } else { 149 $(this).find('img').after('<span>' + element.title + '</span>'); 150 } 151 } 152 153 // Disable native links in the right list 154 $(this).css('cursor', 'pointer').click(function(event) { 155 event.preventDefault(); 156 displayCurrent(element.id); 157 }); 158 159 elementId++; 160 }); 161 162 // Attach slide events 163 if (pgwSlider.config.autoSlide) { 164 pgwSlider.plugin.on('mouseenter', function() { 165 clearInterval(pgwSlider.eventInterval); 166 pgwSlider.eventInterval = null; 167 }).on('mouseleave', function() { 168 activateInterval(); 169 }); 170 } 171 172 // Display the first element 173 displayCurrent(0, true); 174 175 return true; 176 }; 177 178 // Display current element 179 var displayCurrent = function(elementId, init) { 180 181 pgwSlider.currentNb = elementId; 182 var element = pgwSlider.data[elementId]; 183 var elementContainer = pgwSlider.plugin.find('.ps-current'); 184 185 // Opacify the current element 186 elementContainer.animate({ 187 opacity : 0, 188 }, pgwSlider.config.transitionDuration, function() { 189 190 pgwSlider.plugin.find('ul li').css('opacity', '0.6'); 191 pgwSlider.plugin.find('ul li.elt_' + elementId).css('opacity', '1'); 192 193 // Create image 194 if (element.image) { 195 elementContainer.html('<img src="' + element.image + '" alt="' + (element.title ? element.title : '') + '">'); 196 } else if (element.thumbnail) { 197 elementContainer.html('<img src="' + element.thumbnail + '" alt="' + (element.title ? element.title : '') + '">'); 198 } else { 199 elementContainer.html(''); 200 } 201 202 // Create caption 203 var elementText = ''; 204 if (element.title) { 205 elementText += '<b>' + element.title + '</b>'; 206 } 207 208 if (element.description) { 209 if (elementText != '') elementText += '<br>'; 210 elementText += element.description; 211 } 212 213 if (elementText != '') { 214 elementContainer.append('<span>' + elementText + '</span>'); 215 } 216 217 // Check if the element has a link 218 if (element.link) { 219 var linkTarget = ''; 220 if (element.linkTarget) { 221 var linkTarget = ' target="' + element.linkTarget + '"'; 222 } 223 elementContainer.html('<a href="' + element.link + '"' + linkTarget + '>' + elementContainer.html() + '</a>'); 224 } 225 226 // Set the container height 227 elementContainer.find('img').load(function() { 228 if (typeof pgwSlider.plugin.find('.ps-current').attr('data-checked') == 'undefined') { 229 230 var maxHeight = pgwSlider.plugin.find('.ps-current img').height(); 231 updateHeight(maxHeight); 232 pgwSlider.plugin.find('.ps-current').attr('data-checked', 'true'); 233 234 pgwSlider.window.resize(function() { 235 var maxHeight = pgwSlider.plugin.find('.ps-current img').height(); 236 updateHeight(maxHeight); 237 }); 238 239 } else if (pgwSlider.config.adaptiveHeight) { 240 var maxHeight = pgwSlider.plugin.find('.ps-current img').height(); 241 updateHeight(maxHeight, true); 242 } 243 }); 244 245 // Display the new element 246 elementContainer.animate({ 247 opacity : 1, 248 }, pgwSlider.config.transitionDuration); 249 }); 250 251 return true; 252 }; 253 254 // Activate interval 255 var activateInterval = function() { 256 257 if (pgwSlider.nbElements > 1 && pgwSlider.config.autoSlide) { 258 259 pgwSlider.eventInterval = setInterval(function() { 260 var maxNb = pgwSlider.nbElements - 1; 261 262 if (pgwSlider.currentNb + 1 <= maxNb) { 263 var nextNb = pgwSlider.currentNb + 1; 264 } else { 265 var nextNb = 0; 266 } 267 268 displayCurrent(nextNb); 269 270 }, pgwSlider.config.intervalDuration); 271 } 272 273 return true; 274 }; 275 276 init(); 277 return this; 278 } 279})(jQuery);
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.