1(function($) { 2 "use strict"; 3 var HURRY = HURRY || {}; 4 5 /* General functions 6 ---------------------------------------------------------------*/ 7 HURRY.general = function () { 8 // Top search 9 $( '#top-search a.search-click' ).on( 'click', function () { 10 $( '.show-search' ).fadeToggle(); 11 $( '.show-search input.search-input' ).focus(); 12 } ); 13 14 // Go to top 15 $( '.go-to-top' ).on( 'click', function () { 16 $( 'html, body' ).animate( { scrollTop: 0 }, 700 ); 17 return false; 18 } ); 19 20 // Double Touch To Go 21 if ( $().doubleTouchToGo ) { 22 $( '#navigation .menu li.menu-item-has-children, #navigation .menu li.penci-mega-menu' ).doubleTouchToGo(); 23 } // doubleTouchToGo 24 } 25 26 /* Sticky main navigation 27 ---------------------------------------------------------------*/ 28 HURRY.main_sticky = function () { 29 if ( $().sticky ) { 30 var spaceTop = 0; 31 if ( $( 'body' ).hasClass( 'admin-bar' ) ) { 32 spaceTop = 32; 33 } 34 $( "nav#navigation" ).each( function () { 35 $( this ).sticky( { topSpacing: spaceTop } ); 36 } ); 37 } // sticky 38 } 39 40 /* Countdown 41 ---------------------------------------------------------------*/ 42 HURRY.count_down = function () { 43 if ( $( '.penci-countdown' ).length > 0 ) { 44 var $this = $( '.penci-countdown' ), 45 count_time = $this.data( 'time' ); 46 $( '.penci-countdown' ).countdown( count_time ).on( 'update.countdown', function ( event ) { 47 var $this = $( this ).html( event.strftime( '<div class="countdown-row">' 48 + '<span class="countdown-section"><span class="countdown-amount">%-m</span><span class="countdown-period">Months</span></span>'
49 + '<span class="countdown-section"><span class="countdown-amount">%-d</span><span class="countdown-period">Days</span></span>' 50 + '<span class="countdown-section"><span class="countdown-amount">%H</span><span class="countdown-period">Hours</span></span>' 51 + '<span class="countdown-section"><span class="countdown-amount">%M</span><span class="countdown-period">Minutes</span></span>' 52 + '<span class="countdown-section"><span class="countdown-amount">%S</span><span class="countdown-period">Seconds</span></span>' 53 + '</div>') ); 54 } ); 55 } 56 } 57 58 /* Slick home page carousel featured posts 59 ---------------------------------------------------------------*/ 60 HURRY.carousel_homepage = function () { 61 if ( $().slick ) { 62 $( '.featured-carousel' ).each( function () { 63 var $this = $( this ), 64 autoplay = $this.data( 'auto' ), 65 autotime = $this.data( 'autotime' ), 66 autospeed = $this.data( 'speed' ); 67 if ( $this.hasClass( 'style-2' ) ) { 68 $this.slick( { 69 dots : false, 70 infinite : true, 71 speed : autospeed, 72 slidesToShow : 1, 73 slidesToScroll: 1, 74 autoplay : autoplay, 75 autoplaySpeed : autotime, 76 centerMode : true, 77 variableWidth : true, 78 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 79 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>' 80 } ); // slick 81 } else if ( $this.hasClass( 'style-7' ) ) { 82 $this.slick( { 83 dots : false, 84 infinite : false, 85 speed : autospeed, 86 slidesToShow : 2, 87 slidesToScroll: 1, 88 autoplay : autoplay, 89 autoplaySpeed : autotime, 90 centerMode : false, 91 variableWidth : false, 92 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 93 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>', 94 responsive : [ 95 { 96 breakpoint: 960, 97 settings : { 98 slidesToShow : 1, 99 slidesToScroll: 1 100 } 101 } 102 ] 103 } ); // slick 104 } 105 else { 106 $this.slick( { 107 dots : false, 108 infinite : true, 109 speed : autospeed, 110 slidesToShow : 1, 111 slidesToScroll: 1, 112 autoplay : autoplay, 113 autoplaySpeed : autotime, 114 centerMode : false, 115 variableWidth : false, 116 adaptiveHeight: true, 117 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 118 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>' 119 } ); // slick 120 } 121 $this.on( 'setPosition', function ( event, slick, direction ) { 122 $this.parent().addClass( 'loaded' ); 123 HURRY.carousel_fixtop(); 124 HURRY.arrows_carousel(); 125 $(window ).load( function() { 126 $this.parent().addClass( 'loaded-wait' ); 127 } ); 128 } ); 129 } ); // each 130 } // if slick 131 } 132 133 134 /* Fix position arrows carousel homepage 135 ---------------------------------------------------------------*/ 136 HURRY.arrows_carousel = function () { 137 $('.featured-area.style-2 button.slick-prev' ).each( function(){ 138 var $this = $(this ), 139 $center_width = $this.parent().find( '.slick-center' ).width(), 140 $win_width = $this.closest( '.featured-area' ).width(); 141 var $pos_this = ( ( $win_width - $center_width )/2 ) - 22; 142 $this.css( "left", $pos_this + 'px' ); 143 $this.next().css( "right", $pos_this + 'px' ); 144 } ); 145 } 146 147 /* Fix top featured carousel slider 148 ---------------------------------------------------------------*/ 149 HURRY.carousel_fixtop = function () { 150 $('.featured-carousel .featured-content' ).each( function(){ 151 var $this = $(this ), 152 this_height = $this.height(), 153 parent_height = $this.parent().height(); 154 var top_this = ( parent_height - this_height )/2; 155 $this.css( "top", top_this + 'px' ); 156 } ); 157 } 158 159 /* Penci Slider 160 ---------------------------------------------------------------*/ 161 HURRY.flexslider = function () { 162 $( window ).load( function () { 163 /* Load all slider */ 164 $( '.penci-slider, .penci-magazine-slider' ).each( function () { 165 var $this = $( this ), 166 $smooth = false, 167 $control = false, 168 $dir = true; 169 if ( $this.attr( 'data-smooth' ) ) { $smooth = true; } 170 if ( $this.attr( 'data-control' ) ) { $control = true; } 171 if ( $this.attr( 'data-dir' ) ) { $dir = false; } 172 173 $this.flexslider( { 174 namespace : "penci-", 175 animation : 'slide', 176 slideshow : $this.data( 'auto' ), 177 slideshowSpeed: $this.data( 'autotime' ), 178 animationSpeed: $this.data( 'speed' ), 179 smoothHeight : $smooth, 180 controlNav : $control, 181 directionNav : $dir, 182 pauseOnHover : true, 183 prevText : '<i class="fa fa-angle-left"></i>', 184 nextText : '<i class="fa fa-angle-right"></i>', 185 start : function ( slider ) { 186 $this.parent().addClass( 'loaded' );
187 HURRY.fixtop(); 188 $this.parent().addClass( 'loaded-wait' ); 189 } 190 } ); 191 } ); 192 } ); 193 } 194 195 /* Headline Posts 196 ----------------------------------------------------------------*/ 197 HURRY.headline = function () { 198 if ( $().slick ) { 199 $( '.penci-headline-posts' ).each( function () { 200 var $this = $( this ); 201 $this.slick( { 202 dots : false, 203 infinite : true, 204 speed : $this.data( 'speed' ), 205 slidesToShow : 1, 206 slidesToScroll: 1, 207 vertical : true, 208 autoplay : $this.data( 'auto' ), 209 autoplaySpeed : $this.data( 'autotime' ), 210 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 211 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>' 212 } ); // slick 213 214 $this.on( 'setPosition', function ( event, slick, direction ) { 215 $(window ).load( function() { 216 HURRY.fixheadline(); 217 $this.parent().addClass( 'loaded' ); 218 } ); 219 } ); 220 } ); 221 } 222 } 223 224 /* Fix margin headline 225 ----------------------------------------------------------------*/ 226 HURRY.fixheadline = function () { 227 var $headline_title = $( '.penci-headline .headline-title' ); 228 if ( $headline_title.length ) { 229 var headline_w = $headline_title.outerWidth() + 70; 230 $('.penci-headline-posts' ).css( 'margin-left', headline_w + 'px' ); 231 } 232 } 233 234 /* Fix top penci slider 235 ---------------------------------------------------------------*/ 236 HURRY.fixtop = function () { 237 $('.penci-slider .pencislider-container' ).each( function(){ 238 var $this = $(this ), 239 parent_slider = $this.closest('.penci-slider' ), 240 this_height = $this.height(), 241 parent_height = $this.parent().height(); 242 if( parent_slider.hasClass('fixed-height') ){ 243 parent_height = parent_slider.height(); 244 } 245 var top_this = ( parent_height - this_height )/2; 246 $this.css( "top", top_this + 'px' ); 247 } ); 248 } 249 250 /* Fitvids 251 ---------------------------------------------------------------*/ 252 HURRY.fitvids = function() { 253 // Target your .container, .wrapper, .post, etc. 254 $( ".container" ).fitVids(); 255 } 256 257 /* Slick slider 258 ---------------------------------------------------------------*/ 259 HURRY.slider = function() { 260 if ( $().slick ) { 261 $( '.penci-slick-slider' ).each(function(){ 262 var $this = $(this), 263 adapheight = $this.data('auto-height'); 264 if( typeof adapheight === "undefined" ) { adapheight = true; } 265 $this.slick({ 266 dots: false, 267 infinite: true, 268 speed: 500, 269 slidesToShow: 1, 270 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 271 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>', 272 adaptiveHeight: adapheight 273 }); // slick 274 275 $this.on('setPosition', function(event, slick, direction){ 276 $this.addClass('loaded'); 277 }); 278 }); // each 279 } 280 } 281 282 /* Slick carousel 283 ---------------------------------------------------------------*/ 284 HURRY.carousel = function() { 285 if ( $().slick ) { 286 $( '.penci-carousel' ).each(function(){ 287 var $this = $( this ), 288 autoplay = $this.data( 'auto' ), 289 dots_show = $this.data( 'dots' ), 290 arrows_show = $this.data( 'arrows' ), 291 vertical = $this.data( 'vertical' ) ? $this.data( 'vertical' ) : false, 292 infiloop = $this.data( 'infiloop' ) ? $this.data( 'infiloop' ) : false, 293 autospeed = $this.data( 'autospeed' ) ? $this.data( 'autospeed' ) : 5000, 294 tablet_slide = $this.data( 'tabletslide' ) ? $this.data( 'tabletslide' ) : 2, 295 slide = $this.data( 'slide' ) ? $this.data( 'slide' ) : 4; 296 if ( $( '.container-single' ).hasClass( 'penci_sidebar' ) && !($this.data( 'slide' )) ) { slide = 3; }
297 if ( $this.hasClass( 'penci-magcat-carousel' ) ) { slide = 2; infiloop = true; slide = 1; } 298 $this.slick( { 299 vertical : vertical, 300 verticalSwiping : vertical, 301 infinite : infiloop, 302 slidesToShow : slide, 303 slidesToScroll: slide, 304 dots : dots_show, 305 autoplay : autoplay, 306 autoplaySpeed : autospeed, 307 speed : 700, 308 arrows : arrows_show, 309 nextArrow : '<button type="button" class="slick-next slick-nav"><i class="fa fa-angle-right"></i></button>', 310 prevArrow : '<button type="button" class="slick-prev slick-nav"><i class="fa fa-angle-left"></i></button>', 311 responsive : [ 312 { 313 breakpoint: 1169, 314 settings : { 315 slidesToShow : 2, 316 slidesToScroll: 2 317 } 318 }, 319 { 320 breakpoint: 960, 321 settings : { 322 slidesToShow : 2, 323 slidesToScroll: 2, 324 vertical : false, 325 verticalSwiping : false 326 } 327 }, 328 { 329 breakpoint: 768, 330 settings : { 331 slidesToShow : tablet_slide, 332 slidesToScroll: tablet_slide, 333 vertical : false, 334 verticalSwiping : false 335 } 336 }, 337 { 338 breakpoint: 480, 339 settings : { 340 slidesToShow : 1, 341 slidesToScroll: 1, 342 vertical : false, 343 verticalSwiping : false 344 } 345 } 346 ] 347 } ); // slick 348 349 $this.on( 'setPosition', function ( event, slick, direction ) { 350 $this.addClass( 'loaded' ); 351 } ); 352 }); // each 353 } 354 } 355 356 /* Sticky sidebar 357 ----------------------------------------------------------------*/ 358 HURRY.sticky_sidebar = function() { 359 if ( $().theiaStickySidebar ) { 360 var top_margin = 90; 361 if( $('body' ).hasClass('admin-bar') ) { 362 top_margin = 122; 363 } 364 $('#main.penci-main-sticky-sidebar, #sidebar.penci-sticky-sidebar' ).theiaStickySidebar({ 365 // settings 366 additionalMarginTop: top_margin 367 }); 368 } // if sticky 369 } 370 371 /* Mega menu 372 ----------------------------------------------------------------*/ 373 HURRY.mega_menu = function () { 374 $( '#navigation .penci-mega-child-categories a' ).mouseenter( function () { 375 if ( !$( this ).hasClass( 'cat-active' ) ) { 376 var $this = $( this ), 377 $row_active = $this.data( 'id' ), 378 $parentA = $this.parent().children( 'a' ), 379 $parent = $this.closest( '.penci-megamenu' ), 380 $rows = $this.closest( '.penci-megamenu' ).find( '.penci-mega-latest-posts' ).children( '.penci-mega-row' ); 381 $parentA.removeClass( 'cat-active' ); 382 $this.addClass( 'cat-active' ); 383 $rows.hide(); 384 $parent.find( '.' + $row_active ).fadeIn( 'normal' ).css( 'display', 'inline-block' ); 385 } 386 } ); 387 } 388 389 /* Mobile menu responsive 390 ----------------------------------------------------------------*/ 391 HURRY.mobile_menu = function () { 392 // Add indicator 393 $( '#sidebar-nav .menu li.menu-item-has-children > a' ).append( '<u class="indicator"><i class="fa fa-angle-down"></i></u>' ); 394 $( '#sidebar-nav .penci-mega-child-categories' ).closest('li.penci-mega-menu' ).children('a').append( '<u class="indicator"><i class="fa fa-angle-down"></i></u>' ); 395 396 // Toggle menu when click show/hide menu 397 $( '#navigation .button-menu-mobile' ).on( 'click', function () { 398 $( 'body' ).addClass( 'open-sidebar-nav' ); 399 } ); 400 401 // indicator click 402 $( '#sidebar-nav .menu li a .indicator' ).on( 'click', function ( e ) { 403 var $this = $( this ); 404 e.preventDefault(); 405 $this.children().toggleClass( 'fa-angle-up' ); 406 $this.parent().next().slideToggle( 'fast' ); 407 } ); 408 409 // Close sidebar nav 410 $( '#close-sidebar-nav' ).on( 'click', function () { 411 $( 'body' ).removeClass( 'open-sidebar-nav' ); 412 } ); 413 } 414 415 /* Pinterest widget 416 ----------------------------------------------------------------*/ 417 HURRY.pinterest_widget = function() { 418 if ( $().isotope ) { 419 $( '.penci-pinterest-widget-container .penci-images-pin-widget' ).each( function () { 420 var $this = $( this ); 421 $( window ).load( function () { 422 $this.isotope( { 423 itemSelector : 'a', 424 transitionDuration: '.55s', 425 layoutMode : 'masonry' 426 } ); // isotope 427 $this.parent().removeClass( 'penci-loading' ); 428 } ); // load 429 } ); // each .penci-portfolio 430 } // end if isotope 431 } 432 433 /* Light box 434 ----------------------------------------------------------------*/ 435 HURRY.lightbox = function () { 436 if ( $().magnificPopup) { 437 $( 'a[data-rel^="penci-gallery-image-content"], .penci-enable-lightbox .gallery-item a' ).magnificPopup( { 438 type : 'image', 439 closeOnContentClick: true, 440 closeBtnInside : false, 441 fixedContentPos : true, 442 image : { 443 verticalFit: true 444 }, 445 gallery : { 446 enabled: true 447 }, 448 zoom : { 449 enabled : true, 450 duration: 300 // don't foget to change the duration also in CSS 451 } 452 } ); 453 } // if magnificPopup exists 454 } 455 456 /* Masonry layout 457 ----------------------------------------------------------------*/ 458 HURRY.masonry = function() { 459 $(window).load(function() { 460 var $masonry_container = $( '.penci-masonry' ); 461 if ( $masonry_container.length ) { 462 $masonry_container.each( function () { 463 var $this = $( this ); 464 // initialize isotope 465 $this.isotope( { 466 itemSelector : '.item-masonry', 467 transitionDuration: '.55s', 468 layoutMode : 'masonry' 469 } ); 470 } ); 471 } 472 }); 473 } 474
475 /* Video Background 476 ----------------------------------------------------------------*/ 477 HURRY.video_background = function() { 478 var $penci_videobg = $( '#penci-featured-video-bg' ); 479 if ( $().mb_YTPlayer && $penci_videobg.length ) { 480 $(window ).load( function() { 481 $("#penci-featured-video-bg").mb_YTPlayer(); 482 setTimeout(function(){ 483 $('.featured-area').addClass( 'loaded-wait' ).append('<div class="overlay-video-click"></div>'); 484 $('.overlay-video-click').on( 'click', function () { 485 var $this = $(this); 486 if( !$this.hasClass( 'pause-video' ) ) { 487 $this.addClass('pause-video'); 488 jQuery('#penci-featured-video-bg').pauseYTP(); 489 } else { 490 $this.removeClass('pause-video'); 491 jQuery('#penci-featured-video-bg').playYTP(); 492 } 493 }); 494 }, 4000); 495 } ); 496 } 497 } 498 499 /* Portfolio 500 ----------------------------------------------------------------*/ 501 HURRY.portfolio = function () { 502 var $penci_portfolio = $( '.penci-portfolio' ); 503 if ( $().isotope && $penci_portfolio.length ) { 504 $( '.penci-portfolio' ).each( function () { 505 var $this = $( this ); 506 $( window ).load( function () { 507 $this.isotope( { 508 itemSelector : '.portfolio-item', 509 animationEngine : 'best-available', 510 animationOptions: { 511 duration: 250, 512 queue : false 513 } 514 } ); // isotope 515 516 $this.addClass( 'loaded' ); 517 518 $('.portfolio-item .inner-item-portfolio').each( function () { 519 var $this = $( this ); 520 $this.one( 'inview', function ( event, isInView, visiblePartX, visiblePartY ) { 521 $this.addClass( 'animated' ); 522 } ); // inview 523 } ); // each 524 525 } ); // load 526 527 // filter items when filter link is clicked 528 $this.parent().find( '.penci-portfolio-filter' ).find( 'li' ).on( 'click', function () { 529 $this.parent().find( '.penci-portfolio-filter' ).find( 'li' ).removeClass( 'active' ); 530 $( this ).addClass( 'active' ); 531 var selector = $( this ).find( "a" ).attr( 'data-filter' ); 532 $this.isotope( { filter: selector } ); 533 return false; 534 } ); 535 } ); // each .penci-portfolio 536 537 } // end if isotope & portfolio 538 } 539 540 /* Gallery 541 ----------------------------------------------------------------*/ 542 HURRY.gallery = function () { 543 var $justified_gallery = $( '.penci-post-gallery-container.justified' ); 544 var $masonry_gallery = $( '.penci-post-gallery-container.masonry' ); 545 if ( $().justifiedGallery && $justified_gallery.length ) { 546 $( '.penci-post-gallery-container.justified' ).each( function () { 547 var $this = $( this ); 548 $this.justifiedGallery( { 549 rowHeight: $this.data( 'height' ), 550 lastRow : 'nojustify', 551 margins : $this.data( 'margin' ), 552 randomize: false 553 } ); 554 } ); // each .penci-post-gallery-container 555 } 556 557 if ( $().isotope && $masonry_gallery.length ) { 558 559 $('.penci-post-gallery-container.masonry .item-gallery-masonry' ).each( function() { 560 var $this = $(this); 561 if( $this.attr('title') ) { 562 var $title = $this.attr('title'); 563 $this.children().append('<div class="caption">'+ $title +'</div>'); 564 } 565 } ); 566 567 $(window).load(function() { 568 if ( $masonry_gallery.length ) { 569 $masonry_gallery.each( function () { 570 var $this = $( this ); 571 // initialize isotope 572 $this.isotope( { 573 itemSelector : '.item-gallery-masonry', 574 transitionDuration: '.55s', 575 layoutMode : 'masonry' 576 } ); 577 578 $this.addClass( 'loaded' ); 579 580 $('.penci-post-gallery-container.masonry .item-gallery-masonry').each( function () { 581 var $this = $( this ); 582 $this.one( 'inview', function ( event, isInView, visiblePartX, visiblePartY ) { 583 $this.addClass( 'animated' ); 584 } ); // inview 585 } ); // each 586 587 } ); 588 } 589 }); 590 } 591 } 592 593 /* Magazine slider 2 594 ----------------------------------------------------------------*/ 595 HURRY.magazine_slider2 = function () { 596 var $mag_slider = $( '.penci-mag2-carousel' ), 597 $mag_content = $( '.penci-mag2-carousel .penci-mag2-carousel-content' ); 598 if ( $().carouFredSel && $mag_slider.length ) { 599 var auto = $mag_content.data('auto' ), 600 autotime = $mag_content.data('autotime' ), 601 speed = $mag_content.data('speed' ); 602 if( auto !== false ) { 603 auto = autotime; 604 } 605 $mag_content.carouFredSel( { 606 width: '100%', 607 scroll: { items:1, duration: speed, pauseOnHover: true }, 608 align: 'left', 609 auto : auto, 610 padding: 1, 611 swipe : true, 612 prev: '.penci-magazine2-prev', 613 next: '.penci-magazine2-next', 614 onCreate: function(){ 615 $mag_slider.parent().addClass('loaded-wait'); 616 } 617 } ); 618 } 619 620 penciFitMag2Image(); 621 $( window ).resize( function () { 622 penciFitMag2Image(); 623 } ); 624 function penciFitMag2Image() { 625 if ( $( window ).width() <= 778 ) { 626 $( ".penci-mag2-carousel .mag2-thumbnail img" ).each( function ( index, element ) { 627 var $this = $( this ); 628 if ( $this.outerWidth() > $( window ).width() ) { 629 var transfrom = ($( this ).outerWidth() - $( window ).width()) / 2, 630 window_w = $( window ).width(), 631 title_w = window_w - 20; 632 $this.attr( "style", "transform:translate3d(-" + transfrom + "px,0,0); -webkit-transform:translate3d(-" + transfrom + "px,0,0)" ); 633 $this.parent().parent().find('.mag2-header' ).attr( "style", "width: " + title_w +"px;" ); 634 } 635 } ); 636 } 637 } 638 } 639 640 641 /* Init functions 642 ---------------------------------------------------------------*/ 643 $(document).ready(function() { 644 HURRY.general(); 645 HURRY.main_sticky(); 646 HURRY.count_down(); 647 HURRY.carousel_homepage(); 648 HURRY.flexslider(); 649 HURRY.headline();
650 HURRY.fitvids(); 651 HURRY.slider(); 652 HURRY.carousel(); 653 HURRY.sticky_sidebar(); 654 HURRY.mega_menu(); 655 HURRY.mobile_menu(); 656 HURRY.pinterest_widget(); 657 HURRY.lightbox(); 658 HURRY.masonry(); 659 HURRY.video_background(); 660 HURRY.portfolio(); 661 HURRY.gallery(); 662 HURRY.magazine_slider2(); 663 $(window ).resize( function(){ HURRY.sticky_sidebar(); HURRY.fixtop(); HURRY.carousel_fixtop(); } ); 664 }); 665 666})(jQuery); // EOF
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.