1/*jslint browser: true */ /*global jQuery: true */ 2 3/** 4 * jQuery Cookie plugin 5 * 6 * Copyright (c) 2010 Klaus Hartl (stilbuero.de) 7 * Dual licensed under the MIT and GPL licenses: 8 * http://www.opensource.org/licenses/mit-license.php 9 * http://www.gnu.org/licenses/gpl.html 10 * 11 */ 12 13// TODO JsDoc 14 15/** 16 * Create a cookie with the given key and value and other optional parameters. 17 * 18 * @example $.cookie('the_cookie', 'the_value'); 19 * @desc Set the value of a cookie. 20 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); 21 * @desc Create a cookie with all available options. 22 * @example $.cookie('the_cookie', 'the_value'); 23 * @desc Create a session cookie. 24 * @example $.cookie('the_cookie', null); 25 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain 26 * used when the cookie was set. 27 * 28 * @param String key The key of the cookie. 29 * @param String value The value of the cookie. 30 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. 31 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. 32 * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. 33 * If set to null or omitted, the cookie will be a session cookie and will not be retained 34 * when the the browser exits. 35 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). 36 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). 37 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will 38 * require a secure protocol (like HTTPS). 39 * @type undefined 40 * 41 * @name $.cookie 42 * @cat Plugins/Cookie 43 * @author Klaus Hartl/[email protected] 44 */ 45 46/** 47 * Get the value of a cookie with the given key. 48 * 49 * @example $.cookie('the_cookie'); 50 * @desc Get the value of a cookie. 51 * 52 * @param String key The key of the cookie. 53 * @return The value of the cookie. 54 * @type String 55 * 56 * @name $.cookie 57 * @cat Plugins/Cookie 58 * @author Klaus Hartl/[email protected] 59 */ 60jQuery.cookie = function (key, value, options) { 61 62 // key and value given, set cookie... 63 if (arguments.length > 1 && (value === null || typeof value !== "object")) { 64 options = jQuery.extend({}, options); 65 66 if (value === null) { 67 options.expires = -1; 68 } 69 70 if (typeof options.expires === 'number') { 71 var days = options.expires, t = options.expires = new Date(); 72 t.setDate(t.getDate() + days); 73 } 74 75 return (document.cookie = [ 76 encodeURIComponent(key), '=', 77 options.raw ? String(value) : encodeURIComponent(String(value)), 78 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 79 options.path ? '; path=' + options.path : '', 80 options.domain ? '; domain=' + options.domain : '', 81 options.secure ? '; secure' : '' 82 ].join('')); 83 } 84 85 // key and possibly options given, get cookie... 86 options = value || {}; 87 var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; 88 return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; 89}; 90 91;/*})'"*/ 92;/*})'"*/ 93(function ($) { 94Drupal.behaviors.actionZircon = { 95 attach: function (context) { 96 $(window).load(function() { 97 window.setTimeout(function() { 98 Drupal.Zircon.equalHeight($('#panel-first-wrapper .block-inner')); 99 Drupal.Zircon.equalHeight($('#panel-second-wrapper .block-inner')) 100 Drupal.Zircon.equalHeight($('#panel-third-wrapper .block-inner')); 101 Drupal.Zircon.equalHeight($('.region-content .views-view-grid .views-col .grid-inner')); 102 }, 100); 103 }); 104 Drupal.Zircon.putLabelToInput("search_block_form", "Search..."); 105 $('#subscribe').find('input[type="submit"]').val(Drupal.t("Go")); 106 $(".change-skin-button").click(function() { 107 parts = this.href.split("/"); 108 style = parts[parts.length - 1]; 109 $.cookie("nucleus_skin", style, {path: '/'}); 110 window.location.reload(); 111 return false;
112 }); 113 $("#change_skin_menu_wrapper").mouseenter(function() { 114 $('#change_skin_menu_wrapper').stop(true, false).animate({left: 0}, 1000); 115 }).mouseleave(function() { 116 $('#change_skin_menu_wrapper').stop(true, false).animate({left: -61}, 1000); 117 }); 118 } 119}; 120 121Drupal.Zircon = Drupal.Zircon || {}; 122 123Drupal.Zircon.putLabelToInput = function(name, text) { 124 jQuery('input[name="' + name + '"]').val(Drupal.t(text)); 125 jQuery('input[name="' + name + '"]').focus(function(){ 126 if(this.value == Drupal.t(text)) { 127 this.value=''; 128 } 129 }).blur(function(){ 130 if(this.value == '') { 131 this.value=Drupal.t(text); 132 } 133 }); 134} 135 136Drupal.Zircon.equalHeight = function(elements) { 137 highest = 0; 138 elements.each(function() { 139 if($(this).innerHeight() > highest) { 140 highest = $(this).outerHeight(); 141 } 142 }); 143 return elements.each(function() { 144 padding = $(this).innerHeight() - $(this).height(); 145 extra = padding + ($(this).outerHeight() - $(this).innerHeight()); 146 if(($.browser.msie && $.browser.version == 6.0)) { 147 $(this).css({'height': highest - extra, 'overflow': 'hidden'}); 148 } 149 else { 150 $(this).css({'min-height': highest - extra}); 151 } 152 }); 153} 154})(jQuery); 155 156;/*})'"*/ 157;/*})'"*/ 158(function ($) { 159 Drupal.Responsive = Drupal.Responsive || {}; 160 Drupal.Responsive.supportedScreens = [0.5, 479.5, 719.5, 959.5, 1049.5]; 161 Drupal.Responsive.oldWindowWidth = 0; 162 Drupal.Responsive.masonry_containers = []; 163 Drupal.Responsive.masonry_widths = []; 164 165 Drupal.Responsive.updateResponsiveMenu = function(){ 166 var windowWidth = window.innerWidth ? window.innerWidth : $(window).width(); 167 if ( $('#block-tb-megamenu-main-menu').length > 0 ) return; 168 169 if(windowWidth < Drupal.Responsive.supportedScreens[3]){ 170 $('.region-menu-bar').css('display', 'none'); 171 $('.responsive-menu-button').css('display', 'block'); 172 } 173 else{ 174 $('.responsive-menu-button').css('display', 'none'); 175 $('.region-menu-bar').css('display', 'block'); 176 } 177 } 178 179 Drupal.Responsive.initResponsiveMenu = function(){ 180 Drupal.Responsive.updateResponsiveMenu(); 181 $('.tb-main-menu-button').bind('click',function(e){ 182 var target = $('.region-menu-bar'); 183 if(target.css('display') == 'none') { 184 window.scrollTo(0, 0); 185 target.css({display: 'block'}); 186 } 187 else { 188 target.css({display: 'none'}); 189 } 190 }); 191 } 192 193 Drupal.Responsive.setSlideshowHeight = function() { 194 var imgs = $('#slideshow-wrapper .view .views-field img') 195 if(imgs.length) { 196 if(!Drupal.Responsive.slideshowSize) { 197 var img = new Image(); 198 img.src = $(imgs[0]).attr('src'); 199 Drupal.Responsive.getImageSize(img); 200 setTimeout(Drupal.Responsive.setSlideshowHeight, 200) 201 return; 202 } 203 204 var page_width = $('#page').width(); 205 if(page_width < Drupal.Responsive.supportedScreens[3]) { 206 var width = Drupal.Responsive.slideshowSize.width; 207 var height = Drupal.Responsive.slideshowSize.height; 208 var new_height = Math.floor(page_width * height / width); 209 $('#slideshow-wrapper .view .views-field img, #slideshow-wrapper .view .views_slideshow_cycle_main, #slideshow-wrapper .views-slideshow-cycle-main-frame-row, #slideshow-wrapper .views-slideshow-cycle-main-frame').css({height: new_height + "px"}); 210 } 211 else { 212 $('#slideshow-wrapper .view .views-field img, #slideshow-wrapper .view .views_slideshow_cycle_main, #slideshow-wrapper .views-slideshow-cycle-main-frame-row, #slideshow-wrapper .views-slideshow-cycle-main-frame').css({height: Drupal.Responsive.slideshowSize.height + "px"}); 213 } 214 $('#slideshow-wrapper .views-slideshow-cycle-main-frame').cycle('destroy'); 215 $('#slideshow-wrapper .views-slideshow-cycle-main-frame').cycle(); 216 } 217 } 218 219 Drupal.Responsive.getImageSize = function(img) { 220 if(img.height == 0) { 221 setTimeout(function() { 222 Drupal.Responsive.getImageSize(img); 223 }, 200); 224 return; 225 } 226 if(!Drupal.Responsive.slideshowSize) {
227 Drupal.Responsive.slideshowSize = {height: img.height, width: img.width}; 228 } 229 } 230 231 Drupal.behaviors.actionResponsive = { 232 attach: function (context) { 233 $(window).load(function() { 234 Drupal.Responsive.initResponsiveMenu(); 235 //Drupal.Responsive.initMasonry(); 236 $(window).resize(function(){ 237 var windowWidth = window.innerWidth ? window.innerWidth : $(window).width(); 238 if(windowWidth != Drupal.Responsive.oldWindowWidth){ 239 Drupal.Responsive.updateResponsiveMenu(); 240 Drupal.Responsive.oldWindowWidth = windowWidth; 241 } 242 Drupal.Responsive.setSlideshowHeight(); 243 /* 244 for($i = 0; $i < Drupal.Responsive.masonry_containers.length; $i ++) { 245 Drupal.Responsive.updateColumnWidth($i); 246 $(Drupal.Responsive.masonry_containers).masonry('reload'); 247 } 248 */ 249 }); 250 }); 251 } 252 }; 253 254 Drupal.Responsive.updateColumnWidth = function(index) { 255 container = $(Drupal.Responsive.masonry_containers[index]); 256 container.addClass('masonry-reload'); 257 var container_width = container.width(); 258 console.log(container_width); 259 var number_column = Math.round(container_width / Drupal.Responsive.masonry_widths[index]); 260 var column_width = Math.floor(container_width / number_column); 261 container.find('.block:not(.block-quicktabs .block)').css({ 262 width: column_width + "px" 263 }); 264 container.data('basewidth', column_width); 265 return column_width; 266 } 267 268 Drupal.Responsive.updateMasonryWidth = function(index, reload) { 269 container = $(Drupal.Responsive.masonry_containers[index]); 270 container.addClass('masonry-reload'); 271 var options = { 272 itemSelector: '.block:not(.block-quicktabs .block)', 273 isResizable: false, 274 isAnimated: false, 275 columnWidth: function() { 276 container.removeClass('masonry-reload'); 277 var basewidth = container.data('basewidth'); 278 if(basewidth == undefined) { 279 return Drupal.Responsive.updateColumnWidth(index); 280 } 281 else { 282 return basewidth; 283 } 284 } 285 } 286 container.masonry(options); 287 } 288 289 Drupal.Responsive.initMasonry = function() { 290 var container = $('.sidebar .region'); 291 if(container.length) { 292 for($i = 0; $i < container.length; $i ++) { 293 Drupal.Responsive.masonry_containers.push(container[$i]); 294 Drupal.Responsive.masonry_widths.push(300); 295 Drupal.Responsive.updateMasonryWidth($i, true); 296 } 297 } 298 }; 299 300 301})(jQuery); 302 303;/*})'"*/ 304;/*})'"*/ 305/** 306 * jQuery Masonry v2.1.05 307 * A dynamic layout plugin for jQuery 308 * The flip-side of CSS Floats 309 * http://masonry.desandro.com 310 * 311 * Licensed under the MIT license. 312 * Copyright 2012 David DeSandro 313 */ 314 315/*jshint browser: true, curly: true, eqeqeq: true, forin: false, immed: false, newcap: true, noempty: true, strict: true, undef: true */ 316/*global jQuery: false */ 317 318(function( window, $, undefined ){ 319 320 'use strict'; 321 322 /* 323 * smartresize: debounced resize event for jQuery 324 * 325 * latest version and complete README available on Github: 326 * https://github.com/louisremi/jquery.smartresize.js 327 * 328 * Copyright 2011 @louis_remi 329 * Licensed under the MIT license. 330 */ 331 332 var $event = $.event, 333 resizeTimeout; 334 335 $event.special.smartresize = { 336 setup: function() { 337 $(this).bind( "resize", $event.special.smartresize.handler ); 338 }, 339 teardown: function() { 340 $(this).unbind( "resize", $event.special.smartresize.handler ); 341 }, 342 handler: function( event, execAsap ) { 343 // Save the context 344 var context = this, 345 args = arguments; 346 347 // set correct event type 348 event.type = "smartresize"; 349 350 if ( resizeTimeout ) { clearTimeout( resizeTimeout ); } 351 resizeTimeout = setTimeout(function() { 352 $.event.handle.apply( context, args ); 353 }, execAsap === "execAsap"? 0 : 100 ); 354 } 355 }; 356 357 $.fn.smartresize = function( fn ) { 358 return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] ); 359 }; 360 361 362 363// ========================= Masonry =============================== 364 365
366 // our "Widget" object constructor 367 $.Mason = function( options, element ){ 368 this.element = $( element ); 369 370 this._create( options ); 371 this._init(); 372 }; 373 374 $.Mason.settings = { 375 isResizable: true, 376 isAnimated: false, 377 animationOptions: { 378 queue: false, 379 duration: 500 380 }, 381 gutterWidth: 0, 382 isRTL: false, 383 isFitWidth: false, 384 containerStyle: { 385 position: 'relative' 386 } 387 }; 388 389 $.Mason.prototype = { 390 391 _filterFindBricks: function( $elems ) { 392 var selector = this.options.itemSelector; 393 // if there is a selector 394 // filter/find appropriate item elements 395 return !selector ? $elems : $elems.filter( selector ).add( $elems.find( selector ) ); 396 }, 397 398 _getBricks: function( $elems ) { 399 var $bricks = this._filterFindBricks( $elems ) 400 .css({ position: 'absolute' }) 401 .addClass('masonry-brick'); 402 return $bricks; 403 }, 404 405 // sets up widget 406 _create : function( options ) { 407 408 this.options = $.extend( true, {}, $.Mason.settings, options ); 409 this.styleQueue = []; 410 411 // get original styles in case we re-apply them in .destroy() 412 var elemStyle = this.element[0].style; 413 this.originalStyle = { 414 // get height 415 height: elemStyle.height || '' 416 }; 417 // get other styles that will be overwritten 418 var containerStyle = this.options.containerStyle; 419 for ( var prop in containerStyle ) { 420 this.originalStyle[ prop ] = elemStyle[ prop ] || ''; 421 } 422 423 this.element.css( containerStyle ); 424 425 this.horizontalDirection = this.options.isRTL ? 'right' : 'left'; 426 427 this.offset = { 428 x: parseInt( this.element.css( 'padding-' + this.horizontalDirection ), 10 ), 429 y: parseInt( this.element.css( 'padding-top' ), 10 ) 430 }; 431 432 this.isFluid = this.options.columnWidth && typeof this.options.columnWidth === 'function'; 433 434 // add masonry class first time around 435 var instance = this; 436 setTimeout( function() { 437 instance.element.addClass('masonry'); 438 }, 0 ); 439 440 // bind resize method 441 if ( this.options.isResizable ) { 442 $(window).bind( 'smartresize.masonry', function() { 443 instance.resize(); 444 }); 445 } 446 447 448 // need to get bricks 449 this.reloadItems(); 450 451 }, 452 453 // _init fires when instance is first created 454 // and when instance is triggered again -> $el.masonry(); 455 _init : function( callback ) { 456 this._getColumns(); 457 this._reLayout( callback ); 458 }, 459 460 option: function( key, value ){ 461 // set options AFTER initialization: 462 // signature: $('#foo').bar({ cool:false }); 463 if ( $.isPlainObject( key ) ){ 464 this.options = $.extend(true, this.options, key); 465 } 466 }, 467 468 // ====================== General Layout ====================== 469 470 // used on collection of atoms (should be filtered, and sorted before ) 471 // accepts atoms-to-be-laid-out to start with 472 layout : function( $bricks, callback ) { 473 474 // place each brick 475 for (var i=0, len = $bricks.length; i < len; i++) { 476 this._placeBrick( $bricks[i] ); 477 } 478 479 // set the size of the container 480 var containerSize = {}; 481 containerSize.height = Math.max.apply( Math, this.colYs ); 482 if ( this.options.isFitWidth ) { 483 var unusedCols = 0; 484 i = this.cols; 485 // count unused columns 486 while ( --i ) { 487 if ( this.colYs[i] !== 0 ) { 488 break; 489 } 490 unusedCols++; 491 } 492 // fit container to columns that have been used; 493 containerSize.width = (this.cols - unusedCols) * this.columnWidth - this.options.gutterWidth; 494 } 495 this.styleQueue.push({ $el: this.element, style: containerSize }); 496 497 // are we animating the layout arrangement? 498 // use plugin-ish syntax for css or animate 499 var styleFn = !this.isLaidOut ? 'css' : ( 500 this.options.isAnimated ? 'animate' : 'css' 501 ), 502 animOpts = this.options.animationOptions; 503 504 // process styleQueue 505 var obj; 506 for (i=0, len = this.styleQueue.length; i < len; i++) { 507 obj = this.styleQueue[i]; 508 obj.$el[ styleFn ]( obj.style, animOpts ); 509 } 510 511 // clear out queue for next time 512 this.styleQueue = []; 513 514 // provide $elems as context for the callback 515 if ( callback ) { 516 callback.call( $bricks ); 517 } 518 519 this.isLaidOut = true; 520 }, 521 522 // calculates number of columns 523 // i.e. this.columnWidth = 200 524 _getColumns : function() { 525 var container = this.options.isFitWidth ? this.element.parent() : this.element, 526 containerWidth = container.width(); 527 528 // use fluid columnWidth function if there 529 this.columnWidth = this.isFluid ? this.options.columnWidth( containerWidth )
529: 530 // if not, how about the explicitly set option? 531 this.options.columnWidth || 532 // or use the size of the first item 533 this.$bricks.outerWidth(true) || 534 // if there's no items, use size of container 535 containerWidth; 536 537 this.columnWidth += this.options.gutterWidth; 538 539 this.cols = Math.floor( ( containerWidth + this.options.gutterWidth ) / this.columnWidth ); 540 this.cols = Math.max( this.cols, 1 ); 541 542 }, 543 544 // layout logic 545 _placeBrick: function( brick ) { 546 var $brick = $(brick), 547 colSpan, groupCount, groupY, groupColY, j; 548 549 //how many columns does this brick span 550 colSpan = Math.ceil( $brick.outerWidth(true) / this.columnWidth ); 551 colSpan = Math.min( colSpan, this.cols ); 552 553 if ( colSpan === 1 ) { 554 // if brick spans only one column, just like singleMode 555 groupY = this.colYs; 556 } else { 557 // brick spans more than one column 558 // how many different places could this brick fit horizontally 559 groupCount = this.cols + 1 - colSpan; 560 groupY = []; 561 562 // for each group potential horizontal position 563 for ( j=0; j < groupCount; j++ ) { 564 // make an array of colY values for that one group 565 groupColY = this.colYs.slice( j, j+colSpan ); 566 // and get the max value of the array 567 groupY[j] = Math.max.apply( Math, groupColY ); 568 } 569 570 } 571 572 // get the minimum Y value from the columns 573 var minimumY = Math.min.apply( Math, groupY ), 574 shortCol = 0; 575 576 // Find index of short column, the first from the left 577 for (var i=0, len = groupY.length; i < len; i++) { 578 if ( groupY[i] === minimumY ) { 579 shortCol = i; 580 break; 581 } 582 } 583 584 // position the brick 585 var position = { 586 top: minimumY + this.offset.y 587 }; 588 // position.left or position.right 589 position[ this.horizontalDirection ] = this.columnWidth * shortCol + this.offset.x; 590 this.styleQueue.push({ $el: $brick, style: position }); 591 592 // apply setHeight to necessary columns 593 var setHeight = minimumY + $brick.outerHeight(true), 594 setSpan = this.cols + 1 - len; 595 for ( i=0; i < setSpan; i++ ) { 596 this.colYs[ shortCol + i ] = setHeight; 597 } 598 599 }, 600 601 602 resize: function() { 603 var prevColCount = this.cols; 604 // get updated colCount 605 this._getColumns(); 606 if ( this.isFluid || this.cols !== prevColCount ) { 607 // if column count has changed, trigger new layout 608 this._reLayout(); 609 } 610 }, 611 612 613 _reLayout : function( callback ) { 614 // reset columns 615 var i = this.cols; 616 this.colYs = []; 617 while (i--) { 618 this.colYs.push( 0 ); 619 } 620 // apply layout logic to all bricks 621 this.layout( this.$bricks, callback ); 622 }, 623 624 // ====================== Convenience methods ====================== 625 626 // goes through all children again and gets bricks in proper order 627 reloadItems : function() { 628 this.$bricks = this._getBricks( this.element.children() ); 629 }, 630 631 632 reload : function( callback ) { 633 this.reloadItems(); 634 this._init( callback ); 635 }, 636 637 638 // convienence method for working with Infinite Scroll 639 appended : function( $content, isAnimatedFromBottom, callback ) { 640 if ( isAnimatedFromBottom ) { 641 // set new stuff to the bottom 642 this._filterFindBricks( $content ).css({ top: this.element.height() }); 643 var instance = this; 644 setTimeout( function(){ 645 instance._appended( $content, callback ); 646 }, 1 ); 647 } else { 648 this._appended( $content, callback ); 649 } 650 }, 651 652 _appended : function( $content, callback ) { 653 var $newBricks = this._getBricks( $content ); 654 // add new bricks to brick pool 655 this.$bricks = this.$bricks.add( $newBricks ); 656 this.layout( $newBricks, callback ); 657 }, 658 659 // removes elements from Masonry widget 660 remove : function( $content ) { 661 this.$bricks = this.$bricks.not( $content ); 662 $content.remove(); 663 }, 664 665 // destroys widget, returns elements and container back (close) to original style 666 destroy : function() { 667 668 this.$bricks 669 .removeClass('masonry-brick') 670 .each(function(){ 671 this.style.position = ''; 672 this.style.top = ''; 673 this.style.left = ''; 674 }); 675 676 // re-apply saved container styles 677 var elemStyle = this.element[0].style; 678 for ( var prop in this.originalStyle ) { 679 elemStyle[ prop ] = this.originalStyle[ prop ]; 680 } 681 682 this.element 683 .unbind('.masonry') 684 .removeClass('masonry') 685 .removeData('masonry'); 686 687 $(window).unbind('.masonry'); 688 689 } 690 691 }; 692 693 694 // ======================= imagesLoaded Plugin =============================== 695 /*! 696 * jQuery imagesLoaded plugin v1.1.0 697 * http://github.com/desandro/imagesloaded 698 * 699 * MIT License. by Paul Irish et al. 700 */ 701 702 703 // $('#my-container').imagesLoaded(myFunction) 704 // or 705 // $('img').imagesLoaded(myFunction) 706 707 // execute a callback when all images have loaded. 708 // needed because .load() doesn't work on cached images 709 710 // callback function gets image collection as argument 711 // `this` is the container 712 713 $.fn.imagesLoaded = function( callback ) { 714 var $this = this, 715 $images = $this.find('img').add( $this.filter('img') ), 716 len = $images.length, 717 blank = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==', 718 loaded = []; 719 720 function triggerCallback() { 721 callback.call( $this, $images ); 722 } 723 724 function imgLoaded( event ) { 725 var img = event.target; 726 if ( img.src !== blank && $.inArray( img, loaded ) === -1 ){ 727 loaded.push( img ); 728 if ( --len <= 0 ){ 729 setTimeout( triggerCallback ); 730 $images.unbind( '.imagesLoaded', imgLoaded ); 731 } 732 } 733 } 734 735 // if no images, trigger immediately 736 if ( !len ) { 737 triggerCallback(); 738 } 739 740 $images.bind( 'load.imagesLoaded error.imagesLoaded', imgLoaded ).each( function() { 741 // cached images don't fire load sometimes, so we reset src. 742 var src = this.src; 743 // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f 744 // data uri bypasses webkit log warning (thx doug jones) 745 this.src = blank; 746 this.src = src; 747 }); 748 749 return $this; 750 }; 751 752 753 // helper function for logging errors 754 // $.error breaks jQuery chaining 755 var logError = function( message ) { 756 if ( window.console ) { 757 window.console.error( message ); 758 } 759 }; 760 761 // ======================= Plugin bridge =============================== 762 // leverages data method to either create or return $.Mason constructor 763 // A bit from jQuery UI 764 // https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js 765 // A bit from jcarousel 766 // https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarou
766sel.js 767 768 $.fn.masonry = function( options ) { 769 if ( typeof options === 'string' ) { 770 // call method 771 var args = Array.prototype.slice.call( arguments, 1 ); 772 773 this.each(function(){ 774 var instance = $.data( this, 'masonry' ); 775 if ( !instance ) { 776 logError( "cannot call methods on masonry prior to initialization; " + 777 "attempted to call method '" + options + "'" ); 778 return; 779 } 780 if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) { 781 logError( "no such method '" + options + "' for masonry instance" ); 782 return; 783 } 784 // apply method 785 instance[ options ].apply( instance, args ); 786 }); 787 } else { 788 this.each(function() { 789 var instance = $.data( this, 'masonry' ); 790 if ( instance ) { 791 // apply options & init 792 instance.option( options || {} ); 793 instance._init(); 794 } else { 795 // initialize new instance 796 $.data( this, 'masonry', new $.Mason( options, this ) ); 797 } 798 }); 799 } 800 return this; 801 }; 802 803})( window, jQuery ); 804;/*})'"*/ 805;/*})'"*/ 806/** 807 * jQuery Masonry v2.1.05 808 * A dynamic layout plugin for jQuery 809 * The flip-side of CSS Floats 810 * http://masonry.desandro.com 811 * 812 * Licensed under the MIT license. 813 * Copyright 2012 David DeSandro 814 */ 815(function(a,b,c){"use strict";var d=b.event,e;d.special.smartresize={setup:function(){b(this).bind("resize",d.special.smartresize.handler)},teardown:function(){b(this).unbind("resize",d.special.smartresize.handler)},handler:function(a,c){var d=this,f=arguments;a.type="smartresize",e&&clearTimeout(e),e=setTimeout(function(){b.event.handle.apply(d,f)},c==="execAsap"?0:100)}},b.fn.smartresize=function(a){return a?this.bind("smartresize",a):this.trigger("smartresize",["execAsap"])},b.Mason=function(a,c){this.element=b(c),this._create(a),this._init()},b.Mason.settings={isResizable:!0,isAnimated:!1,animationOptions:{queue:!1,duration:500},gutterWidth:0,isRTL:!1,isFitWidth:!1,containerStyle:{position:"relative"}},b.Mason.prototype={_filterFindBricks:function(a){var b=this.options.itemSelector;return b?a.filter(b).add(a.find(b)):a},_getBricks:function(a){var b=this._filterFindBricks(a).css({position:"absolute"}).addClass("masonry-brick");return b},_create:function(c){this.options=b.extend(!0,{},b.Mason.settings,c),this.styleQueue=[];var d=this.element[0].style;this.originalStyle={height:d.height||""};var e=this.options.containerStyle;for(var f in e)this.originalStyle[f]=d[f]||"";this.element.css(e),this.horizontalDirection=this.options.isRTL?"right":"left",this.offset={x:parseInt(this.element.css("padding-"+this.horizontalDirection),10),y:parseInt(this.element.css("padding-top"),10)},this.isFluid=this.options.columnWidth&&typeof this.options.columnWidth=="function";var g=this;setTimeout(function(){g.element.addClass("masonry")},0),this.options.isResizable&&b(a).bind("smartresize.masonry",function(){g.resize()}),this.reloadItems()},_init:function(a){this._getColumns(),this._reLayout(a)},option:function(a,c){b.isPlainObject(a)&&(this.options=b.extend(!0,this.options,a))},layout:function(a,b){for(var c=0,d=a.length;c<d;c++)this._placeBrick(a[c]);var e={};e.height=Math.max.apply(Math,this.colYs);if(this.options.isFitWidth){var f=0;c=this.cols;while(--c){if(this.colYs[c]!==0)break;f++}e.width=(this.cols-f)*this.columnWidth-this.options.gutterWidth}this.styleQueue.push({$el:this.element,style:e});var g=this.isLaidOut?this.options.isAnimated?"animate":"css":"css",h=this.options.animationOptions,i;for(c=0,d=this.styleQueue.length;c<d;c++)i=this.styleQueue[c],i.$el[g](i.style,h);this.styleQueue=[],b&&b.call(a),this.isLaidOut=!0},_getColumns:function(){var a=this.options.isFitWidth?this.element.parent():this.element,b=a.width();this.columnWidth=this.isFluid?this.options.columnWidth(b):this.options.columnWidth||this.$bricks.outerWidth(!0)||b,this.columnWidth+=this.options.gutterWidth,this.cols=Math.floor((b+this.options.gutterWidth)/this.columnWidth),this.cols=Math.max(this.cols,1)},_placeBrick:function(a){var c=b(a),d,e,f,g,h;d=Math.ceil(c.outerWidth(!0)/this.columnWidth),d=Math.min(d,this.cols);if(d===1)f=this.colYs;else{e=this.cols+1-d,f=[];for(h=0;h<e;h++)g=this.colYs.slice(h,h+d),f[h]=Math.max.apply(Math,g)}var i=Math.min.apply(Math,f),j=0;for(var k=0,l=f.length;k<l;k++)if(f[k]===i){j=k;break}var m={top:i+this.offset.y};m[this.horizontalDirection]=this.columnWidth*j+this.offset.x,this.styleQueue.push({$el:c,style:m});var n=i+c.outerHeight(!0),o=this.cols+1-l;for(k=0;k<o;k++)this.colYs[j+k]=n},resize:function(){var a=this.cols;this._getColumns(),(this.isFluid||this.cols!==a)&&this._reLayout()},_reLayout:function(a){var b=this.cols;this.colYs=[];while(b--)this.colYs.push(0);this.layout(this.$bricks,a)},reloadItems:function(){this.$bricks=this._getBricks(this.element.children())},reload:function(a){this.reloadItems(),this._init(a)},appended:function(a,b,c){if(b){this._filterFindBricks(a).css({top:this.element.height()});var d=this;setTimeout(function(){d._appended(a,c)},1)}else this._appended(a,c)},_appended:function(a,b){var c=this._getBricks(a);this.$bricks=this.$bricks.add(c),this.layout(c,b)},remove:function(a){this.$bricks=this.$bricks.not(a),a.remove()},destroy:function(){this.$bricks.removeClass("masonry-brick").each(function(){this.style.position="",this.style.top="",this.style.left=""});var c=this.element[0].style;for(var d in this.originalStyle)c[d]=this.originalStyle[d];this.element.unbind(".masonry").removeClass("masonry").removeData("masonry"),b(a).unbind(".masonry")}},b.fn.imagesLoaded=function(a){function h(){a.call(c,d)}function i(a){var c=a.target;c.src!==f&&b.inArray(c,g)===-1&&(g.push(c),--e<=0&&(setTimeout(h),d.unbind(".imagesLoaded",i)))}var c=this,d=c.find("img").add(c.filter("img")),e=d.length,f="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",g=[];return e||h(),d.bind("load.imagesLoaded error.imagesLoaded",i).each(function(){var a=this.src;this.src=f,this.src=a}),c};var f=function(b){a.console&&a.console.error(b)};
815b.fn.masonry=function(a){if(typeof a=="string"){var c=Array.prototype.slice.call(arguments,1);this.each(function(){var d=b.data(this,"masonry");if(!d){f("cannot call methods on masonry prior to initialization; attempted to call method '"+a+"'");return}if(!b.isFunction(d[a])||a.charAt(0)==="_"){f("no such method '"+a+"' for masonry instance");return}d[a].apply(d,c)})}else this.each(function(){var c=b.data(this,"masonry");c?(c.option(a||{}),c._init()):b.data(this,"masonry",new b.Mason(a,this))});return this}})(window,jQuery); 816;/*})'"*/ 817;/*})'"*/
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.