1// Generated by CoffeeScript 1.6.1 2(function() { 3 4 (function($, window, document) { 5 var Plugin, defaults, pluginName; 6 pluginName = "slidesjs"; 7 defaults = { 8 width: 940, 9 height: 528, 10 start: 1, 11 navigation: { 12 active: true, 13 effect: "slide" 14 }, 15 pagination: { 16 active: true, 17 effect: "slide" 18 }, 19 play: { 20 active: false, 21 effect: "slide", 22 interval: 5000, 23 auto: false, 24 swap: true, 25 pauseOnHover: false, 26 restartDelay: 2500 27 }, 28 effect: { 29 slide: { 30 speed: 500 31 }, 32 fade: { 33 speed: 300, 34 crossfade: true 35 } 36 }, 37 callback: { 38 loaded: function() {}, 39 start: function() {}, 40 complete: function() {} 41 } 42 }; 43 Plugin = (function() { 44 45 function Plugin(element, options) { 46 this.element = element; 47 this.options = $.extend(true, {}, defaults, options); 48 this._defaults = defaults; 49 this._name = pluginName; 50 this.init(); 51 } 52 53 return Plugin; 54 55 })(); 56 Plugin.prototype.init = function() { 57 var $element, nextButton, pagination, playButton, prevButton, stopButton, 58 _this = this; 59 $element = $(this.element); 60 this.data = $.data(this); 61 $.data(this, "animating", false); 62 $.data(this, "total", $element.children().not(".slidesjs-navigation", $element).length); 63 $.data(this, "current", this.options.start - 1); 64 $.data(this, "vendorPrefix", this._getVendorPrefix()); 65 if (typeof TouchEvent !== "undefined") { 66 $.data(this, "touch", true); 67 this.options.effect.slide.speed = this.options.effect.slide.speed / 2; 68 } 69 $element.css({ 70 overflow: "hidden" 71 }); 72 $element.slidesContainer = $element.children().not(".slidesjs-navigation", $element).wrapAll("<div class='slidesjs-container'>", $element).parent().css({ 73 overflow: "hidden", 74 position: "relative" 75 }); 76 $(".slidesjs-container", $element).wrapInner("<div class='slidesjs-control'>", $element).children(); 77 $(".slidesjs-control", $element).css({ 78 position: "relative", 79 left: 0 80 }); 81 $(".slidesjs-control", $element).children().addClass("slidesjs-slide").css({ 82 position: "absolute", 83 top: 0, 84 left: 0, 85 width: "100%", 86 zIndex: 0, 87 display: "none", 88 webkitBackfaceVisibility: "hidden" 89 }); 90 $.each($(".slidesjs-control", $element).children(), function(i) { 91 var $slide; 92 $slide = $(this); 93 return $slide.attr("slidesjs-index", i); 94 }); 95 if (this.data.touch) { 96 $(".slidesjs-control", $element).on("touchstart", function(e) { 97 return _this._touchstart(e); 98 }); 99 $(".slidesjs-control", $element).on("touchmove", function(e) { 100 return _this._touchmove(e); 101 }); 102 $(".slidesjs-control", $element).on("touchend", function(e) { 103 return _this._touchend(e); 104 }); 105 } 106 $element.fadeIn(0); 107 this.update(); 108 if (this.data.touch) { 109 this._setuptouch(); 110 } 111 $(".slidesjs-control", $element).children(":eq(" + this.data.current + ")").eq(0).fadeIn(0, function() { 112 return $(this).css({ 113 zIndex: 10 114 }); 115 }); 116 if (this.options.navigation.active) { 117 prevButton = $("<a>", { 118 "class": "slidesjs-previous slidesjs-navigation", 119 href: "#", 120 title: "Previous", 121 text: "Previous" 122 }).appendTo($element); 123 nextButton = $("<a>", { 124 "class": "slidesjs-next slidesjs-navigation", 125 href: "#", 126 title: "Next", 127 text: "Next" 128 }).appendTo($element); 129 } 130 $(".slidesjs-next", $element).click(function(e) { 131 e.preventDefault(); 132 _this.stop(true); 133 return _this.next(_this.options.navigation.effect); 134 }); 135 $(".slidesjs-previous", $element).click(function(e) { 136 e.preventDefault(); 137 _this.stop(true); 138 return _this.previous(_this.options.navigation.effect); 139 }); 140 if (this.options.play.active) { 141 playButton = $("<a>", { 142 "class": "slidesjs-play slidesjs-navigation", 143 href: "#", 144 title: "Play", 145 text: "" 146 }).appendTo($element); 147 stopButton = $("<a>", { 148 "class": "slidesjs-stop slidesjs-navigation", 149 href: "#", 150 title: "Stop", 151 text: "" 152 }).appendTo($element); 153 playButton.click(function(e) { 154 e.preventDefault(); 155 return _this.play(true); 156 }); 157 stopButton.click(function(e) { 158 e.preventDefault(); 159 return _this.stop(true); 160 }); 161 if (this.options.play.swap) { 162 stopButton.css({ 163 display: "none" 164 }); 165 } 166 } 167 if (this.options.pagination.active) { 168 pagination = $("<ul>", { 169 "class": "slidesjs-pagination" 170 }).appendTo($element); 171 $.each(new Array(this.data.total), function(i) { 172 var paginationItem, paginationLink; 173 paginationItem = $("<li>", { 174 "class": "slidesjs-pagination-item" 175 }).appendTo(pagination); 176 paginationLink = $("<a>", { 177 href: "#",
178 "data-slidesjs-item": i, 179 html: i + 1 180 }).appendTo(paginationItem); 181 return paginationLink.click(function(e) { 182 e.preventDefault(); 183 _this.stop(true); 184 return _this.goto(($(e.currentTarget).attr("data-slidesjs-item") * 1) + 1); 185 }); 186 }); 187 } 188 $(window).bind("resize", function() { 189 return _this.update(); 190 }); 191 this._setActive(); 192 if (this.options.play.auto) { 193 this.play(); 194 } 195 return this.options.callback.loaded(this.options.start); 196 }; 197 Plugin.prototype._setActive = function(number) { 198 var $element, current; 199 $element = $(this.element); 200 this.data = $.data(this); 201 current = number > -1 ? number : this.data.current; 202 $(".active", $element).removeClass("active"); 203 return $(".slidesjs-pagination li:eq(" + current + ") a", $element).addClass("active"); 204 }; 205 Plugin.prototype.update = function() { 206 var $element, height, width; 207 $element = $(this.element); 208 this.data = $.data(this); 209 $(".slidesjs-control", $element).children(":not(:eq(" + this.data.current + "))").css({ 210 display: "none", 211 left: 0, 212 zIndex: 0 213 }); 214 width = $element.width(); 215 height = (this.options.height / this.options.width) * width; 216 this.options.width = width; 217 this.options.height = height; 218 return $(".slidesjs-control, .slidesjs-container", $element).css({ 219 width: width, 220 height: height 221 }); 222 }; 223 Plugin.prototype.next = function(effect) { 224 var $element; 225 $element = $(this.element); 226 this.data = $.data(this); 227 $.data(this, "direction", "next"); 228 if (effect === void 0) { 229 effect = this.options.navigation.effect; 230 } 231 if (effect === "fade") { 232 return this._fade(); 233 } else { 234 return this._slide(); 235 } 236 }; 237 Plugin.prototype.previous = function(effect) { 238 var $element; 239 $element = $(this.element); 240 this.data = $.data(this); 241 $.data(this, "direction", "previous"); 242 if (effect === void 0) { 243 effect = this.options.navigation.effect; 244 } 245 if (effect === "fade") { 246 return this._fade(); 247 } else { 248 return this._slide(); 249 } 250 }; 251 Plugin.prototype.goto = function(number) { 252 var $element, effect; 253 $element = $(this.element); 254 this.data = $.data(this); 255 if (effect === void 0) { 256 effect = this.options.pagination.effect; 257 } 258 if (number > this.data.total) { 259 number = this.data.total; 260 } else if (number < 1) { 261 number = 1; 262 } 263 if (typeof number === "number") { 264 if (effect === "fade") { 265 return this._fade(number); 266 } else { 267 return this._slide(number); 268 } 269 } else if (typeof number === "string") { 270 if (number === "first") { 271 if (effect === "fade") { 272 return this._fade(0); 273 } else { 274 return this._slide(0); 275 } 276 } else if (number === "last") { 277 if (effect === "fade") { 278 return this._fade(this.data.total); 279 } else { 280 return this._slide(this.data.total); 281 } 282 } 283 } 284 }; 285 Plugin.prototype._setuptouch = function() { 286 var $element, next, previous, slidesControl; 287 $element = $(this.element); 288 this.data = $.data(this); 289 slidesControl = $(".slidesjs-control", $element); 290 next = this.data.current + 1; 291 previous = this.data.current - 1; 292 if (previous < 0) { 293 previous = this.data.total - 1; 294 } 295 if (next > this.data.total - 1) { 296 next = 0; 297 } 298 slidesControl.children(":eq(" + next + ")").css({ 299 display: "block", 300 left: this.options.width 301 }); 302 return slidesControl.children(":eq(" + previous + ")").css({ 303 display: "block", 304 left: -this.options.width 305 }); 306 }; 307 Plugin.prototype._touchstart = function(e) { 308 var $element, touches; 309 $element = $(this.element); 310 this.data = $.data(this); 311 touches = e.originalEvent.touches[0]; 312 this._setuptouch(); 313 $.data(this, "touchtimer", Number(new Date())); 314 $.data(this, "touchstartx", touches.pageX); 315 $.data(this, "touchstarty", touches.pageY); 316 return e.stopPropagation(); 317 }; 318 Plugin.prototype._touchend = function(e) { 319 var $element, duration, prefix, slidesControl, timing, touches, transform, 320 _this = this; 321 $element = $(this.element); 322 this.data = $.data(this); 323 touches = e.originalEvent.touches[0]; 324 slidesControl = $(".slidesjs-control", $element); 325 if (slidesControl.position().left > this.options.width * 0.5 || slidesControl.position().left > this.options.width * 0.1 && (Number(new Date()) - this.data.touchtimer < 250)) { 326 $.data(this, "direction", "previous"); 327 this._slide(); 328 } else if (slidesControl.position().left < -(this.options.width * 0.5) || slidesControl.position().left < -(this.options.width * 0.1) && (Number(new Date()) - this.data.touchtimer < 250)) { 329 $.data(this, "direction", "next"); 330 this._slide(); 331 } else { 332 prefix = this.data.vendorPrefix; 333 transform = prefix + "Transform"; 334 duration = prefix + "TransitionDuration"; 335 timing = prefix + "TransitionTimingFunction"; 336 slidesControl[0].style[transform] = "translateX(0px)"; 337 slidesControl[0].style[duration] = this.options.effect.slide.speed * 0.85 + "ms"; 338 } 339 slidesControl.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function() { 340 prefix = _this.data.vendorPrefix; 341 transform = prefix + "Transform"; 342 duration = prefix + "TransitionDuration"; 343 timing = prefix + "TransitionTimingFunction"; 344 slidesControl[0].style[transform] = ""; 345 slidesControl[0].style[duration] = ""; 346 return slidesControl[0].style[timing] = ""; 347 }); 348 return e.stopPropagation(); 349 }; 350 Plugin.prototype._touchmove = function(e) { 351 var $element, prefix, slidesControl, touches, transform; 352 $element = $(this.element); 353 this.data = $.data(this); 354 touches = e.originalEvent.touches[0]; 355 prefix = this.data.vendorPrefix; 356 slidesControl = $(".slidesjs-control", $element); 357 transform = prefix + "Transform"; 358 $.data(this, "scrolling", Math.abs(touches.pageX - this.data.touchstartx) < Math.abs(touches.pageY - this.data.touchstarty)); 359 if (!this.data.animating && !this.data.scrolling) { 360 e.preventDefault(); 361 this._setuptouch();
362 slidesControl[0].style[transform] = "translateX(" + (touches.pageX - this.data.touchstartx) + "px)"; 363 } 364 return e.stopPropagation(); 365 }; 366 Plugin.prototype.play = function(next) { 367 var $element, currentSlide, slidesContainer, 368 _this = this; 369 $element = $(this.element); 370 this.data = $.data(this); 371 if (!this.data.playInterval) { 372 if (next) { 373 currentSlide = this.data.current; 374 this.data.direction = "next"; 375 if (this.options.play.effect === "fade") { 376 this._fade(); 377 } else { 378 this._slide(); 379 } 380 } 381 $.data(this, "playInterval", setInterval((function() { 382 currentSlide = _this.data.current; 383 _this.data.direction = "next"; 384 if (_this.options.play.effect === "fade") { 385 return _this._fade(); 386 } else { 387 return _this._slide(); 388 } 389 }), this.options.play.interval)); 390 slidesContainer = $(".slidesjs-container", $element); 391 if (this.options.play.pauseOnHover) { 392 slidesContainer.unbind(); 393 slidesContainer.bind("mouseenter", function() { 394 return _this.stop(); 395 }); 396 slidesContainer.bind("mouseleave", function() { 397 if (_this.options.play.restartDelay) { 398 return $.data(_this, "restartDelay", setTimeout((function() { 399 return _this.play(true); 400 }), _this.options.play.restartDelay)); 401 } else { 402 return _this.play(); 403 } 404 }); 405 } 406 $.data(this, "playing", true); 407 $(".slidesjs-play", $element).addClass("slidesjs-playing"); 408 if (this.options.play.swap) { 409 $(".slidesjs-play", $element).hide(); 410 return $(".slidesjs-stop", $element).show(); 411 } 412 } 413 }; 414 Plugin.prototype.stop = function(clicked) { 415 var $element; 416 $element = $(this.element); 417 this.data = $.data(this); 418 clearInterval(this.data.playInterval); 419 if (this.options.play.pauseOnHover && clicked) { 420 $(".slidesjs-container", $element).unbind(); 421 } 422 $.data(this, "playInterval", null); 423 $.data(this, "playing", false); 424 $(".slidesjs-play", $element).removeClass("slidesjs-playing"); 425 if (this.options.play.swap) { 426 $(".slidesjs-stop", $element).hide(); 427 return $(".slidesjs-play", $element).show(); 428 } 429 }; 430 Plugin.prototype._slide = function(number) { 431 var $element, currentSlide, direction, duration, next, prefix, slidesControl, timing, transform, value, 432 _this = this; 433 $element = $(this.element); 434 this.data = $.data(this); 435 if (!this.data.animating && number !== this.data.current + 1) { 436 $.data(this, "animating", true); 437 currentSlide = this.data.current; 438 if (number > -1) { 439 number = number - 1; 440 value = number > currentSlide ? 1 : -1; 441 direction = number > currentSlide ? -this.options.width : this.options.width; 442 next = number; 443 } else { 444 value = this.data.direction === "next" ? 1 : -1; 445 direction = this.data.direction === "next" ? -this.options.width : this.options.width; 446 next = currentSlide + value; 447 } 448 if (next === -1) { 449 next = this.data.total - 1; 450 } 451 if (next === this.data.total) { 452 next = 0; 453 } 454 this._setActive(next); 455 slidesControl = $(".slidesjs-control", $element); 456 if (number > -1) { 457 slidesControl.children(":not(:eq(" + currentSlide + "))").css({ 458 display: "none", 459 left: 0, 460 zIndex: 0 461 }); 462 } 463 slidesControl.children(":eq(" + next + ")").css({ 464 display: "block", 465 left: value * this.options.width, 466 zIndex: 10 467 }); 468 this.options.callback.start(currentSlide + 1); 469 if (this.data.vendorPrefix) { 470 prefix = this.data.vendorPrefix; 471 transform = prefix + "Transform"; 472 duration = prefix + "TransitionDuration"; 473 timing = prefix + "TransitionTimingFunction";
474 slidesControl[0].style[transform] = "translateX(" + direction + "px)"; 475 slidesControl[0].style[duration] = this.options.effect.slide.speed + "ms"; 476 return slidesControl.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function() { 477 slidesControl[0].style[transform] = ""; 478 slidesControl[0].style[duration] = ""; 479 slidesControl.children(":eq(" + next + ")").css({ 480 left: 0 481 }); 482 slidesControl.children(":eq(" + currentSlide + ")").css({ 483 display: "none", 484 left: 0, 485 zIndex: 0 486 }); 487 $.data(_this, "current", next); 488 $.data(_this, "animating", false); 489 slidesControl.unbind("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd"); 490 slidesControl.children(":not(:eq(" + next + "))").css({ 491 display: "none", 492 left: 0, 493 zIndex: 0 494 }); 495 if (_this.data.touch) { 496 _this._setuptouch(); 497 } 498 return _this.options.callback.complete(next + 1); 499 }); 500 } else { 501 return slidesControl.stop().animate({ 502 left: direction 503 }, this.options.effect.slide.speed, (function() { 504 slidesControl.css({ 505 left: 0 506 }); 507 slidesControl.children(":eq(" + next + ")").css({ 508 left: 0 509 }); 510 return slidesControl.children(":eq(" + currentSlide + ")").css({ 511 display: "none", 512 left: 0, 513 zIndex: 0 514 }, $.data(_this, "current", next), $.data(_this, "animating", false), _this.options.callback.complete(next + 1)); 515 })); 516 } 517 } 518 }; 519 Plugin.prototype._fade = function(number) { 520 var $element, currentSlide, next, slidesControl, value, 521 _this = this; 522 $element = $(this.element); 523 this.data = $.data(this); 524 if (!this.data.animating && number !== this.data.current + 1) { 525 $.data(this, "animating", true); 526 currentSlide = this.data.current; 527 if (number) { 528 number = number - 1; 529 value = number > currentSlide ? 1 : -1; 530 next = number; 531 } else { 532 value = this.data.direction === "next" ? 1 : -1; 533 next = currentSlide + value; 534 } 535 if (next === -1) { 536 next = this.data.total - 1; 537 } 538 if (next === this.data.total) { 539 next = 0; 540 } 541 this._setActive(next); 542 slidesControl = $(".slidesjs-control", $element); 543 slidesControl.children(":eq(" + next + ")").css({ 544 display: "none", 545 left: 0, 546 zIndex: 10 547 }); 548 this.options.callback.start(currentSlide + 1); 549 if (this.options.effect.fade.crossfade) { 550 slidesControl.children(":eq(" + this.data.current + ")").stop().fadeOut(this.options.effect.fade.speed); 551 return slidesControl.children(":eq(" + next + ")").stop().fadeIn(this.options.effect.fade.speed, (function() { 552 slidesControl.children(":eq(" + next + ")").css({ 553 zIndex: 0 554 }); 555 $.data(_this, "animating", false); 556 $.data(_this, "current", next); 557 return _this.options.callback.complete(next + 1); 558 })); 559 } else { 560 return slidesControl.children(":eq(" + currentSlide + ")").stop().fadeOut(this.options.effect.fade.speed, (function() { 561 slidesControl.children(":eq(" + next + ")").stop().fadeIn(_this.options.effect.fade.speed, (function() { 562 return slidesControl.children(":eq(" + next + ")").css({ 563 zIndex: 10 564 }); 565 })); 566 $.data(_this, "animating", false); 567 $.data(_this, "current", next); 568 return _this.options.callback.complete(next + 1); 569 })); 570 } 571 } 572 }; 573 Plugin.prototype._getVendorPrefix = function() { 574 var body, i, style, transition, vendor; 575 body = document.body || document.documentElement; 576 style = body.style; 577 transition = "transition"; 578 vendor = ["Moz", "Webkit", "Khtml", "O", "ms"]; 579 transition = transition.charAt(0).toUpperCase() + transition.substr(1); 580 i = 0; 581 while (i < vendor.length) { 582 if (typeof style[vendor[i] + transition] === "string") { 583 return vendor[i]; 584 } 585 i++; 586 } 587 return false;
588 }; 589 return $.fn[pluginName] = function(options) { 590 return this.each(function() { 591 if (!$.data(this, "plugin_" + pluginName)) { 592 return $.data(this, "plugin_" + pluginName, new Plugin(this, options)); 593 } 594 }); 595 }; 596 })(jQuery, window, document); 597 598}).call(this);
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.