diff --git a/lodestar/404.php b/lodestar/404.php new file mode 100644 index 000000000..33c592f2c --- /dev/null +++ b/lodestar/404.php @@ -0,0 +1,60 @@ + +
+
+
+ +
+ +
+

+ + + +
+

+
    + 'count', + 'order' => 'DESC', + 'show_count' => 1, + 'title_li' => '', + 'number' => 10, + ) ); + ?> +
+
+ ' . esc_html__( 'Try looking in the monthly archives.', 'lodestar' ) . '

'; + the_widget( 'WP_Widget_Archives', 'dropdown=1', "after_title=$archive_content" ); + + the_widget( 'WP_Widget_Tag_Cloud' ); + ?> + +
+
+
+
+
+ + +
+
+
+ + + + esc_html__( 'Older projects', 'lodestar' ), + 'next_text' => esc_html__( 'Newer projects', 'lodestar' ), + 'screen_reader_text' => esc_html__( 'Portfolio navigation', 'lodestar' ), + ) ); + ?> + +
+
+
+ + +
+
+
+ + + +
+ +
+ + + + +
+

+ +

+
+
+
+ +
+
+ + + + + +
+ + + +
+ +
+
+ +
+ +
+
+
+ + + + + + +
+
+ +
+ + + + + +Created by FontForge 20150618 at Fri Sep 18 10:24:13 2015 + By Joen Asmussen +Copyright (c) 2015, Joen Asmussen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lodestar/assets/fonts/Genericons.ttf b/lodestar/assets/fonts/Genericons.ttf new file mode 100644 index 000000000..017443851 Binary files /dev/null and b/lodestar/assets/fonts/Genericons.ttf differ diff --git a/lodestar/assets/fonts/Genericons.woff b/lodestar/assets/fonts/Genericons.woff new file mode 100644 index 000000000..0e7212af7 Binary files /dev/null and b/lodestar/assets/fonts/Genericons.woff differ diff --git a/lodestar/assets/fonts/genericons.css b/lodestar/assets/fonts/genericons.css new file mode 100644 index 000000000..87cf754e1 --- /dev/null +++ b/lodestar/assets/fonts/genericons.css @@ -0,0 +1,263 @@ +/** + + Genericons + +*/ + + +/* IE8 and below use EOT and allow cross-site embedding. + IE9 uses WOFF which is base64 encoded to allow cross-site embedding. + So unfortunately, IE9 will throw a console error, but it'll still work. + When the font is base64 encoded, cross-site embedding works in Firefox */ +@font-face { + font-family: "Genericons"; + src: url("./Genericons.eot"); + src: url("./Genericons.eot?") format("embedded-opentype"); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: "Genericons"; + src: url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"), + url("./Genericons.ttf") format("truetype"), + url("./Genericons.svg#Genericons") format("svg"); + font-weight: normal; + font-style: normal; +} + +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: "Genericons"; + src: url("./Genericons.svg#Genericons") format("svg"); + } +} + + +/** + * All Genericons + */ + +.genericon { + font-size: 16px; + vertical-align: top; + text-align: center; + -moz-transition: color .1s ease-in 0; + -webkit-transition: color .1s ease-in 0; + display: inline-block; + font-family: "Genericons"; + font-style: normal; + font-weight: normal; + font-variant: normal; + line-height: 1; + text-decoration: inherit; + text-transform: none; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + speak: none; +} + + +/** + * Helper classes + */ + +.genericon-rotate-90 { + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); +} + +.genericon-rotate-180 { + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + -o-transform: rotate(180deg); + transform: rotate(180deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); +} + +.genericon-rotate-270 { + -webkit-transform: rotate(270deg); + -moz-transform: rotate(270deg); + -ms-transform: rotate(270deg); + -o-transform: rotate(270deg); + transform: rotate(270deg); + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); +} + +.genericon-flip-horizontal { + -webkit-transform: scale(-1, 1); + -moz-transform: scale(-1, 1); + -ms-transform: scale(-1, 1); + -o-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.genericon-flip-vertical { + -webkit-transform: scale(1, -1); + -moz-transform: scale(1, -1); + -ms-transform: scale(1, -1); + -o-transform: scale(1, -1); + transform: scale(1, -1); +} + + +/** + * Individual icons + */ + +.genericon-404:before { content: "\f423"; } +.genericon-activity:before { content: "\f508"; } +.genericon-anchor:before { content: "\f509"; } +.genericon-aside:before { content: "\f101"; } +.genericon-attachment:before { content: "\f416"; } +.genericon-audio:before { content: "\f109"; } +.genericon-bold:before { content: "\f471"; } +.genericon-book:before { content: "\f444"; } +.genericon-bug:before { content: "\f50a"; } +.genericon-cart:before { content: "\f447"; } +.genericon-category:before { content: "\f301"; } +.genericon-chat:before { content: "\f108"; } +.genericon-checkmark:before { content: "\f418"; } +.genericon-close:before { content: "\f405"; } +.genericon-close-alt:before { content: "\f406"; } +.genericon-cloud:before { content: "\f426"; } +.genericon-cloud-download:before { content: "\f440"; } +.genericon-cloud-upload:before { content: "\f441"; } +.genericon-code:before { content: "\f462"; } +.genericon-codepen:before { content: "\f216"; } +.genericon-cog:before { content: "\f445"; } +.genericon-collapse:before { content: "\f432"; } +.genericon-comment:before { content: "\f300"; } +.genericon-day:before { content: "\f305"; } +.genericon-digg:before { content: "\f221"; } +.genericon-document:before { content: "\f443"; } +.genericon-dot:before { content: "\f428"; } +.genericon-downarrow:before { content: "\f502"; } +.genericon-download:before { content: "\f50b"; } +.genericon-draggable:before { content: "\f436"; } +.genericon-dribbble:before { content: "\f201"; } +.genericon-dropbox:before { content: "\f225"; } +.genericon-dropdown:before { content: "\f433"; } +.genericon-dropdown-left:before { content: "\f434"; } +.genericon-edit:before { content: "\f411"; } +.genericon-ellipsis:before { content: "\f476"; } +.genericon-expand:before { content: "\f431"; } +.genericon-external:before { content: "\f442"; } +.genericon-facebook:before { content: "\f203"; } +.genericon-facebook-alt:before { content: "\f204"; } +.genericon-fastforward:before { content: "\f458"; } +.genericon-feed:before { content: "\f413"; } +.genericon-flag:before { content: "\f468"; } +.genericon-flickr:before { content: "\f211"; } +.genericon-foursquare:before { content: "\f226"; } +.genericon-fullscreen:before { content: "\f474"; } +.genericon-gallery:before { content: "\f103"; } +.genericon-github:before { content: "\f200"; } +.genericon-googleplus:before { content: "\f206"; } +.genericon-googleplus-alt:before { content: "\f218"; } +.genericon-handset:before { content: "\f50c"; } +.genericon-heart:before { content: "\f461"; } +.genericon-help:before { content: "\f457"; } +.genericon-hide:before { content: "\f404"; } +.genericon-hierarchy:before { content: "\f505"; } +.genericon-home:before { content: "\f409"; } +.genericon-image:before { content: "\f102"; } +.genericon-info:before { content: "\f455"; } +.genericon-instagram:before { content: "\f215"; } +.genericon-italic:before { content: "\f472"; } +.genericon-key:before { content: "\f427"; } +.genericon-leftarrow:before { content: "\f503"; } +.genericon-link:before { content: "\f107"; } +.genericon-linkedin:before { content: "\f207"; } +.genericon-linkedin-alt:before { content: "\f208"; } +.genericon-location:before { content: "\f417"; } +.genericon-lock:before { content: "\f470"; } +.genericon-mail:before { content: "\f410"; } +.genericon-maximize:before { content: "\f422"; } +.genericon-menu:before { content: "\f419"; } +.genericon-microphone:before { content: "\f50d"; } +.genericon-minimize:before { content: "\f421"; } +.genericon-minus:before { content: "\f50e"; } +.genericon-month:before { content: "\f307"; } +.genericon-move:before { content: "\f50f"; } +.genericon-next:before { content: "\f429"; } +.genericon-notice:before { content: "\f456"; } +.genericon-paintbrush:before { content: "\f506"; } +.genericon-path:before { content: "\f219"; } +.genericon-pause:before { content: "\f448"; } +.genericon-phone:before { content: "\f437"; } +.genericon-picture:before { content: "\f473"; } +.genericon-pinned:before { content: "\f308"; } +.genericon-pinterest:before { content: "\f209"; } +.genericon-pinterest-alt:before { content: "\f210"; } +.genericon-play:before { content: "\f452"; } +.genericon-plugin:before { content: "\f439"; } +.genericon-plus:before { content: "\f510"; } +.genericon-pocket:before { content: "\f224"; } +.genericon-polldaddy:before { content: "\f217"; } +.genericon-portfolio:before { content: "\f460"; } +.genericon-previous:before { content: "\f430"; } +.genericon-print:before { content: "\f469"; } +.genericon-quote:before { content: "\f106"; } +.genericon-rating-empty:before { content: "\f511"; } +.genericon-rating-full:before { content: "\f512"; } +.genericon-rating-half:before { content: "\f513"; } +.genericon-reddit:before { content: "\f222"; } +.genericon-refresh:before { content: "\f420"; } +.genericon-reply:before { content: "\f412"; } +.genericon-reply-alt:before { content: "\f466"; } +.genericon-reply-single:before { content: "\f467"; } +.genericon-rewind:before { content: "\f459"; } +.genericon-rightarrow:before { content: "\f501"; } +.genericon-search:before { content: "\f400"; } +.genericon-send-to-phone:before { content: "\f438"; } +.genericon-send-to-tablet:before { content: "\f454"; } +.genericon-share:before { content: "\f415"; } +.genericon-show:before { content: "\f403"; } +.genericon-shuffle:before { content: "\f514"; } +.genericon-sitemap:before { content: "\f507"; } +.genericon-skip-ahead:before { content: "\f451"; } +.genericon-skip-back:before { content: "\f450"; } +.genericon-skype:before { content: "\f220"; } +.genericon-spam:before { content: "\f424"; } +.genericon-spotify:before { content: "\f515"; } +.genericon-standard:before { content: "\f100"; } +.genericon-star:before { content: "\f408"; } +.genericon-status:before { content: "\f105"; } +.genericon-stop:before { content: "\f449"; } +.genericon-stumbleupon:before { content: "\f223"; } +.genericon-subscribe:before { content: "\f463"; } +.genericon-subscribed:before { content: "\f465"; } +.genericon-summary:before { content: "\f425"; } +.genericon-tablet:before { content: "\f453"; } +.genericon-tag:before { content: "\f302"; } +.genericon-time:before { content: "\f303"; } +.genericon-top:before { content: "\f435"; } +.genericon-trash:before { content: "\f407"; } +.genericon-tumblr:before { content: "\f214"; } +.genericon-twitch:before { content: "\f516"; } +.genericon-twitter:before { content: "\f202"; } +.genericon-unapprove:before { content: "\f446"; } +.genericon-unsubscribe:before { content: "\f464"; } +.genericon-unzoom:before { content: "\f401"; } +.genericon-uparrow:before { content: "\f500"; } +.genericon-user:before { content: "\f304"; } +.genericon-video:before { content: "\f104"; } +.genericon-videocamera:before { content: "\f517"; } +.genericon-vimeo:before { content: "\f212"; } +.genericon-warning:before { content: "\f414"; } +.genericon-website:before { content: "\f475"; } +.genericon-week:before { content: "\f306"; } +.genericon-wordpress:before { content: "\f205"; } +.genericon-xpost:before { content: "\f504"; } +.genericon-youtube:before { content: "\f213"; } +.genericon-zoom:before { content: "\f402"; } + + + + diff --git a/lodestar/assets/images/header.jpg b/lodestar/assets/images/header.jpg new file mode 100644 index 000000000..97ca37baa Binary files /dev/null and b/lodestar/assets/images/header.jpg differ diff --git a/lodestar/assets/js/customizer.js b/lodestar/assets/js/customizer.js new file mode 100644 index 000000000..a075a4400 --- /dev/null +++ b/lodestar/assets/js/customizer.js @@ -0,0 +1,64 @@ +/** + * File customizer.js. + * + * Theme Customizer enhancements for a better user experience. + * + * Contains handlers to make Theme Customizer preview reload changes asynchronously. + */ + +( function( $ ) { + + // Collect information from panel-customizer.js about which panels are opening + wp.customize.bind( 'preview-ready', function() { + wp.customize.preview.bind( 'section-highlight', function( data ) { + + // If there's an expanded panel section, scroll down to that panel & highlight in the preview + if ( true === data.expanded ) { + $.scrollTo( $( '.' + data.section ), { + duration: 600, + offset: { 'top': -40 } + } ); + $( '.' + data.section ).addClass( 'lodestar-highlight' ); + // If we've left the panel, remove the highlight and scroll back to the top + } else { + $.scrollTo( $( '#masthead' ), { + duration: 300, + offset: { 'top': 0 } + } ); + $( '.' + data.section ).removeClass( 'lodestar-highlight' ); + } + } ); + } ); + + // Site title and description. + wp.customize( 'blogname', function( value ) { + value.bind( function( to ) { + $( '.site-title a' ).text( to ); + } ); + } ); + wp.customize( 'blogdescription', function( value ) { + value.bind( function( to ) { + $( '.site-description' ).text( to ); + } ); + } ); + + // Header text color. + wp.customize( 'header_textcolor', function( value ) { + value.bind( function( to ) { + if ( 'blank' === to ) { + $( '.site-title a, .site-description' ).css( { + 'clip': 'rect(1px, 1px, 1px, 1px)', + 'position': 'absolute' + } ); + } else { + $( '.site-title a, .site-description' ).css( { + 'clip': 'auto', + 'position': 'relative' + } ); + $( '.site-title a, .site-description' ).css( { + 'color': to + } ); + } + } ); + } ); +} )( jQuery ); diff --git a/lodestar/assets/js/global.js b/lodestar/assets/js/global.js new file mode 100644 index 000000000..70e148f0a --- /dev/null +++ b/lodestar/assets/js/global.js @@ -0,0 +1,149 @@ +( function( $ ) { + + var $header = $( '.header-top:first' ), + $headerHeight = $( '.header-top' ).innerHeight(), + $headerOffset = $( '.custom-header' ).innerHeight(), + $headerHiddenClass = 'site-header-hidden', + $headerFixedClass = 'site-header-fixed', + + $navigation = $( '.main-navigation' ), + $navMenuItem = $navigation.find( '.menu-item' ), + navigationHeight, + navigationOuterHeight, + navPadding, + navMenuItemHeight, + idealNavHeight, + navIsNotTooTall; + + + // adjust header margin based on height of menu + function adjustHeaderMargin(){ + + // check to see if on mobile by checking menu-toggle display + if ( 'none' === $( '.menu-toggle').css( 'display') ) { + + // Don't define this 'til we're using it, it may change + $headerHeight = $( '.header-top' ).innerHeight(); + + // if yes, we want to bump the custom header down a bit, so the menu doesn't cut it off + $( '.custom-header-image').css( 'margin-top', $headerHeight ); + } + } + + // Make sure the nav isn't taller than two rows + navigationHeight = $navigation.height(); + navMenuItemHeight = $navMenuItem.outerHeight() * 3; + idealNavHeight = navMenuItemHeight; + navIsNotTooTall = navigationHeight <= idealNavHeight; + + //we add the scroll class to the navs + function adjustScrollClass() { + // Make sure we're not on a mobile screen + if ( 'none' === $( '.menu-toggle').css( 'display') ) { + if ( $( window ).scrollTop() <= $headerOffset && $header.hasClass( $headerFixedClass ) ) { + $header.removeClass( $headerFixedClass ); + $header.addClass( $headerHiddenClass ); + + } else if ( $( window ).scrollTop() >= $headerOffset ) { //If the scroll is more than the custom header + + // Make sure the menu is not too tall + if ( navIsNotTooTall || navMenuItemHeight == 0 ) { + + // Don't define this 'til we're using it, it may change + $headerHeight = $( '.header-top' ).innerHeight( true ); + + // If not, fix that header! + $header.addClass( $headerFixedClass ); + $header.removeClass( $headerHiddenClass ); + $( '.custom-header' ).css( 'margin-top', $headerHeight ); + } + + } else { + //If not we remove it + $header.removeClass( $headerFixedClass ); + $header.removeClass( $headerHiddenClass ); + $( '.custom-header' ).css( 'margin-top', 'auto' ); + } + } + } + + // Check to see if iOS device + // iOS devices make a mess of background-attachment: fixed and background-size: cover + + function checkiOS() { + return /iPad|iPhone|iPod/.test(navigator.userAgent) && ! window.MSStream; + } + + /* + * Test if background-attachment: fixed is supported. + * @link http://stackoverflow.com/questions/14115080/detect-support-for-background-attachment-fixed + */ + function supportsFixedBackground() { + var el = document.createElement('div'), + isSupported; + + try { + if ( ! ( 'backgroundAttachment' in el.style ) || checkiOS() ) { + return false; + } + el.style.backgroundAttachment = 'fixed'; + isSupported = ( 'fixed' === el.style.backgroundAttachment ); + return isSupported; + } + catch (e) { + return false; + } + } + + // Let's fire some JavaScript! + $( document ).ready( function() { + // On load, we want to adjust the header margin + adjustHeaderMargin(); + adjustScrollClass(); + + // We also want to check the device, and add a class if not iOS: + if ( false === supportsFixedBackground() ) { + document.documentElement.className += ' no-background-fixed'; + } + } ); + + // On scroll, we want to stick/unstick the header + $( window ).on( 'scroll', function() { + adjustScrollClass(); + } ); + + // we also want to do the same on window rezize + $( window ).on( 'resize', function() { + setTimeout( adjustHeaderMargin, 500 ); + } ); + + // Use mutant observer to check when .wf-active is added to theme for Custom Fonts. + // That way we can make sure the header is the correct height when it happens. + var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; + + $.fn.attrchange = function(callback) { + if (MutationObserver) { + var options = { + subtree: false, + attributes: true + }; + + var observer = new MutationObserver(function(mutations) { + mutations.forEach(function(e) { + callback.call(e.target, e.attributeName); + }); + }); + + return this.each(function() { + observer.observe(this, options); + }); + } + } + + $( 'html' ).attrchange( function( attrName ) { + if( attrName == 'class' && $( 'html').hasClass( 'wf-active' ) ) { + adjustHeaderMargin(); + } + } ); + +} )( jQuery ); diff --git a/lodestar/assets/js/isotope.pkgd.js b/lodestar/assets/js/isotope.pkgd.js new file mode 100644 index 000000000..346fd1397 --- /dev/null +++ b/lodestar/assets/js/isotope.pkgd.js @@ -0,0 +1,3514 @@ +/*! + * Isotope PACKAGED v3.0.1 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * http://isotope.metafizzy.co + * Copyright 2016 Metafizzy + */ + +/** + * Bridget makes jQuery widgets + * v2.0.0 + * MIT license + */ + +/* jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + 'use strict'; + /* globals define: false, module: false, require: false */ + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) { + factory( window, jQuery ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('jquery') + ); + } else { + // browser global + window.jQueryBridget = factory( + window, + window.jQuery + ); + } + +}( window, function factory( window, jQuery ) { +'use strict'; + +// ----- utils ----- // + +var arraySlice = Array.prototype.slice; + +// helper function for logging errors +// $.error breaks jQuery chaining +var console = window.console; +var logError = typeof console == 'undefined' ? function() {} : + function( message ) { + console.error( message ); + }; + +// ----- jQueryBridget ----- // + +function jQueryBridget( namespace, PluginClass, $ ) { + $ = $ || jQuery || window.jQuery; + if ( !$ ) { + return; + } + + // add option method -> $().plugin('option', {...}) + if ( !PluginClass.prototype.option ) { + // option setter + PluginClass.prototype.option = function( opts ) { + // bail out if not an object + if ( !$.isPlainObject( opts ) ){ + return; + } + this.options = $.extend( true, this.options, opts ); + }; + } + + // make jQuery plugin + $.fn[ namespace ] = function( arg0 /*, arg1 */ ) { + if ( typeof arg0 == 'string' ) { + // method call $().plugin( 'methodName', { options } ) + // shift arguments by 1 + var args = arraySlice.call( arguments, 1 ); + return methodCall( this, arg0, args ); + } + // just $().plugin({ options }) + plainCall( this, arg0 ); + return this; + }; + + // $().plugin('methodName') + function methodCall( $elems, methodName, args ) { + var returnValue; + var pluginMethodStr = '$().' + namespace + '("' + methodName + '")'; + + $elems.each( function( i, elem ) { + // get instance + var instance = $.data( elem, namespace ); + if ( !instance ) { + logError( namespace + ' not initialized. Cannot call methods, i.e. ' + + pluginMethodStr ); + return; + } + + var method = instance[ methodName ]; + if ( !method || methodName.charAt(0) == '_' ) { + logError( pluginMethodStr + ' is not a valid method' ); + return; + } + + // apply method, get return value + var value = method.apply( instance, args ); + // set return value if value is returned, use only first value + returnValue = returnValue === undefined ? value : returnValue; + }); + + return returnValue !== undefined ? returnValue : $elems; + } + + function plainCall( $elems, options ) { + $elems.each( function( i, elem ) { + var instance = $.data( elem, namespace ); + if ( instance ) { + // set options & init + instance.option( options ); + instance._init(); + } else { + // initialize new instance + instance = new PluginClass( elem, options ); + $.data( elem, namespace, instance ); + } + }); + } + + updateJQuery( $ ); + +} + +// ----- updateJQuery ----- // + +// set $.bridget for v1 backwards compatibility +function updateJQuery( $ ) { + if ( !$ || ( $ && $.bridget ) ) { + return; + } + $.bridget = jQueryBridget; +} + +updateJQuery( jQuery || window.jQuery ); + +// ----- ----- // + +return jQueryBridget; + +})); + +/** + * EvEmitter v1.0.3 + * Lil' event emitter + * MIT License + */ + +/* jshint unused: true, undef: true, strict: true */ + +( function( global, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, window */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'ev-emitter/ev-emitter',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory(); + } else { + // Browser globals + global.EvEmitter = factory(); + } + +}( typeof window != 'undefined' ? window : this, function() { + + + +function EvEmitter() {} + +var proto = EvEmitter.prototype; + +proto.on = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // set events hash + var events = this._events = this._events || {}; + // set listeners array + var listeners = events[ eventName ] = events[ eventName ] || []; + // only add once + if ( listeners.indexOf( listener ) == -1 ) { + listeners.push( listener ); + } + + return this; +}; + +proto.once = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // add event + this.on( eventName, listener ); + // set once flag + // set onceEvents hash + var onceEvents = this._onceEvents = this._onceEvents || {}; + // set onceListeners object + var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; + // set flag + onceListeners[ listener ] = true; + + return this; +}; + +proto.off = function( eventName, listener ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + var index = listeners.indexOf( listener ); + if ( index != -1 ) { + listeners.splice( index, 1 ); + } + + return this; +}; + +proto.emitEvent = function( eventName, args ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + var i = 0; + var listener = listeners[i]; + args = args || []; + // once stuff + var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; + + while ( listener ) { + var isOnce = onceListeners && onceListeners[ listener ]; + if ( isOnce ) { + // remove listener + // remove before trigger to prevent recursion + this.off( eventName, listener ); + // unset once flag + delete onceListeners[ listener ]; + } + // trigger listener + listener.apply( this, args ); + // get next listener + i += isOnce ? 0 : 1; + listener = listeners[i]; + } + + return this; +}; + +return EvEmitter; + +})); + +/*! + * getSize v2.0.2 + * measure size of elements + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ +/*global define: false, module: false, console: false */ + +( function( window, factory ) { + 'use strict'; + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'get-size/get-size',[],function() { + return factory(); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.getSize = factory(); + } + +})( window, function factory() { +'use strict'; + +// -------------------------- helpers -------------------------- // + +// get a number from a string, not a percentage +function getStyleSize( value ) { + var num = parseFloat( value ); + // not a percent like '100%', and a number + var isValid = value.indexOf('%') == -1 && !isNaN( num ); + return isValid && num; +} + +function noop() {} + +var logError = typeof console == 'undefined' ? noop : + function( message ) { + console.error( message ); + }; + +// -------------------------- measurements -------------------------- // + +var measurements = [ + 'paddingLeft', + 'paddingRight', + 'paddingTop', + 'paddingBottom', + 'marginLeft', + 'marginRight', + 'marginTop', + 'marginBottom', + 'borderLeftWidth', + 'borderRightWidth', + 'borderTopWidth', + 'borderBottomWidth' +]; + +var measurementsLength = measurements.length; + +function getZeroSize() { + var size = { + width: 0, + height: 0, + innerWidth: 0, + innerHeight: 0, + outerWidth: 0, + outerHeight: 0 + }; + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + size[ measurement ] = 0; + } + return size; +} + +// -------------------------- getStyle -------------------------- // + +/** + * getStyle, get style of element, check for Firefox bug + * https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + */ +function getStyle( elem ) { + var style = getComputedStyle( elem ); + if ( !style ) { + logError( 'Style returned ' + style + + '. Are you running this code in a hidden iframe on Firefox? ' + + 'See http://bit.ly/getsizebug1' ); + } + return style; +} + +// -------------------------- setup -------------------------- // + +var isSetup = false; + +var isBoxSizeOuter; + +/** + * setup + * check isBoxSizerOuter + * do on first getSize() rather than on page load for Firefox bug + */ +function setup() { + // setup once + if ( isSetup ) { + return; + } + isSetup = true; + + // -------------------------- box sizing -------------------------- // + + /** + * WebKit measures the outer-width on style.width on border-box elems + * IE & Firefox<29 measures the inner-width + */ + var div = document.createElement('div'); + div.style.width = '200px'; + div.style.padding = '1px 2px 3px 4px'; + div.style.borderStyle = 'solid'; + div.style.borderWidth = '1px 2px 3px 4px'; + div.style.boxSizing = 'border-box'; + + var body = document.body || document.documentElement; + body.appendChild( div ); + var style = getStyle( div ); + + getSize.isBoxSizeOuter = isBoxSizeOuter = getStyleSize( style.width ) == 200; + body.removeChild( div ); + +} + +// -------------------------- getSize -------------------------- // + +function getSize( elem ) { + setup(); + + // use querySeletor if elem is string + if ( typeof elem == 'string' ) { + elem = document.querySelector( elem ); + } + + // do not proceed on non-objects + if ( !elem || typeof elem != 'object' || !elem.nodeType ) { + return; + } + + var style = getStyle( elem ); + + // if hidden, everything is 0 + if ( style.display == 'none' ) { + return getZeroSize(); + } + + var size = {}; + size.width = elem.offsetWidth; + size.height = elem.offsetHeight; + + var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; + + // get all measurements + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + var value = style[ measurement ]; + var num = parseFloat( value ); + // any 'auto', 'medium' value will be 0 + size[ measurement ] = !isNaN( num ) ? num : 0; + } + + var paddingWidth = size.paddingLeft + size.paddingRight; + var paddingHeight = size.paddingTop + size.paddingBottom; + var marginWidth = size.marginLeft + size.marginRight; + var marginHeight = size.marginTop + size.marginBottom; + var borderWidth = size.borderLeftWidth + size.borderRightWidth; + var borderHeight = size.borderTopWidth + size.borderBottomWidth; + + var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter; + + // overwrite width and height if we can get it from style + var styleWidth = getStyleSize( style.width ); + if ( styleWidth !== false ) { + size.width = styleWidth + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ); + } + + var styleHeight = getStyleSize( style.height ); + if ( styleHeight !== false ) { + size.height = styleHeight + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ); + } + + size.innerWidth = size.width - ( paddingWidth + borderWidth ); + size.innerHeight = size.height - ( paddingHeight + borderHeight ); + + size.outerWidth = size.width + marginWidth; + size.outerHeight = size.height + marginHeight; + + return size; +} + +return getSize; + +}); + +/** + * matchesSelector v2.0.1 + * matchesSelector( element, '.selector' ) + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + /*global define: false, module: false */ + 'use strict'; + // universal module definition + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'desandro-matches-selector/matches-selector',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.matchesSelector = factory(); + } + +}( window, function factory() { + 'use strict'; + + var matchesMethod = ( function() { + var ElemProto = Element.prototype; + // check for the standard method name first + if ( ElemProto.matches ) { + return 'matches'; + } + // check un-prefixed + if ( ElemProto.matchesSelector ) { + return 'matchesSelector'; + } + // check vendor prefixes + var prefixes = [ 'webkit', 'moz', 'ms', 'o' ]; + + for ( var i=0; i < prefixes.length; i++ ) { + var prefix = prefixes[i]; + var method = prefix + 'MatchesSelector'; + if ( ElemProto[ method ] ) { + return method; + } + } + })(); + + return function matchesSelector( elem, selector ) { + return elem[ matchesMethod ]( selector ); + }; + +})); + +/** + * Fizzy UI utils v2.0.2 + * MIT license + */ + +/*jshint browser: true, undef: true, unused: true, strict: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ /*globals define, module, require */ + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'fizzy-ui-utils/utils',[ + 'desandro-matches-selector/matches-selector' + ], function( matchesSelector ) { + return factory( window, matchesSelector ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('desandro-matches-selector') + ); + } else { + // browser global + window.fizzyUIUtils = factory( + window, + window.matchesSelector + ); + } + +}( window, function factory( window, matchesSelector ) { + + + +var utils = {}; + +// ----- extend ----- // + +// extends objects +utils.extend = function( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +}; + +// ----- modulo ----- // + +utils.modulo = function( num, div ) { + return ( ( num % div ) + div ) % div; +}; + +// ----- makeArray ----- // + +// turn element or nodeList into an array +utils.makeArray = function( obj ) { + var ary = []; + if ( Array.isArray( obj ) ) { + // use object if already an array + ary = obj; + } else if ( obj && typeof obj.length == 'number' ) { + // convert nodeList to array + for ( var i=0; i < obj.length; i++ ) { + ary.push( obj[i] ); + } + } else { + // array of single index + ary.push( obj ); + } + return ary; +}; + +// ----- removeFrom ----- // + +utils.removeFrom = function( ary, obj ) { + var index = ary.indexOf( obj ); + if ( index != -1 ) { + ary.splice( index, 1 ); + } +}; + +// ----- getParent ----- // + +utils.getParent = function( elem, selector ) { + while ( elem != document.body ) { + elem = elem.parentNode; + if ( matchesSelector( elem, selector ) ) { + return elem; + } + } +}; + +// ----- getQueryElement ----- // + +// use element as selector string +utils.getQueryElement = function( elem ) { + if ( typeof elem == 'string' ) { + return document.querySelector( elem ); + } + return elem; +}; + +// ----- handleEvent ----- // + +// enable .ontype to trigger from .addEventListener( elem, 'type' ) +utils.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +// ----- filterFindElements ----- // + +utils.filterFindElements = function( elems, selector ) { + // make array of elems + elems = utils.makeArray( elems ); + var ffElems = []; + + elems.forEach( function( elem ) { + // check that elem is an actual element + if ( !( elem instanceof HTMLElement ) ) { + return; + } + // add elem if no selector + if ( !selector ) { + ffElems.push( elem ); + return; + } + // filter & find items if we have a selector + // filter + if ( matchesSelector( elem, selector ) ) { + ffElems.push( elem ); + } + // find children + var childElems = elem.querySelectorAll( selector ); + // concat childElems to filterFound array + for ( var i=0; i < childElems.length; i++ ) { + ffElems.push( childElems[i] ); + } + }); + + return ffElems; +}; + +// ----- debounceMethod ----- // + +utils.debounceMethod = function( _class, methodName, threshold ) { + // original method + var method = _class.prototype[ methodName ]; + var timeoutName = methodName + 'Timeout'; + + _class.prototype[ methodName ] = function() { + var timeout = this[ timeoutName ]; + if ( timeout ) { + clearTimeout( timeout ); + } + var args = arguments; + + var _this = this; + this[ timeoutName ] = setTimeout( function() { + method.apply( _this, args ); + delete _this[ timeoutName ]; + }, threshold || 100 ); + }; +}; + +// ----- docReady ----- // + +utils.docReady = function( callback ) { + var readyState = document.readyState; + if ( readyState == 'complete' || readyState == 'interactive' ) { + callback(); + } else { + document.addEventListener( 'DOMContentLoaded', callback ); + } +}; + +// ----- htmlInit ----- // + +// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/ +utils.toDashed = function( str ) { + return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) { + return $1 + '-' + $2; + }).toLowerCase(); +}; + +var console = window.console; +/** + * allow user to initialize classes via [data-namespace] or .js-namespace class + * htmlInit( Widget, 'widgetName' ) + * options are parsed from data-namespace-options + */ +utils.htmlInit = function( WidgetClass, namespace ) { + utils.docReady( function() { + var dashedNamespace = utils.toDashed( namespace ); + var dataAttr = 'data-' + dashedNamespace; + var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' ); + var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace ); + var elems = utils.makeArray( dataAttrElems ) + .concat( utils.makeArray( jsDashElems ) ); + var dataOptionsAttr = dataAttr + '-options'; + var jQuery = window.jQuery; + + elems.forEach( function( elem ) { + var attr = elem.getAttribute( dataAttr ) || + elem.getAttribute( dataOptionsAttr ); + var options; + try { + options = attr && JSON.parse( attr ); + } catch ( error ) { + // log error, do not initialize + if ( console ) { + console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className + + ': ' + error ); + } + return; + } + // initialize + var instance = new WidgetClass( elem, options ); + // make available via $().data('layoutname') + if ( jQuery ) { + jQuery.data( elem, namespace, instance ); + } + }); + + }); +}; + +// ----- ----- // + +return utils; + +})); + +/** + * Outlayer Item + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/item',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size' + ], + factory + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + require('ev-emitter'), + require('get-size') + ); + } else { + // browser global + window.Outlayer = {}; + window.Outlayer.Item = factory( + window.EvEmitter, + window.getSize + ); + } + +}( window, function factory( EvEmitter, getSize ) { +'use strict'; + +// ----- helpers ----- // + +function isEmptyObj( obj ) { + for ( var prop in obj ) { + return false; + } + prop = null; + return true; +} + +// -------------------------- CSS3 support -------------------------- // + + +var docElemStyle = document.documentElement.style; + +var transitionProperty = typeof docElemStyle.transition == 'string' ? + 'transition' : 'WebkitTransition'; +var transformProperty = typeof docElemStyle.transform == 'string' ? + 'transform' : 'WebkitTransform'; + +var transitionEndEvent = { + WebkitTransition: 'webkitTransitionEnd', + transition: 'transitionend' +}[ transitionProperty ]; + +// cache all vendor properties that could have vendor prefix +var vendorProperties = { + transform: transformProperty, + transition: transitionProperty, + transitionDuration: transitionProperty + 'Duration', + transitionProperty: transitionProperty + 'Property', + transitionDelay: transitionProperty + 'Delay' +}; + +// -------------------------- Item -------------------------- // + +function Item( element, layout ) { + if ( !element ) { + return; + } + + this.element = element; + // parent layout class, i.e. Masonry, Isotope, or Packery + this.layout = layout; + this.position = { + x: 0, + y: 0 + }; + + this._create(); +} + +// inherit EvEmitter +var proto = Item.prototype = Object.create( EvEmitter.prototype ); +proto.constructor = Item; + +proto._create = function() { + // transition objects + this._transn = { + ingProperties: {}, + clean: {}, + onEnd: {} + }; + + this.css({ + position: 'absolute' + }); +}; + +// trigger specified handler for event type +proto.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * apply CSS styles to element + * @param {Object} style + */ +proto.css = function( style ) { + var elemStyle = this.element.style; + + for ( var prop in style ) { + // use vendor property if available + var supportedProp = vendorProperties[ prop ] || prop; + elemStyle[ supportedProp ] = style[ prop ]; + } +}; + + // measure position, and sets it +proto.getPosition = function() { + var style = getComputedStyle( this.element ); + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + var xValue = style[ isOriginLeft ? 'left' : 'right' ]; + var yValue = style[ isOriginTop ? 'top' : 'bottom' ]; + // convert percent to pixels + var layoutSize = this.layout.size; + var x = xValue.indexOf('%') != -1 ? + ( parseFloat( xValue ) / 100 ) * layoutSize.width : parseInt( xValue, 10 ); + var y = yValue.indexOf('%') != -1 ? + ( parseFloat( yValue ) / 100 ) * layoutSize.height : parseInt( yValue, 10 ); + + // clean up 'auto' or other non-integer values + x = isNaN( x ) ? 0 : x; + y = isNaN( y ) ? 0 : y; + // remove padding from measurement + x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight; + y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom; + + this.position.x = x; + this.position.y = y; +}; + +// set settled position, apply padding +proto.layoutPosition = function() { + var layoutSize = this.layout.size; + var style = {}; + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + + // x + var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight'; + var xProperty = isOriginLeft ? 'left' : 'right'; + var xResetProperty = isOriginLeft ? 'right' : 'left'; + + var x = this.position.x + layoutSize[ xPadding ]; + // set in percentage or pixels + style[ xProperty ] = this.getXValue( x ); + // reset other property + style[ xResetProperty ] = ''; + + // y + var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom'; + var yProperty = isOriginTop ? 'top' : 'bottom'; + var yResetProperty = isOriginTop ? 'bottom' : 'top'; + + var y = this.position.y + layoutSize[ yPadding ]; + // set in percentage or pixels + style[ yProperty ] = this.getYValue( y ); + // reset other property + style[ yResetProperty ] = ''; + + this.css( style ); + this.emitEvent( 'layout', [ this ] ); +}; + +proto.getXValue = function( x ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && !isHorizontal ? + ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px'; +}; + +proto.getYValue = function( y ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && isHorizontal ? + ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px'; +}; + +proto._transitionTo = function( x, y ) { + this.getPosition(); + // get current x & y from top/left + var curX = this.position.x; + var curY = this.position.y; + + var compareX = parseInt( x, 10 ); + var compareY = parseInt( y, 10 ); + var didNotMove = compareX === this.position.x && compareY === this.position.y; + + // save end position + this.setPosition( x, y ); + + // if did not move and not transitioning, just go to layout + if ( didNotMove && !this.isTransitioning ) { + this.layoutPosition(); + return; + } + + var transX = x - curX; + var transY = y - curY; + var transitionStyle = {}; + transitionStyle.transform = this.getTranslate( transX, transY ); + + this.transition({ + to: transitionStyle, + onTransitionEnd: { + transform: this.layoutPosition + }, + isCleaning: true + }); +}; + +proto.getTranslate = function( x, y ) { + // flip cooridinates if origin on right or bottom + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + x = isOriginLeft ? x : -x; + y = isOriginTop ? y : -y; + return 'translate3d(' + x + 'px, ' + y + 'px, 0)'; +}; + +// non transition + transform support +proto.goTo = function( x, y ) { + this.setPosition( x, y ); + this.layoutPosition(); +}; + +proto.moveTo = proto._transitionTo; + +proto.setPosition = function( x, y ) { + this.position.x = parseInt( x, 10 ); + this.position.y = parseInt( y, 10 ); +}; + +// ----- transition ----- // + +/** + * @param {Object} style - CSS + * @param {Function} onTransitionEnd + */ + +// non transition, just trigger callback +proto._nonTransition = function( args ) { + this.css( args.to ); + if ( args.isCleaning ) { + this._removeStyles( args.to ); + } + for ( var prop in args.onTransitionEnd ) { + args.onTransitionEnd[ prop ].call( this ); + } +}; + +/** + * proper transition + * @param {Object} args - arguments + * @param {Object} to - style to transition to + * @param {Object} from - style to start transition from + * @param {Boolean} isCleaning - removes transition styles after transition + * @param {Function} onTransitionEnd - callback + */ +proto.transition = function( args ) { + // redirect to nonTransition if no transition duration + if ( !parseFloat( this.layout.options.transitionDuration ) ) { + this._nonTransition( args ); + return; + } + + var _transition = this._transn; + // keep track of onTransitionEnd callback by css property + for ( var prop in args.onTransitionEnd ) { + _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ]; + } + // keep track of properties that are transitioning + for ( prop in args.to ) { + _transition.ingProperties[ prop ] = true; + // keep track of properties to clean up when transition is done + if ( args.isCleaning ) { + _transition.clean[ prop ] = true; + } + } + + // set from styles + if ( args.from ) { + this.css( args.from ); + // force redraw. http://blog.alexmaccaw.com/css-transitions + var h = this.element.offsetHeight; + // hack for JSHint to hush about unused var + h = null; + } + // enable transition + this.enableTransition( args.to ); + // set styles that are transitioning + this.css( args.to ); + + this.isTransitioning = true; + +}; + +// dash before all cap letters, including first for +// WebkitTransform => -webkit-transform +function toDashedAll( str ) { + return str.replace( /([A-Z])/g, function( $1 ) { + return '-' + $1.toLowerCase(); + }); +} + +var transitionProps = 'opacity,' + toDashedAll( transformProperty ); + +proto.enableTransition = function(/* style */) { + // HACK changing transitionProperty during a transition + // will cause transition to jump + if ( this.isTransitioning ) { + return; + } + + // make `transition: foo, bar, baz` from style object + // HACK un-comment this when enableTransition can work + // while a transition is happening + // var transitionValues = []; + // for ( var prop in style ) { + // // dash-ify camelCased properties like WebkitTransition + // prop = vendorProperties[ prop ] || prop; + // transitionValues.push( toDashedAll( prop ) ); + // } + // munge number to millisecond, to match stagger + var duration = this.layout.options.transitionDuration; + duration = typeof duration == 'number' ? duration + 'ms' : duration; + // enable transition styles + this.css({ + transitionProperty: transitionProps, + transitionDuration: duration, + transitionDelay: this.staggerDelay || 0 + }); + // listen for transition end event + this.element.addEventListener( transitionEndEvent, this, false ); +}; + +// ----- events ----- // + +proto.onwebkitTransitionEnd = function( event ) { + this.ontransitionend( event ); +}; + +proto.onotransitionend = function( event ) { + this.ontransitionend( event ); +}; + +// properties that I munge to make my life easier +var dashedVendorProperties = { + '-webkit-transform': 'transform' +}; + +proto.ontransitionend = function( event ) { + // disregard bubbled events from children + if ( event.target !== this.element ) { + return; + } + var _transition = this._transn; + // get property name of transitioned property, convert to prefix-free + var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName; + + // remove property that has completed transitioning + delete _transition.ingProperties[ propertyName ]; + // check if any properties are still transitioning + if ( isEmptyObj( _transition.ingProperties ) ) { + // all properties have completed transitioning + this.disableTransition(); + } + // clean style + if ( propertyName in _transition.clean ) { + // clean up style + this.element.style[ event.propertyName ] = ''; + delete _transition.clean[ propertyName ]; + } + // trigger onTransitionEnd callback + if ( propertyName in _transition.onEnd ) { + var onTransitionEnd = _transition.onEnd[ propertyName ]; + onTransitionEnd.call( this ); + delete _transition.onEnd[ propertyName ]; + } + + this.emitEvent( 'transitionEnd', [ this ] ); +}; + +proto.disableTransition = function() { + this.removeTransitionStyles(); + this.element.removeEventListener( transitionEndEvent, this, false ); + this.isTransitioning = false; +}; + +/** + * removes style property from element + * @param {Object} style +**/ +proto._removeStyles = function( style ) { + // clean up transition styles + var cleanStyle = {}; + for ( var prop in style ) { + cleanStyle[ prop ] = ''; + } + this.css( cleanStyle ); +}; + +var cleanTransitionStyle = { + transitionProperty: '', + transitionDuration: '', + transitionDelay: '' +}; + +proto.removeTransitionStyles = function() { + // remove transition + this.css( cleanTransitionStyle ); +}; + +// ----- stagger ----- // + +proto.stagger = function( delay ) { + delay = isNaN( delay ) ? 0 : delay; + this.staggerDelay = delay + 'ms'; +}; + +// ----- show/hide/remove ----- // + +// remove element from DOM +proto.removeElem = function() { + this.element.parentNode.removeChild( this.element ); + // remove display: none + this.css({ display: '' }); + this.emitEvent( 'remove', [ this ] ); +}; + +proto.remove = function() { + // just remove element if no transition support or no transition + if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) { + this.removeElem(); + return; + } + + // start transition + this.once( 'transitionEnd', function() { + this.removeElem(); + }); + this.hide(); +}; + +proto.reveal = function() { + delete this.isHidden; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd; + + this.transition({ + from: options.hiddenStyle, + to: options.visibleStyle, + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onRevealTransitionEnd = function() { + // check if still visible + // during transition, item may have been hidden + if ( !this.isHidden ) { + this.emitEvent('reveal'); + } +}; + +/** + * get style property use for hide/reveal transition end + * @param {String} styleProperty - hiddenStyle/visibleStyle + * @returns {String} + */ +proto.getHideRevealTransitionEndProperty = function( styleProperty ) { + var optionStyle = this.layout.options[ styleProperty ]; + // use opacity + if ( optionStyle.opacity ) { + return 'opacity'; + } + // get first property + for ( var prop in optionStyle ) { + return prop; + } +}; + +proto.hide = function() { + // set flag + this.isHidden = true; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd; + + this.transition({ + from: options.visibleStyle, + to: options.hiddenStyle, + // keep hidden stuff hidden + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onHideTransitionEnd = function() { + // check if still hidden + // during transition, item may have been un-hidden + if ( this.isHidden ) { + this.css({ display: 'none' }); + this.emitEvent('hide'); + } +}; + +proto.destroy = function() { + this.css({ + position: '', + left: '', + right: '', + top: '', + bottom: '', + transition: '', + transform: '' + }); +}; + +return Item; + +})); + +/*! + * Outlayer v2.1.0 + * the brains and guts of a layout library + * MIT license + */ + +( function( window, factory ) { + 'use strict'; + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/outlayer',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size', + 'fizzy-ui-utils/utils', + './item' + ], + function( EvEmitter, getSize, utils, Item ) { + return factory( window, EvEmitter, getSize, utils, Item); + } + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + window, + require('ev-emitter'), + require('get-size'), + require('fizzy-ui-utils'), + require('./item') + ); + } else { + // browser global + window.Outlayer = factory( + window, + window.EvEmitter, + window.getSize, + window.fizzyUIUtils, + window.Outlayer.Item + ); + } + +}( window, function factory( window, EvEmitter, getSize, utils, Item ) { +'use strict'; + +// ----- vars ----- // + +var console = window.console; +var jQuery = window.jQuery; +var noop = function() {}; + +// -------------------------- Outlayer -------------------------- // + +// globally unique identifiers +var GUID = 0; +// internal store of all Outlayer intances +var instances = {}; + + +/** + * @param {Element, String} element + * @param {Object} options + * @constructor + */ +function Outlayer( element, options ) { + var queryElement = utils.getQueryElement( element ); + if ( !queryElement ) { + if ( console ) { + console.error( 'Bad element for ' + this.constructor.namespace + + ': ' + ( queryElement || element ) ); + } + return; + } + this.element = queryElement; + // add jQuery + if ( jQuery ) { + this.$element = jQuery( this.element ); + } + + // options + this.options = utils.extend( {}, this.constructor.defaults ); + this.option( options ); + + // add id for Outlayer.getFromElement + var id = ++GUID; + this.element.outlayerGUID = id; // expando + instances[ id ] = this; // associate via id + + // kick it off + this._create(); + + var isInitLayout = this._getOption('initLayout'); + if ( isInitLayout ) { + this.layout(); + } +} + +// settings are for internal use only +Outlayer.namespace = 'outlayer'; +Outlayer.Item = Item; + +// default options +Outlayer.defaults = { + containerStyle: { + position: 'relative' + }, + initLayout: true, + originLeft: true, + originTop: true, + resize: true, + resizeContainer: true, + // item options + transitionDuration: '0.4s', + hiddenStyle: { + opacity: 0, + transform: 'scale(0.001)' + }, + visibleStyle: { + opacity: 1, + transform: 'scale(1)' + } +}; + +var proto = Outlayer.prototype; +// inherit EvEmitter +utils.extend( proto, EvEmitter.prototype ); + +/** + * set options + * @param {Object} opts + */ +proto.option = function( opts ) { + utils.extend( this.options, opts ); +}; + +/** + * get backwards compatible option value, check old name + */ +proto._getOption = function( option ) { + var oldOption = this.constructor.compatOptions[ option ]; + return oldOption && this.options[ oldOption ] !== undefined ? + this.options[ oldOption ] : this.options[ option ]; +}; + +Outlayer.compatOptions = { + // currentName: oldName + initLayout: 'isInitLayout', + horizontal: 'isHorizontal', + layoutInstant: 'isLayoutInstant', + originLeft: 'isOriginLeft', + originTop: 'isOriginTop', + resize: 'isResizeBound', + resizeContainer: 'isResizingContainer' +}; + +proto._create = function() { + // get items from children + this.reloadItems(); + // elements that affect layout, but are not laid out + this.stamps = []; + this.stamp( this.options.stamp ); + // set container style + utils.extend( this.element.style, this.options.containerStyle ); + + // bind resize method + var canBindResize = this._getOption('resize'); + if ( canBindResize ) { + this.bindResize(); + } +}; + +// goes through all children again and gets bricks in proper order +proto.reloadItems = function() { + // collection of item elements + this.items = this._itemize( this.element.children ); +}; + + +/** + * turn elements into Outlayer.Items to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - collection of new Outlayer Items + */ +proto._itemize = function( elems ) { + + var itemElems = this._filterFindItemElements( elems ); + var Item = this.constructor.Item; + + // create new Outlayer Items for collection + var items = []; + for ( var i=0; i < itemElems.length; i++ ) { + var elem = itemElems[i]; + var item = new Item( elem, this ); + items.push( item ); + } + + return items; +}; + +/** + * get item elements to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - item elements + */ +proto._filterFindItemElements = function( elems ) { + return utils.filterFindElements( elems, this.options.itemSelector ); +}; + +/** + * getter method for getting item elements + * @returns {Array} elems - collection of item elements + */ +proto.getItemElements = function() { + return this.items.map( function( item ) { + return item.element; + }); +}; + +// ----- init & layout ----- // + +/** + * lays out all items + */ +proto.layout = function() { + this._resetLayout(); + this._manageStamps(); + + // don't animate first layout + var layoutInstant = this._getOption('layoutInstant'); + var isInstant = layoutInstant !== undefined ? + layoutInstant : !this._isLayoutInited; + this.layoutItems( this.items, isInstant ); + + // flag for initalized + this._isLayoutInited = true; +}; + +// _init is alias for layout +proto._init = proto.layout; + +/** + * logic before any new layout + */ +proto._resetLayout = function() { + this.getSize(); +}; + + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * get measurement from option, for columnWidth, rowHeight, gutter + * if option is String -> get element from selector string, & get size of element + * if option is Element -> get size of element + * else use option as a number + * + * @param {String} measurement + * @param {String} size - width or height + * @private + */ +proto._getMeasurement = function( measurement, size ) { + var option = this.options[ measurement ]; + var elem; + if ( !option ) { + // default to 0 + this[ measurement ] = 0; + } else { + // use option as an element + if ( typeof option == 'string' ) { + elem = this.element.querySelector( option ); + } else if ( option instanceof HTMLElement ) { + elem = option; + } + // use size of element, if element + this[ measurement ] = elem ? getSize( elem )[ size ] : option; + } +}; + +/** + * layout a collection of item elements + * @api public + */ +proto.layoutItems = function( items, isInstant ) { + items = this._getItemsForLayout( items ); + + this._layoutItems( items, isInstant ); + + this._postLayout(); +}; + +/** + * get the items to be laid out + * you may want to skip over some items + * @param {Array} items + * @returns {Array} items + */ +proto._getItemsForLayout = function( items ) { + return items.filter( function( item ) { + return !item.isIgnored; + }); +}; + +/** + * layout items + * @param {Array} items + * @param {Boolean} isInstant + */ +proto._layoutItems = function( items, isInstant ) { + this._emitCompleteOnItems( 'layout', items ); + + if ( !items || !items.length ) { + // no items, emit event with empty array + return; + } + + var queue = []; + + items.forEach( function( item ) { + // get x/y object from method + var position = this._getItemLayoutPosition( item ); + // enqueue + position.item = item; + position.isInstant = isInstant || item.isLayoutInstant; + queue.push( position ); + }, this ); + + this._processLayoutQueue( queue ); +}; + +/** + * get item layout position + * @param {Outlayer.Item} item + * @returns {Object} x and y position + */ +proto._getItemLayoutPosition = function( /* item */ ) { + return { + x: 0, + y: 0 + }; +}; + +/** + * iterate over array and position each item + * Reason being - separating this logic prevents 'layout invalidation' + * thx @paul_irish + * @param {Array} queue + */ +proto._processLayoutQueue = function( queue ) { + this.updateStagger(); + queue.forEach( function( obj, i ) { + this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i ); + }, this ); +}; + +// set stagger from option in milliseconds number +proto.updateStagger = function() { + var stagger = this.options.stagger; + if ( stagger === null || stagger === undefined ) { + this.stagger = 0; + return; + } + this.stagger = getMilliseconds( stagger ); + return this.stagger; +}; + +/** + * Sets position of item in DOM + * @param {Outlayer.Item} item + * @param {Number} x - horizontal position + * @param {Number} y - vertical position + * @param {Boolean} isInstant - disables transitions + */ +proto._positionItem = function( item, x, y, isInstant, i ) { + if ( isInstant ) { + // if not transition, just set CSS + item.goTo( x, y ); + } else { + item.stagger( i * this.stagger ); + item.moveTo( x, y ); + } +}; + +/** + * Any logic you want to do after each layout, + * i.e. size the container + */ +proto._postLayout = function() { + this.resizeContainer(); +}; + +proto.resizeContainer = function() { + var isResizingContainer = this._getOption('resizeContainer'); + if ( !isResizingContainer ) { + return; + } + var size = this._getContainerSize(); + if ( size ) { + this._setContainerMeasure( size.width, true ); + this._setContainerMeasure( size.height, false ); + } +}; + +/** + * Sets width or height of container if returned + * @returns {Object} size + * @param {Number} width + * @param {Number} height + */ +proto._getContainerSize = noop; + +/** + * @param {Number} measure - size of width or height + * @param {Boolean} isWidth + */ +proto._setContainerMeasure = function( measure, isWidth ) { + if ( measure === undefined ) { + return; + } + + var elemSize = this.size; + // add padding and border width if border box + if ( elemSize.isBorderBox ) { + measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight + + elemSize.borderLeftWidth + elemSize.borderRightWidth : + elemSize.paddingBottom + elemSize.paddingTop + + elemSize.borderTopWidth + elemSize.borderBottomWidth; + } + + measure = Math.max( measure, 0 ); + this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px'; +}; + +/** + * emit eventComplete on a collection of items events + * @param {String} eventName + * @param {Array} items - Outlayer.Items + */ +proto._emitCompleteOnItems = function( eventName, items ) { + var _this = this; + function onComplete() { + _this.dispatchEvent( eventName + 'Complete', null, [ items ] ); + } + + var count = items.length; + if ( !items || !count ) { + onComplete(); + return; + } + + var doneCount = 0; + function tick() { + doneCount++; + if ( doneCount == count ) { + onComplete(); + } + } + + // bind callback + items.forEach( function( item ) { + item.once( eventName, tick ); + }); +}; + +/** + * emits events via EvEmitter and jQuery events + * @param {String} type - name of event + * @param {Event} event - original event + * @param {Array} args - extra arguments + */ +proto.dispatchEvent = function( type, event, args ) { + // add original event to arguments + var emitArgs = event ? [ event ].concat( args ) : args; + this.emitEvent( type, emitArgs ); + + if ( jQuery ) { + // set this.$element + this.$element = this.$element || jQuery( this.element ); + if ( event ) { + // create jQuery event + var $event = jQuery.Event( event ); + $event.type = type; + this.$element.trigger( $event, args ); + } else { + // just trigger with type if no event available + this.$element.trigger( type, args ); + } + } +}; + +// -------------------------- ignore & stamps -------------------------- // + + +/** + * keep item in collection, but do not lay it out + * ignored items do not get skipped in layout + * @param {Element} elem + */ +proto.ignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + item.isIgnored = true; + } +}; + +/** + * return item to layout collection + * @param {Element} elem + */ +proto.unignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + delete item.isIgnored; + } +}; + +/** + * adds elements to stamps + * @param {NodeList, Array, Element, or String} elems + */ +proto.stamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ) { + return; + } + + this.stamps = this.stamps.concat( elems ); + // ignore + elems.forEach( this.ignore, this ); +}; + +/** + * removes elements to stamps + * @param {NodeList, Array, or Element} elems + */ +proto.unstamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ){ + return; + } + + elems.forEach( function( elem ) { + // filter out removed stamp elements + utils.removeFrom( this.stamps, elem ); + this.unignore( elem ); + }, this ); +}; + +/** + * finds child elements + * @param {NodeList, Array, Element, or String} elems + * @returns {Array} elems + */ +proto._find = function( elems ) { + if ( !elems ) { + return; + } + // if string, use argument as selector string + if ( typeof elems == 'string' ) { + elems = this.element.querySelectorAll( elems ); + } + elems = utils.makeArray( elems ); + return elems; +}; + +proto._manageStamps = function() { + if ( !this.stamps || !this.stamps.length ) { + return; + } + + this._getBoundingRect(); + + this.stamps.forEach( this._manageStamp, this ); +}; + +// update boundingLeft / Top +proto._getBoundingRect = function() { + // get bounding rect for container element + var boundingRect = this.element.getBoundingClientRect(); + var size = this.size; + this._boundingRect = { + left: boundingRect.left + size.paddingLeft + size.borderLeftWidth, + top: boundingRect.top + size.paddingTop + size.borderTopWidth, + right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ), + bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth ) + }; +}; + +/** + * @param {Element} stamp +**/ +proto._manageStamp = noop; + +/** + * get x/y position of element relative to container element + * @param {Element} elem + * @returns {Object} offset - has left, top, right, bottom + */ +proto._getElementOffset = function( elem ) { + var boundingRect = elem.getBoundingClientRect(); + var thisRect = this._boundingRect; + var size = getSize( elem ); + var offset = { + left: boundingRect.left - thisRect.left - size.marginLeft, + top: boundingRect.top - thisRect.top - size.marginTop, + right: thisRect.right - boundingRect.right - size.marginRight, + bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom + }; + return offset; +}; + +// -------------------------- resize -------------------------- // + +// enable event handlers for listeners +// i.e. resize -> onresize +proto.handleEvent = utils.handleEvent; + +/** + * Bind layout to window resizing + */ +proto.bindResize = function() { + window.addEventListener( 'resize', this ); + this.isResizeBound = true; +}; + +/** + * Unbind layout to window resizing + */ +proto.unbindResize = function() { + window.removeEventListener( 'resize', this ); + this.isResizeBound = false; +}; + +proto.onresize = function() { + this.resize(); +}; + +utils.debounceMethod( Outlayer, 'onresize', 100 ); + +proto.resize = function() { + // don't trigger if size did not change + // or if resize was unbound. See #9 + if ( !this.isResizeBound || !this.needsResizeLayout() ) { + return; + } + + this.layout(); +}; + +/** + * check if layout is needed post layout + * @returns Boolean + */ +proto.needsResizeLayout = function() { + var size = getSize( this.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.size && size; + return hasSizes && size.innerWidth !== this.size.innerWidth; +}; + +// -------------------------- methods -------------------------- // + +/** + * add items to Outlayer instance + * @param {Array or NodeList or Element} elems + * @returns {Array} items - Outlayer.Items +**/ +proto.addItems = function( elems ) { + var items = this._itemize( elems ); + // add items to collection + if ( items.length ) { + this.items = this.items.concat( items ); + } + return items; +}; + +/** + * Layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ +proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // layout and reveal just the new items + this.layoutItems( items, true ); + this.reveal( items ); +}; + +/** + * Layout prepended elements + * @param {Array or NodeList or Element} elems + */ +proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // add items to beginning of collection + var previousItems = this.items.slice(0); + this.items = items.concat( previousItems ); + // start new layout + this._resetLayout(); + this._manageStamps(); + // layout new stuff without transition + this.layoutItems( items, true ); + this.reveal( items ); + // layout previous items + this.layoutItems( previousItems ); +}; + +/** + * reveal a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.reveal = function( items ) { + this._emitCompleteOnItems( 'reveal', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.reveal(); + }); +}; + +/** + * hide a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.hide = function( items ) { + this._emitCompleteOnItems( 'hide', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.hide(); + }); +}; + +/** + * reveal item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.revealItemElements = function( elems ) { + var items = this.getItems( elems ); + this.reveal( items ); +}; + +/** + * hide item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.hideItemElements = function( elems ) { + var items = this.getItems( elems ); + this.hide( items ); +}; + +/** + * get Outlayer.Item, given an Element + * @param {Element} elem + * @param {Function} callback + * @returns {Outlayer.Item} item + */ +proto.getItem = function( elem ) { + // loop through items to get the one that matches + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + if ( item.element == elem ) { + // return item + return item; + } + } +}; + +/** + * get collection of Outlayer.Items, given Elements + * @param {Array} elems + * @returns {Array} items - Outlayer.Items + */ +proto.getItems = function( elems ) { + elems = utils.makeArray( elems ); + var items = []; + elems.forEach( function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + items.push( item ); + } + }, this ); + + return items; +}; + +/** + * remove element(s) from instance and DOM + * @param {Array or NodeList or Element} elems + */ +proto.remove = function( elems ) { + var removeItems = this.getItems( elems ); + + this._emitCompleteOnItems( 'remove', removeItems ); + + // bail if no items to remove + if ( !removeItems || !removeItems.length ) { + return; + } + + removeItems.forEach( function( item ) { + item.remove(); + // remove item from collection + utils.removeFrom( this.items, item ); + }, this ); +}; + +// ----- destroy ----- // + +// remove and disable Outlayer instance +proto.destroy = function() { + // clean up dynamic styles + var style = this.element.style; + style.height = ''; + style.position = ''; + style.width = ''; + // destroy items + this.items.forEach( function( item ) { + item.destroy(); + }); + + this.unbindResize(); + + var id = this.element.outlayerGUID; + delete instances[ id ]; // remove reference to instance by id + delete this.element.outlayerGUID; + // remove data for jQuery + if ( jQuery ) { + jQuery.removeData( this.element, this.constructor.namespace ); + } + +}; + +// -------------------------- data -------------------------- // + +/** + * get Outlayer instance from element + * @param {Element} elem + * @returns {Outlayer} + */ +Outlayer.data = function( elem ) { + elem = utils.getQueryElement( elem ); + var id = elem && elem.outlayerGUID; + return id && instances[ id ]; +}; + + +// -------------------------- create Outlayer class -------------------------- // + +/** + * create a layout class + * @param {String} namespace + */ +Outlayer.create = function( namespace, options ) { + // sub-class Outlayer + var Layout = subclass( Outlayer ); + // apply new options and compatOptions + Layout.defaults = utils.extend( {}, Outlayer.defaults ); + utils.extend( Layout.defaults, options ); + Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions ); + + Layout.namespace = namespace; + + Layout.data = Outlayer.data; + + // sub-class Item + Layout.Item = subclass( Item ); + + // -------------------------- declarative -------------------------- // + + utils.htmlInit( Layout, namespace ); + + // -------------------------- jQuery bridge -------------------------- // + + // make into jQuery plugin + if ( jQuery && jQuery.bridget ) { + jQuery.bridget( namespace, Layout ); + } + + return Layout; +}; + +function subclass( Parent ) { + function SubClass() { + Parent.apply( this, arguments ); + } + + SubClass.prototype = Object.create( Parent.prototype ); + SubClass.prototype.constructor = SubClass; + + return SubClass; +} + +// ----- helpers ----- // + +// how many milliseconds are in each unit +var msUnits = { + ms: 1, + s: 1000 +}; + +// munge time-like parameter into millisecond number +// '0.4s' -> 40 +function getMilliseconds( time ) { + if ( typeof time == 'number' ) { + return time; + } + var matches = time.match( /(^\d*\.?\d*)(\w*)/ ); + var num = matches && matches[1]; + var unit = matches && matches[2]; + if ( !num.length ) { + return 0; + } + num = parseFloat( num ); + var mult = msUnits[ unit ] || 1; + return num * mult; +} + +// ----- fin ----- // + +// back in global +Outlayer.Item = Item; + +return Outlayer; + +})); + +/** + * Isotope Item +**/ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/item',[ + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.Item = factory( + window.Outlayer + ); + } + +}( window, function factory( Outlayer ) { +'use strict'; + +// -------------------------- Item -------------------------- // + +// sub-class Outlayer Item +function Item() { + Outlayer.Item.apply( this, arguments ); +} + +var proto = Item.prototype = Object.create( Outlayer.Item.prototype ); + +var _create = proto._create; +proto._create = function() { + // assign id, used for original-order sorting + this.id = this.layout.itemGUID++; + _create.call( this ); + this.sortData = {}; +}; + +proto.updateSortData = function() { + if ( this.isIgnored ) { + return; + } + // default sorters + this.sortData.id = this.id; + // for backward compatibility + this.sortData['original-order'] = this.id; + this.sortData.random = Math.random(); + // go thru getSortData obj and apply the sorters + var getSortData = this.layout.options.getSortData; + var sorters = this.layout._sorters; + for ( var key in getSortData ) { + var sorter = sorters[ key ]; + this.sortData[ key ] = sorter( this.element, this ); + } +}; + +var _destroy = proto.destroy; +proto.destroy = function() { + // call super + _destroy.apply( this, arguments ); + // reset display, #741 + this.css({ + display: '' + }); +}; + +return Item; + +})); + +/** + * Isotope LayoutMode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-mode',[ + 'get-size/get-size', + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('get-size'), + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.LayoutMode = factory( + window.getSize, + window.Outlayer + ); + } + +}( window, function factory( getSize, Outlayer ) { + 'use strict'; + + // layout mode class + function LayoutMode( isotope ) { + this.isotope = isotope; + // link properties + if ( isotope ) { + this.options = isotope.options[ this.namespace ]; + this.element = isotope.element; + this.items = isotope.filteredItems; + this.size = isotope.size; + } + } + + var proto = LayoutMode.prototype; + + /** + * some methods should just defer to default Outlayer method + * and reference the Isotope instance as `this` + **/ + var facadeMethods = [ + '_resetLayout', + '_getItemLayoutPosition', + '_manageStamp', + '_getContainerSize', + '_getElementOffset', + 'needsResizeLayout', + '_getOption' + ]; + + facadeMethods.forEach( function( methodName ) { + proto[ methodName ] = function() { + return Outlayer.prototype[ methodName ].apply( this.isotope, arguments ); + }; + }); + + // ----- ----- // + + // for horizontal layout modes, check vertical size + proto.needsVerticalResizeLayout = function() { + // don't trigger if size did not change + var size = getSize( this.isotope.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.isotope.size && size; + return hasSizes && size.innerHeight != this.isotope.size.innerHeight; + }; + + // ----- measurements ----- // + + proto._getMeasurement = function() { + this.isotope._getMeasurement.apply( this, arguments ); + }; + + proto.getColumnWidth = function() { + this.getSegmentSize( 'column', 'Width' ); + }; + + proto.getRowHeight = function() { + this.getSegmentSize( 'row', 'Height' ); + }; + + /** + * get columnWidth or rowHeight + * segment: 'column' or 'row' + * size 'Width' or 'Height' + **/ + proto.getSegmentSize = function( segment, size ) { + var segmentName = segment + size; + var outerSize = 'outer' + size; + // columnWidth / outerWidth // rowHeight / outerHeight + this._getMeasurement( segmentName, outerSize ); + // got rowHeight or columnWidth, we can chill + if ( this[ segmentName ] ) { + return; + } + // fall back to item of first element + var firstItemSize = this.getFirstItemSize(); + this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] || + // or size of container + this.isotope.size[ 'inner' + size ]; + }; + + proto.getFirstItemSize = function() { + var firstItem = this.isotope.filteredItems[0]; + return firstItem && firstItem.element && getSize( firstItem.element ); + }; + + // ----- methods that should reference isotope ----- // + + proto.layout = function() { + this.isotope.layout.apply( this.isotope, arguments ); + }; + + proto.getSize = function() { + this.isotope.getSize(); + this.size = this.isotope.size; + }; + + // -------------------------- create -------------------------- // + + LayoutMode.modes = {}; + + LayoutMode.create = function( namespace, options ) { + + function Mode() { + LayoutMode.apply( this, arguments ); + } + + Mode.prototype = Object.create( proto ); + Mode.prototype.constructor = Mode; + + // default options + if ( options ) { + Mode.options = options; + } + + Mode.prototype.namespace = namespace; + // register in Isotope + LayoutMode.modes[ namespace ] = Mode; + + return Mode; + }; + + return LayoutMode; + +})); + +/*! + * Masonry v4.1.0 + * Cascading grid layout library + * http://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'masonry/masonry',[ + 'outlayer/outlayer', + 'get-size/get-size' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer'), + require('get-size') + ); + } else { + // browser global + window.Masonry = factory( + window.Outlayer, + window.getSize + ); + } + +}( window, function factory( Outlayer, getSize ) { + + + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var Masonry = Outlayer.create('masonry'); + // isFitWidth -> fitWidth + Masonry.compatOptions.fitWidth = 'isFitWidth'; + + Masonry.prototype._resetLayout = function() { + this.getSize(); + this._getMeasurement( 'columnWidth', 'outerWidth' ); + this._getMeasurement( 'gutter', 'outerWidth' ); + this.measureColumns(); + + // reset column Y + this.colYs = []; + for ( var i=0; i < this.cols; i++ ) { + this.colYs.push( 0 ); + } + + this.maxY = 0; + }; + + Masonry.prototype.measureColumns = function() { + this.getContainerWidth(); + // if columnWidth is 0, default to outerWidth of first item + if ( !this.columnWidth ) { + var firstItem = this.items[0]; + var firstItemElem = firstItem && firstItem.element; + // columnWidth fall back to item of first element + this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth || + // if first elem has no width, default to size of container + this.containerWidth; + } + + var columnWidth = this.columnWidth += this.gutter; + + // calculate columns + var containerWidth = this.containerWidth + this.gutter; + var cols = containerWidth / columnWidth; + // fix rounding errors, typically with gutters + var excess = columnWidth - containerWidth % columnWidth; + // if overshoot is less than a pixel, round up, otherwise floor it + var mathMethod = excess && excess < 1 ? 'round' : 'floor'; + cols = Math[ mathMethod ]( cols ); + this.cols = Math.max( cols, 1 ); + }; + + Masonry.prototype.getContainerWidth = function() { + // container is parent if fit width + var isFitWidth = this._getOption('fitWidth'); + var container = isFitWidth ? this.element.parentNode : this.element; + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var size = getSize( container ); + this.containerWidth = size && size.innerWidth; + }; + + Masonry.prototype._getItemLayoutPosition = function( item ) { + item.getSize(); + // how many columns does this brick span + var remainder = item.size.outerWidth % this.columnWidth; + var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil'; + // round if off by 1 pixel, otherwise use ceil + var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth ); + colSpan = Math.min( colSpan, this.cols ); + + var colGroup = this._getColGroup( colSpan ); + // get the minimum Y value from the columns + var minimumY = Math.min.apply( Math, colGroup ); + var shortColIndex = colGroup.indexOf( minimumY ); + + // position the brick + var position = { + x: this.columnWidth * shortColIndex, + y: minimumY + }; + + // apply setHeight to necessary columns + var setHeight = minimumY + item.size.outerHeight; + var setSpan = this.cols + 1 - colGroup.length; + for ( var i = 0; i < setSpan; i++ ) { + this.colYs[ shortColIndex + i ] = setHeight; + } + + return position; + }; + + /** + * @param {Number} colSpan - number of columns the element spans + * @returns {Array} colGroup + */ + Masonry.prototype._getColGroup = function( colSpan ) { + if ( colSpan < 2 ) { + // if brick spans only one column, use all the column Ys + return this.colYs; + } + + var colGroup = []; + // how many different places could this brick fit horizontally + var groupCount = this.cols + 1 - colSpan; + // for each group potential horizontal position + for ( var i = 0; i < groupCount; i++ ) { + // make an array of colY values for that one group + var groupColYs = this.colYs.slice( i, i + colSpan ); + // and get the max value of the array + colGroup[i] = Math.max.apply( Math, groupColYs ); + } + return colGroup; + }; + + Masonry.prototype._manageStamp = function( stamp ) { + var stampSize = getSize( stamp ); + var offset = this._getElementOffset( stamp ); + // get the columns that this stamp affects + var isOriginLeft = this._getOption('originLeft'); + var firstX = isOriginLeft ? offset.left : offset.right; + var lastX = firstX + stampSize.outerWidth; + var firstCol = Math.floor( firstX / this.columnWidth ); + firstCol = Math.max( 0, firstCol ); + var lastCol = Math.floor( lastX / this.columnWidth ); + // lastCol should not go over if multiple of columnWidth #425 + lastCol -= lastX % this.columnWidth ? 0 : 1; + lastCol = Math.min( this.cols - 1, lastCol ); + // set colYs to bottom of the stamp + + var isOriginTop = this._getOption('originTop'); + var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) + + stampSize.outerHeight; + for ( var i = firstCol; i <= lastCol; i++ ) { + this.colYs[i] = Math.max( stampMaxY, this.colYs[i] ); + } + }; + + Masonry.prototype._getContainerSize = function() { + this.maxY = Math.max.apply( Math, this.colYs ); + var size = { + height: this.maxY + }; + + if ( this._getOption('fitWidth') ) { + size.width = this._getContainerFitWidth(); + } + + return size; + }; + + Masonry.prototype._getContainerFitWidth = function() { + var unusedCols = 0; + // count unused columns + var i = this.cols; + while ( --i ) { + if ( this.colYs[i] !== 0 ) { + break; + } + unusedCols++; + } + // fit container to columns that have been used + return ( this.cols - unusedCols ) * this.columnWidth - this.gutter; + }; + + Masonry.prototype.needsResizeLayout = function() { + var previousWidth = this.containerWidth; + this.getContainerWidth(); + return previousWidth != this.containerWidth; + }; + + return Masonry; + +})); + +/*! + * Masonry layout mode + * sub-classes Masonry + * http://masonry.desandro.com + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/masonry',[ + '../layout-mode', + 'masonry/masonry' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode'), + require('masonry-layout') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode, + window.Masonry + ); + } + +}( window, function factory( LayoutMode, Masonry ) { +'use strict'; + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var MasonryMode = LayoutMode.create('masonry'); + + var proto = MasonryMode.prototype; + + var keepModeMethods = { + _getElementOffset: true, + layout: true, + _getMeasurement: true + }; + + // inherit Masonry prototype + for ( var method in Masonry.prototype ) { + // do not inherit mode methods + if ( !keepModeMethods[ method ] ) { + proto[ method ] = Masonry.prototype[ method ]; + } + } + + var measureColumns = proto.measureColumns; + proto.measureColumns = function() { + // set items, used if measuring first item + this.items = this.isotope.filteredItems; + measureColumns.call( this ); + }; + + // point to mode options for fitWidth + var _getOption = proto._getOption; + proto._getOption = function( option ) { + if ( option == 'fitWidth' ) { + return this.options.isFitWidth !== undefined ? + this.options.isFitWidth : this.options.fitWidth; + } + return _getOption.apply( this.isotope, arguments ); + }; + + return MasonryMode; + +})); + +/** + * fitRows layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/fit-rows',[ + '../layout-mode' + ], + factory ); + } else if ( typeof exports == 'object' ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var FitRows = LayoutMode.create('fitRows'); + +var proto = FitRows.prototype; + +proto._resetLayout = function() { + this.x = 0; + this.y = 0; + this.maxY = 0; + this._getMeasurement( 'gutter', 'outerWidth' ); +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + + var itemWidth = item.size.outerWidth + this.gutter; + // if this element cannot fit in the current row + var containerWidth = this.isotope.size.innerWidth + this.gutter; + if ( this.x !== 0 && itemWidth + this.x > containerWidth ) { + this.x = 0; + this.y = this.maxY; + } + + var position = { + x: this.x, + y: this.y + }; + + this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight ); + this.x += itemWidth; + + return position; +}; + +proto._getContainerSize = function() { + return { height: this.maxY }; +}; + +return FitRows; + +})); + +/** + * vertical layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope/js/layout-modes/vertical',[ + '../layout-mode' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var Vertical = LayoutMode.create( 'vertical', { + horizontalAlignment: 0 +}); + +var proto = Vertical.prototype; + +proto._resetLayout = function() { + this.y = 0; +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) * + this.options.horizontalAlignment; + var y = this.y; + this.y += item.size.outerHeight; + return { x: x, y: y }; +}; + +proto._getContainerSize = function() { + return { height: this.y }; +}; + +return Vertical; + +})); + +/*! + * Isotope v3.0.1 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * http://isotope.metafizzy.co + * Copyright 2016 Metafizzy + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( [ + 'outlayer/outlayer', + 'get-size/get-size', + 'desandro-matches-selector/matches-selector', + 'fizzy-ui-utils/utils', + 'isotope/js/item', + 'isotope/js/layout-mode', + // include default layout modes + 'isotope/js/layout-modes/masonry', + 'isotope/js/layout-modes/fit-rows', + 'isotope/js/layout-modes/vertical' + ], + function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) { + return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('outlayer'), + require('get-size'), + require('desandro-matches-selector'), + require('fizzy-ui-utils'), + require('isotope/js/item'), + require('isotope/js/layout-mode'), + // include default layout modes + require('isotope/js/layout-modes/masonry'), + require('isotope/js/layout-modes/fit-rows'), + require('isotope/js/layout-modes/vertical') + ); + } else { + // browser global + window.Isotope = factory( + window, + window.Outlayer, + window.getSize, + window.matchesSelector, + window.fizzyUIUtils, + window.Isotope.Item, + window.Isotope.LayoutMode + ); + } + +}( window, function factory( window, Outlayer, getSize, matchesSelector, utils, + Item, LayoutMode ) { + + + +// -------------------------- vars -------------------------- // + +var jQuery = window.jQuery; + +// -------------------------- helpers -------------------------- // + +var trim = String.prototype.trim ? + function( str ) { + return str.trim(); + } : + function( str ) { + return str.replace( /^\s+|\s+$/g, '' ); + }; + +// -------------------------- isotopeDefinition -------------------------- // + + // create an Outlayer layout class + var Isotope = Outlayer.create( 'isotope', { + layoutMode: 'masonry', + isJQueryFiltering: true, + sortAscending: true + }); + + Isotope.Item = Item; + Isotope.LayoutMode = LayoutMode; + + var proto = Isotope.prototype; + + proto._create = function() { + this.itemGUID = 0; + // functions that sort items + this._sorters = {}; + this._getSorters(); + // call super + Outlayer.prototype._create.call( this ); + + // create layout modes + this.modes = {}; + // start filteredItems with all items + this.filteredItems = this.items; + // keep of track of sortBys + this.sortHistory = [ 'original-order' ]; + // create from registered layout modes + for ( var name in LayoutMode.modes ) { + this._initLayoutMode( name ); + } + }; + + proto.reloadItems = function() { + // reset item ID counter + this.itemGUID = 0; + // call super + Outlayer.prototype.reloadItems.call( this ); + }; + + proto._itemize = function() { + var items = Outlayer.prototype._itemize.apply( this, arguments ); + // assign ID for original-order + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + item.id = this.itemGUID++; + } + this._updateItemsSortData( items ); + return items; + }; + + + // -------------------------- layout -------------------------- // + + proto._initLayoutMode = function( name ) { + var Mode = LayoutMode.modes[ name ]; + // set mode options + // HACK extend initial options, back-fill in default options + var initialOpts = this.options[ name ] || {}; + this.options[ name ] = Mode.options ? + utils.extend( Mode.options, initialOpts ) : initialOpts; + // init layout mode instance + this.modes[ name ] = new Mode( this ); + }; + + + proto.layout = function() { + // if first time doing layout, do all magic + if ( !this._isLayoutInited && this._getOption('initLayout') ) { + this.arrange(); + return; + } + this._layout(); + }; + + // private method to be used in layout() & magic() + proto._layout = function() { + // don't animate first layout + var isInstant = this._getIsInstant(); + // layout flow + this._resetLayout(); + this._manageStamps(); + this.layoutItems( this.filteredItems, isInstant ); + + // flag for initalized + this._isLayoutInited = true; + }; + + // filter + sort + layout + proto.arrange = function( opts ) { + // set any options pass + this.option( opts ); + this._getIsInstant(); + // filter, sort, and layout + + // filter + var filtered = this._filter( this.items ); + this.filteredItems = filtered.matches; + + this._bindArrangeComplete(); + + if ( this._isInstant ) { + this._noTransition( this._hideReveal, [ filtered ] ); + } else { + this._hideReveal( filtered ); + } + + this._sort(); + this._layout(); + }; + // alias to _init for main plugin method + proto._init = proto.arrange; + + proto._hideReveal = function( filtered ) { + this.reveal( filtered.needReveal ); + this.hide( filtered.needHide ); + }; + + // HACK + // Don't animate/transition first layout + // Or don't animate/transition other layouts + proto._getIsInstant = function() { + var isLayoutInstant = this._getOption('layoutInstant'); + var isInstant = isLayoutInstant !== undefined ? isLayoutInstant : + !this._isLayoutInited; + this._isInstant = isInstant; + return isInstant; + }; + + // listen for layoutComplete, hideComplete and revealComplete + // to trigger arrangeComplete + proto._bindArrangeComplete = function() { + // listen for 3 events to trigger arrangeComplete + var isLayoutComplete, isHideComplete, isRevealComplete; + var _this = this; + function arrangeParallelCallback() { + if ( isLayoutComplete && isHideComplete && isRevealComplete ) { + _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] ); + } + } + this.once( 'layoutComplete', function() { + isLayoutComplete = true; + arrangeParallelCallback(); + }); + this.once( 'hideComplete', function() { + isHideComplete = true; + arrangeParallelCallback(); + }); + this.once( 'revealComplete', function() { + isRevealComplete = true; + arrangeParallelCallback(); + }); + }; + + // -------------------------- filter -------------------------- // + + proto._filter = function( items ) { + var filter = this.options.filter; + filter = filter || '*'; + var matches = []; + var hiddenMatched = []; + var visibleUnmatched = []; + + var test = this._getFilterTest( filter ); + + // test each item + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + if ( item.isIgnored ) { + continue; + } + // add item to either matched or unmatched group + var isMatched = test( item ); + // item.isFilterMatched = isMatched; + // add to matches if its a match + if ( isMatched ) { + matches.push( item ); + } + // add to additional group if item needs to be hidden or revealed + if ( isMatched && item.isHidden ) { + hiddenMatched.push( item ); + } else if ( !isMatched && !item.isHidden ) { + visibleUnmatched.push( item ); + } + } + + // return collections of items to be manipulated + return { + matches: matches, + needReveal: hiddenMatched, + needHide: visibleUnmatched + }; + }; + + // get a jQuery, function, or a matchesSelector test given the filter + proto._getFilterTest = function( filter ) { + if ( jQuery && this.options.isJQueryFiltering ) { + // use jQuery + return function( item ) { + return jQuery( item.element ).is( filter ); + }; + } + if ( typeof filter == 'function' ) { + // use filter as function + return function( item ) { + return filter( item.element ); + }; + } + // default, use filter as selector string + return function( item ) { + return matchesSelector( item.element, filter ); + }; + }; + + // -------------------------- sorting -------------------------- // + + /** + * @params {Array} elems + * @public + */ + proto.updateSortData = function( elems ) { + // get items + var items; + if ( elems ) { + elems = utils.makeArray( elems ); + items = this.getItems( elems ); + } else { + // update all items if no elems provided + items = this.items; + } + + this._getSorters(); + this._updateItemsSortData( items ); + }; + + proto._getSorters = function() { + var getSortData = this.options.getSortData; + for ( var key in getSortData ) { + var sorter = getSortData[ key ]; + this._sorters[ key ] = mungeSorter( sorter ); + } + }; + + /** + * @params {Array} items - of Isotope.Items + * @private + */ + proto._updateItemsSortData = function( items ) { + // do not update if no items + var len = items && items.length; + + for ( var i=0; len && i < len; i++ ) { + var item = items[i]; + item.updateSortData(); + } + }; + + // ----- munge sorter ----- // + + // encapsulate this, as we just need mungeSorter + // other functions in here are just for munging + var mungeSorter = ( function() { + // add a magic layer to sorters for convienent shorthands + // `.foo-bar` will use the text of .foo-bar querySelector + // `[foo-bar]` will use attribute + // you can also add parser + // `.foo-bar parseInt` will parse that as a number + function mungeSorter( sorter ) { + // if not a string, return function or whatever it is + if ( typeof sorter != 'string' ) { + return sorter; + } + // parse the sorter string + var args = trim( sorter ).split(' '); + var query = args[0]; + // check if query looks like [an-attribute] + var attrMatch = query.match( /^\[(.+)\]$/ ); + var attr = attrMatch && attrMatch[1]; + var getValue = getValueGetter( attr, query ); + // use second argument as a parser + var parser = Isotope.sortDataParsers[ args[1] ]; + // parse the value, if there was a parser + sorter = parser ? function( elem ) { + return elem && parser( getValue( elem ) ); + } : + // otherwise just return value + function( elem ) { + return elem && getValue( elem ); + }; + + return sorter; + } + + // get an attribute getter, or get text of the querySelector + function getValueGetter( attr, query ) { + // if query looks like [foo-bar], get attribute + if ( attr ) { + return function getAttribute( elem ) { + return elem.getAttribute( attr ); + }; + } + + // otherwise, assume its a querySelector, and get its text + return function getChildText( elem ) { + var child = elem.querySelector( query ); + return child && child.textContent; + }; + } + + return mungeSorter; + })(); + + // parsers used in getSortData shortcut strings + Isotope.sortDataParsers = { + 'parseInt': function( val ) { + return parseInt( val, 10 ); + }, + 'parseFloat': function( val ) { + return parseFloat( val ); + } + }; + + // ----- sort method ----- // + + // sort filteredItem order + proto._sort = function() { + var sortByOpt = this.options.sortBy; + if ( !sortByOpt ) { + return; + } + // concat all sortBy and sortHistory + var sortBys = [].concat.apply( sortByOpt, this.sortHistory ); + // sort magic + var itemSorter = getItemSorter( sortBys, this.options.sortAscending ); + this.filteredItems.sort( itemSorter ); + // keep track of sortBy History + if ( sortByOpt != this.sortHistory[0] ) { + // add to front, oldest goes in last + this.sortHistory.unshift( sortByOpt ); + } + }; + + // returns a function used for sorting + function getItemSorter( sortBys, sortAsc ) { + return function sorter( itemA, itemB ) { + // cycle through all sortKeys + for ( var i = 0; i < sortBys.length; i++ ) { + var sortBy = sortBys[i]; + var a = itemA.sortData[ sortBy ]; + var b = itemB.sortData[ sortBy ]; + if ( a > b || a < b ) { + // if sortAsc is an object, use the value given the sortBy key + var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc; + var direction = isAscending ? 1 : -1; + return ( a > b ? 1 : -1 ) * direction; + } + } + return 0; + }; + } + + // -------------------------- methods -------------------------- // + + // get layout mode + proto._mode = function() { + var layoutMode = this.options.layoutMode; + var mode = this.modes[ layoutMode ]; + if ( !mode ) { + // TODO console.error + throw new Error( 'No layout mode: ' + layoutMode ); + } + // HACK sync mode's options + // any options set after init for layout mode need to be synced + mode.options = this.options[ layoutMode ]; + return mode; + }; + + proto._resetLayout = function() { + // trigger original reset layout + Outlayer.prototype._resetLayout.call( this ); + this._mode()._resetLayout(); + }; + + proto._getItemLayoutPosition = function( item ) { + return this._mode()._getItemLayoutPosition( item ); + }; + + proto._manageStamp = function( stamp ) { + this._mode()._manageStamp( stamp ); + }; + + proto._getContainerSize = function() { + return this._mode()._getContainerSize(); + }; + + proto.needsResizeLayout = function() { + return this._mode().needsResizeLayout(); + }; + + // -------------------------- adding & removing -------------------------- // + + // HEADS UP overwrites default Outlayer appended + proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // add to filteredItems + this.filteredItems = this.filteredItems.concat( filteredItems ); + }; + + // HEADS UP overwrites default Outlayer prepended + proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // start new layout + this._resetLayout(); + this._manageStamps(); + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // layout previous items + this.layoutItems( this.filteredItems ); + // add to items and filteredItems + this.filteredItems = filteredItems.concat( this.filteredItems ); + this.items = items.concat( this.items ); + }; + + proto._filterRevealAdded = function( items ) { + var filtered = this._filter( items ); + this.hide( filtered.needHide ); + // reveal all new items + this.reveal( filtered.matches ); + // layout new items, no transition + this.layoutItems( filtered.matches, true ); + return filtered.matches; + }; + + /** + * Filter, sort, and layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ + proto.insert = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // append item elements + var i, item; + var len = items.length; + for ( i=0; i < len; i++ ) { + item = items[i]; + this.element.appendChild( item.element ); + } + // filter new stuff + var filteredInsertItems = this._filter( items ).matches; + // set flag + for ( i=0; i < len; i++ ) { + items[i].isLayoutInstant = true; + } + this.arrange(); + // reset flag + for ( i=0; i < len; i++ ) { + delete items[i].isLayoutInstant; + } + this.reveal( filteredInsertItems ); + }; + + var _remove = proto.remove; + proto.remove = function( elems ) { + elems = utils.makeArray( elems ); + var removeItems = this.getItems( elems ); + // do regular thing + _remove.call( this, elems ); + // bail if no items to remove + var len = removeItems && removeItems.length; + // remove elems from filteredItems + for ( var i=0; len && i < len; i++ ) { + var item = removeItems[i]; + // remove item from collection + utils.removeFrom( this.filteredItems, item ); + } + }; + + proto.shuffle = function() { + // update random sortData + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + item.sortData.random = Math.random(); + } + this.options.sortBy = 'random'; + this._sort(); + this._layout(); + }; + + /** + * trigger fn without transition + * kind of hacky to have this in the first place + * @param {Function} fn + * @param {Array} args + * @returns ret + * @private + */ + proto._noTransition = function( fn, args ) { + // save transitionDuration before disabling + var transitionDuration = this.options.transitionDuration; + // disable transition + this.options.transitionDuration = 0; + // do it + var returnValue = fn.apply( this, args ); + // re-enable transition for reveal + this.options.transitionDuration = transitionDuration; + return returnValue; + }; + + // ----- helper methods ----- // + + /** + * getter method for getting filtered item elements + * @returns {Array} elems - collection of item elements + */ + proto.getFilteredItemElements = function() { + return this.filteredItems.map( function( item ) { + return item.element; + }); + }; + + // ----- ----- // + + return Isotope; + +})); diff --git a/lodestar/assets/js/jquery.lazyload.js b/lodestar/assets/js/jquery.lazyload.js new file mode 100644 index 000000000..7eb5fe314 --- /dev/null +++ b/lodestar/assets/js/jquery.lazyload.js @@ -0,0 +1,241 @@ +/*! + * Lazy Load - jQuery plugin for lazy loading images + * + * Copyright (c) 2007-2015 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + * Project home: + * http://www.appelsiini.net/projects/lazyload + * + * Version: 1.9.7 + * + */ + +(function($, window, document, undefined) { + var $window = $(window); + + $.fn.lazyload = function(options) { + var elements = this; + var $container; + var settings = { + threshold : 0, + failure_limit : 0, + event : "scroll", + effect : "show", + container : window, + data_attribute : "original", + skip_invisible : false, + appear : null, + load : null, + placeholder : "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAACAAMDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAf/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AIyAD//Z" + }; + + function update() { + var counter = 0; + + elements.each(function() { + var $this = $(this); + if (settings.skip_invisible && !$this.is(":visible")) { + return; + } + if ($.abovethetop(this, settings) || + $.leftofbegin(this, settings)) { + /* Nothing. */ + } else if (!$.belowthefold(this, settings) && + !$.rightoffold(this, settings)) { + $this.trigger("appear"); + /* if we found an image we'll load, reset the counter */ + counter = 0; + } else { + if (++counter > settings.failure_limit) { + return false; + } + } + }); + + } + + if(options) { + /* Maintain BC for a couple of versions. */ + if (undefined !== options.failurelimit) { + options.failure_limit = options.failurelimit; + delete options.failurelimit; + } + if (undefined !== options.effectspeed) { + options.effect_speed = options.effectspeed; + delete options.effectspeed; + } + + $.extend(settings, options); + } + + /* Cache container as jQuery as object. */ + $container = (settings.container === undefined || + settings.container === window) ? $window : $(settings.container); + + /* Fire one scroll event per scroll. Not one scroll event per image. */ + if (0 === settings.event.indexOf("scroll")) { + $container.on(settings.event, function() { + return update(); + }); + } + + this.each(function() { + var self = this; + var $self = $(self); + + self.loaded = false; + + /* If no src attribute given use data:uri. */ + if ($self.attr("src") === undefined || $self.attr("src") === false) { + if ($self.is("img")) { + $self.attr("src", settings.placeholder); + } + } + + /* When appear is triggered load original image. */ + $self.one("appear", function() { + if (!this.loaded) { + if (settings.appear) { + var elements_left = elements.length; + settings.appear.call(self, elements_left, settings); + } + $("") + .one("load", function() { + var original = $self.attr("data-" + settings.data_attribute); + $self.hide(); + if ($self.is("img")) { + $self.attr("src", original); + } else { + $self.css("background-image", "url('" + original + "')"); + } + $self[settings.effect](settings.effect_speed); + + self.loaded = true; + + /* Remove image from array so it is not looped next time. */ + var temp = $.grep(elements, function(element) { + return !element.loaded; + }); + elements = $(temp); + + if (settings.load) { + var elements_left = elements.length; + settings.load.call(self, elements_left, settings); + } + }) + .attr("src", $self.attr("data-" + settings.data_attribute)); + } + }); + + /* When wanted event is triggered load original image */ + /* by triggering appear. */ + if (0 !== settings.event.indexOf("scroll")) { + $self.on(settings.event, function() { + if (!self.loaded) { + $self.trigger("appear"); + } + }); + } + }); + + /* Check if something appears when window is resized. */ + $window.on("resize", function() { + update(); + }); + + /* With IOS5 force loading images when navigating with back button. */ + /* Non optimal workaround. */ + if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) { + $window.on("pageshow", function(event) { + if (event.originalEvent && event.originalEvent.persisted) { + elements.each(function() { + $(this).trigger("appear"); + }); + } + }); + } + + /* Force initial check if images should appear. */ + $(document).ready(function() { + update(); + }); + + return this; + }; + + /* Convenience methods in jQuery namespace. */ + /* Use as $.belowthefold(element, {threshold : 100, container : window}) */ + + $.belowthefold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop(); + } else { + fold = $(settings.container).offset().top + $(settings.container).height(); + } + + return fold <= $(element).offset().top - settings.threshold; + }; + + $.rightoffold = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.width() + $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left + $(settings.container).width(); + } + + return fold <= $(element).offset().left - settings.threshold; + }; + + $.abovethetop = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollTop(); + } else { + fold = $(settings.container).offset().top; + } + + return fold >= $(element).offset().top + settings.threshold + $(element).height(); + }; + + $.leftofbegin = function(element, settings) { + var fold; + + if (settings.container === undefined || settings.container === window) { + fold = $window.scrollLeft(); + } else { + fold = $(settings.container).offset().left; + } + + return fold >= $(element).offset().left + settings.threshold + $(element).width(); + }; + + $.inviewport = function(element, settings) { + return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) && + !$.belowthefold(element, settings) && !$.abovethetop(element, settings); + }; + + /* Custom selectors for your convenience. */ + /* Use as $("img:below-the-fold").something() or */ + /* $("img").filter(":below-the-fold").something() which is faster */ + + $.extend($.expr[":"], { + "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); }, + "above-the-top" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); }, + "in-viewport" : function(a) { return $.inviewport(a, {threshold : 0}); }, + /* Maintain BC for couple of versions. */ + "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); }, + "right-of-fold" : function(a) { return $.rightoffold(a, {threshold : 0}); }, + "left-of-fold" : function(a) { return !$.rightoffold(a, {threshold : 0}); } + }); + +})(jQuery, window, document); diff --git a/lodestar/assets/js/jquery.scrollTo.js b/lodestar/assets/js/jquery.scrollTo.js new file mode 100644 index 000000000..80ff3fa8a --- /dev/null +++ b/lodestar/assets/js/jquery.scrollTo.js @@ -0,0 +1,209 @@ +/*! + * jQuery.scrollTo + * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com + * Licensed under MIT + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + // AMD + define( ['jquery'], factory ); + } else if (typeof module !== 'undefined' && module.exports) { + // CommonJS + module.exports = factory( require( 'jquery' ) ); + } else { + // Global + factory( jQuery ); + } +})(function($) { + 'use strict'; + + var $scrollTo = $.scrollTo = function(target, duration, settings) { + return $( window ).scrollTo( target, duration, settings ); + }; + + $scrollTo.defaults = { + axis:'xy', + duration: 0, + limit:true + }; + + function isWin(elem) { + return ! elem.nodeName || + $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) !== -1; + } + + $.fn.scrollTo = function(target, duration, settings) { + if (typeof duration === 'object') { + settings = duration; + duration = 0; + } + if (typeof settings === 'function') { + settings = { onAfter:settings }; + } + if (target === 'max') { + target = 9e9; + } + + settings = $.extend( {}, $scrollTo.defaults, settings ); + // Speed is still recognized for backwards compatibility + duration = duration || settings.duration; + // Make sure the settings are given right + var queue = settings.queue && settings.axis.length > 1; + if (queue) { + // Let's keep the overall duration + duration /= 2; + } + settings.offset = both( settings.offset ); + settings.over = both( settings.over ); + + return this.each(function() { + // Null target yields nothing, just like jQuery does + if (target === null) { return; } + + var win = isWin( this ), + elem = win ? this.contentWindow || window : this, + $elem = $( elem ), + targ = target, + attr = {}, + toff; + + switch (typeof targ) { + // A number will pass the regex + case 'number': + case 'string': + if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test( targ )) { + targ = both( targ ); + // We are done + break; + } + // Relative/Absolute selector + targ = win ? $( targ ) : $( targ, elem ); + /* falls through */ + case 'object': + if (targ.length === 0) { return; } + // DOMElement / jQuery + if (targ.is || targ.style) { + // Get the real position of the target + toff = (targ = $( targ )).offset(); + } + } + + var offset = $.isFunction( settings.offset ) && settings.offset( elem, targ ) || settings.offset; + + $.each(settings.axis.split( '' ), function(i, axis) { + var Pos = axis === 'x' ? 'Left' : 'Top', + pos = Pos.toLowerCase(), + key = 'scroll' + Pos, + prev = $elem[key](), + max = $scrollTo.max( elem, axis ); + + if (toff) {// jQuery / DOMElement + attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]); + + // If it's a dom element, reduce the margin + if (settings.margin) { + attr[key] -= parseInt( targ.css( 'margin' + Pos ), 10 ) || 0; + attr[key] -= parseInt( targ.css( 'border' + Pos + 'Width' ), 10 ) || 0; + } + + attr[key] += offset[pos] || 0; + + if (settings.over[pos]) { + // Scroll to a fraction of its width/height + attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos]; + } + } else { + var val = targ[pos]; + // Handle percentage values + attr[key] = val.slice && val.slice( -1 ) === '%' ? + parseFloat( val ) / 100 * max + : val; + } + + // Number or 'number' + if (settings.limit && /^\d+$/.test( attr[key] )) { + // Check the limits + attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max ); + } + + // Don't waste time animating, if there's no need. + if ( ! i && settings.axis.length > 1) { + if (prev === attr[key]) { + // No animation needed + attr = {}; + } else if (queue) { + // Intermediate animation + animate( settings.onAfterFirst ); + // Don't animate this axis again in the next iteration. + attr = {}; + } + } + }); + + animate( settings.onAfter ); + + function animate(callback) { + var opts = $.extend({}, settings, { + // The queue setting conflicts with animate() + // Force it to always be true + queue: true, + duration: duration, + complete: callback && function() { + callback.call( elem, targ, settings ); + } + }); + $elem.animate( attr, opts ); + } + }); + }; + + // Max scrolling position, works on quirks mode + // It only fails (not too badly) on IE, quirks mode. + $scrollTo.max = function(elem, axis) { + var Dim = axis === 'x' ? 'Width' : 'Height', + scroll = 'scroll' + Dim; + + if ( ! isWin( elem )) { + return elem[scroll] - $( elem )[Dim.toLowerCase()](); } + + var size = 'client' + Dim, + doc = elem.ownerDocument || elem.document, + html = doc.documentElement, + body = doc.body; + + return Math.max( html[scroll], body[scroll] ) - Math.min( html[size], body[size] ); + }; + + function both(val) { + return $.isFunction( val ) || $.isPlainObject( val ) ? val : { top:val, left:val }; + } + + // Add special hooks so that window scroll properties can be animated + $.Tween.propHooks.scrollLeft = $.Tween.propHooks.scrollTop = { + get: function(t) { + return $( t.elem )[t.prop](); + }, + set: function(t) { + var curr = this.get( t ); + // If interrupt is true and user scrolled, stop animating + if (t.options.interrupt && t._last && t._last !== curr) { + return $( t.elem ).stop(); + } + var next = Math.round( t.now ); + // Don't waste CPU + // Browsers don't render floating point scroll + if (curr !== next) { + $( t.elem )[t.prop](next); + t._last = this.get( t ); + } + } + }; + + // AMD requirement + return $scrollTo; +}); diff --git a/lodestar/assets/js/navigation.js b/lodestar/assets/js/navigation.js new file mode 100644 index 000000000..d205cdb3d --- /dev/null +++ b/lodestar/assets/js/navigation.js @@ -0,0 +1,112 @@ +/** + * File navigation.js. + * + * Handles toggling the navigation menu for small screens and enables TAB key + * navigation support for dropdown menus. + */ +( function() { + var container, button, menu, links, subMenus, i, len; + + container = document.getElementById( 'site-navigation' ); + if ( ! container ) { + return; + } + + button = container.getElementsByTagName( 'button' )[0]; + if ( 'undefined' === typeof button ) { + return; + } + + menu = container.getElementsByTagName( 'ul' )[0]; + + // Hide menu toggle button if menu is empty and return early. + if ( 'undefined' === typeof menu ) { + button.style.display = 'none'; + return; + } + + menu.setAttribute( 'aria-expanded', 'false' ); + if ( -1 === menu.className.indexOf( 'nav-menu' ) ) { + menu.className += ' nav-menu'; + } + + button.onclick = function() { + if ( -1 !== container.className.indexOf( 'toggled' ) ) { + container.className = container.className.replace( ' toggled', '' ); + button.setAttribute( 'aria-expanded', 'false' ); + menu.setAttribute( 'aria-expanded', 'false' ); + } else { + container.className += ' toggled'; + button.setAttribute( 'aria-expanded', 'true' ); + menu.setAttribute( 'aria-expanded', 'true' ); + } + }; + + // Get all the link elements within the menu. + links = menu.getElementsByTagName( 'a' ); + subMenus = menu.getElementsByTagName( 'ul' ); + + // Set menu items with submenus to aria-haspopup="true". + for ( i = 0, len = subMenus.length; i < len; i++ ) { + subMenus[i].parentNode.setAttribute( 'aria-haspopup', 'true' ); + } + + // Each time a menu link is focused or blurred, toggle focus. + for ( i = 0, len = links.length; i < len; i++ ) { + links[i].addEventListener( 'focus', toggleFocus, true ); + links[i].addEventListener( 'blur', toggleFocus, true ); + } + + /** + * Sets or removes .focus class on an element. + */ + function toggleFocus() { + var self = this; + + // Move up through the ancestors of the current link until we hit .nav-menu. + while ( -1 === self.className.indexOf( 'nav-menu' ) ) { + + // On li elements toggle the class .focus. + if ( 'li' === self.tagName.toLowerCase() ) { + if ( -1 !== self.className.indexOf( 'focus' ) ) { + self.className = self.className.replace( ' focus', '' ); + } else { + self.className += ' focus'; + } + } + + self = self.parentElement; + } + } + +// Fix child menus for touch devices. + function fixMenuTouchTaps( container ) { + var touchStartFn, + parentLink = container.querySelectorAll( '.menu-item-has-children > a, .page_item_has_children > a' ); + + if ( 'ontouchstart' in window ) { + touchStartFn = function( e ) { + var menuItem = this.parentNode; + + if ( ! menuItem.classList.contains( 'focus' ) ) { + e.preventDefault(); + for( var i = 0; i < menuItem.parentNode.children.length; ++i ) { + if ( menuItem === menuItem.parentNode.children[i] ) { + continue; + } + menuItem.parentNode.children[i].classList.remove( 'focus' ); + } + menuItem.classList.add( 'focus' ); + } else { + menuItem.classList.remove( 'focus' ); + } + }; + + for ( var i = 0; i < parentLink.length; ++i ) { + parentLink[i].addEventListener( 'touchstart', touchStartFn, false ) + } + } + } + + fixMenuTouchTaps( container ); +} )(); diff --git a/lodestar/assets/js/panel-customizer.js b/lodestar/assets/js/panel-customizer.js new file mode 100644 index 000000000..decc358c2 --- /dev/null +++ b/lodestar/assets/js/panel-customizer.js @@ -0,0 +1,43 @@ +/** + * Theme Customizer enhancements, specific to panels, for a better user experience. + * + * This allows us to detect when the user has opened specific sections within the Customizer, + * and adjust our preview pane accordingly. + */ + +( function( $ ) { + + wp.customize.bind( 'ready', function() { + + // Detect when the section for each panel is expanded (or closed) so we can adjust preview accordingly + wp.customize.section( 'lodestar_panel1' ).expanded.bind( function( isExpanding ) { + // isExpanding will = true if you're entering the section, false if you're leaving it + wp.customize.previewer.send( 'section-highlight', { section: 'lodestar-panel1', expanded: isExpanding } ); + } ); + + // Detect when the section for each panel is expanded (or closed) so we can adjust preview accordingly + wp.customize.section( 'lodestar_panel2' ).expanded.bind( function( isExpanding ) { + // isExpanding will = true if you're entering the section, false if you're leaving it + wp.customize.previewer.send( 'section-highlight', { section: 'lodestar-panel2', expanded: isExpanding } ); + } ); + + // Detect when the section for each panel is expanded (or closed) so we can adjust preview accordingly + wp.customize.section( 'lodestar_panel3' ).expanded.bind( function( isExpanding ) { + // isExpanding will = true if you're entering the section, false if you're leaving it + wp.customize.previewer.send( 'section-highlight', { section: 'lodestar-panel3', expanded: isExpanding } ); + } ); + + // Detect when the section for each panel is expanded (or closed) so we can adjust preview accordingly + wp.customize.section( 'lodestar_panel4' ).expanded.bind( function( isExpanding ) { + // isExpanding will = true if you're entering the section, false if you're leaving it + wp.customize.previewer.send( 'section-highlight', { section: 'lodestar-panel4', expanded: isExpanding } ); + } ); + + // Detect when the section for each panel is expanded (or closed) so we can adjust preview accordingly + wp.customize.section( 'lodestar_footer_settings' ).expanded.bind( function( isExpanding ) { + // isExpanding will = true if you're entering the section, false if you're leaving it + wp.customize.previewer.send( 'section-highlight', { section: 'lodestar-footer-settings', expanded: isExpanding } ); + } ); + + } ); +} )( jQuery ); diff --git a/lodestar/assets/js/portfolio-page.js b/lodestar/assets/js/portfolio-page.js new file mode 100644 index 000000000..4ebd78969 --- /dev/null +++ b/lodestar/assets/js/portfolio-page.js @@ -0,0 +1,68 @@ +/** + * File portfolio-page.js + * + * JavaScript specific to the portfolio-page.php template. + * + * Loads Isotope, handles sorting and triggers lazy-loading for images + */ + +( function( $ ) { + + // Define porfolio project wrapper + $grid = $( '.portfolio-wrapper' ); + + $( window ).load( function() { + + // Determine text direction + var $ltr = true; + if ( $('html' ).attr( 'dir' ) == 'rtl') { + $ltr = false; + } + + // Initialize Isotope + $grid.isotope( { + itemSelector: '.jetpack-portfolio', + layoutMode: 'fitRows', + animationEngine: 'best-available', + originLeft: $ltr, + columnWidth: $grid.width() / 2, + resize: false + } ); + } ); + + // Portfolio Project filtering + $( '.project-terms a' ).click( function( e ) { + e.preventDefault(); + + // Remove 'current-type' class from previously highlighted link + $( '.project-terms a.current-type' ).removeClass( 'current-type' ); + + // Add to link that was clicked + $( this ).addClass( 'current-type' ); + + // If the 'All' link was clicked, show all + if ( $( this ).hasClass( 'types-all' ) ) { + $grid.isotope( { filter: '*' } ); + + // Otherwise, sort based on data attribute + } else { + // Returns format gettypeid-#### - we just want the numbers, so we split them off the end + var $get_typeid = $(this).attr( 'data-get-typeid' ).split('-')[1]; + + // Filter projects by class + $grid.isotope( { filter: '.typeid-' + $get_typeid } ); + } + + // Make sure all the lazy loaded images are visible when filtering + $( '.portfolio-featured-image' ).trigger( 'appear' ); + } ); + + // Lazy load project images + $(function() { + $( '.portfolio-featured-image' ).lazyload( { + effect: 'fadeIn', + threshold: 200, + } ); + } ); + +} )( jQuery ); \ No newline at end of file diff --git a/lodestar/assets/js/skip-link-focus-fix.js b/lodestar/assets/js/skip-link-focus-fix.js new file mode 100644 index 000000000..a39cefbfe --- /dev/null +++ b/lodestar/assets/js/skip-link-focus-fix.js @@ -0,0 +1,33 @@ +/** + * File skip-link-focus-fix.js. + * + * Helps with accessibility for keyboard only users. + * + * Learn more: https://git.io/vWdr2 + */ +( function() { + var isWebkit = navigator.userAgent.toLowerCase().indexOf( 'webkit' ) > -1, + isOpera = navigator.userAgent.toLowerCase().indexOf( 'opera' ) > -1, + isIe = navigator.userAgent.toLowerCase().indexOf( 'msie' ) > -1; + + if ( ( isWebkit || isOpera || isIe ) && document.getElementById && window.addEventListener ) { + window.addEventListener( 'hashchange', function() { + var id = location.hash.substring( 1 ), + element; + + if ( ! ( /^[A-z0-9_-]+$/.test( id ) ) ) { + return; + } + + element = document.getElementById( id ); + + if ( element ) { + if ( ! ( /^(?:a|select|input|button|textarea)$/i.test( element.tagName ) ) ) { + element.tabIndex = -1; + } + + element.focus(); + } + }, false ); + } +})(); diff --git a/lodestar/comments.php b/lodestar/comments.php new file mode 100644 index 000000000..a813fed05 --- /dev/null +++ b/lodestar/comments.php @@ -0,0 +1,75 @@ + + +
+ + +

+ ' . get_the_title() . '' + ); + } else { + printf( // WPCS: XSS OK. + /* translators: 1: comment count number, 2: title. */ + esc_html( _nx( '%1$s thought on “%2$s”', '%1$s thoughts on “%2$s”', $comment_count, 'comments title', 'lodestar' ) ), + number_format_i18n( $comment_count ), + '' . get_the_title() . '' + ); + } + ?> +

+ + + +
    + 100, + 'style' => 'ol', + 'short_ping' => true, + ) ); + ?> +
+ + + +

+ + +
diff --git a/lodestar/components/features/portfolio/content-portfolio-archive.php b/lodestar/components/features/portfolio/content-portfolio-archive.php new file mode 100644 index 000000000..b21f2b21c --- /dev/null +++ b/lodestar/components/features/portfolio/content-portfolio-archive.php @@ -0,0 +1,26 @@ + + +
> + +
+ ', '' ); ?> +
+
', '
' ); ?> +
+ +
+
+ + + + + + +
+
\ No newline at end of file diff --git a/lodestar/components/features/portfolio/content-portfolio-single.php b/lodestar/components/features/portfolio/content-portfolio-single.php new file mode 100644 index 000000000..d3afab251 --- /dev/null +++ b/lodestar/components/features/portfolio/content-portfolio-single.php @@ -0,0 +1,48 @@ + + +
> + + +
+ +
+ + +
+ ', '' ); + } else { + the_title( '

', '

' ); + } ?> + + +
+ +
+ '', + ) ); + + ?> +
+ + + + + +
diff --git a/lodestar/components/features/portfolio/content-portfolio-template.php b/lodestar/components/features/portfolio/content-portfolio-template.php new file mode 100644 index 000000000..f4c493650 --- /dev/null +++ b/lodestar/components/features/portfolio/content-portfolio-template.php @@ -0,0 +1,66 @@ + + + + +
> +
+ ', '' ); ?> +
+ +
+ +
+
+ + + + 'jetpack-portfolio', + 'posts_per_page' => '120', + 'paged' => $paged, + ); + $project_query = new WP_Query ( $args ); +?> + + +
+ + have_posts() ) : ?> + + + +
+ + have_posts() ) : $project_query -> the_post(); ?> + + + + +
+ + +
diff --git a/lodestar/components/features/portfolio/content-portfolio.php b/lodestar/components/features/portfolio/content-portfolio.php new file mode 100644 index 000000000..129588d80 --- /dev/null +++ b/lodestar/components/features/portfolio/content-portfolio.php @@ -0,0 +1,55 @@ + + + + +
> + +
+ ID ), 'lodestar-portfolio-archive-image' ); + $alt_text = get_post_meta( get_post_thumbnail_id( $post->ID ), '_wp_attachment_image_alt', true ); + + if ( is_page_template( 'templates/portfolio-page.php' ) ) : ?> + + <?php echo esc_attr( $alt_text ); ?> + + + <?php echo esc_attr( $alt_text ); ?> + + + +
+ + + +
+
+ +
+ ', '' ); + } else { + the_title( '

', '

' ); + } ?> +
+ + +
+ +
+ +
+
+ +
diff --git a/lodestar/components/features/testimonials/content-testimonials.php b/lodestar/components/features/testimonials/content-testimonials.php new file mode 100644 index 000000000..eeed0f308 --- /dev/null +++ b/lodestar/components/features/testimonials/content-testimonials.php @@ -0,0 +1,24 @@ + +
> + +
+ +
+ +
+ +
+ +
+ ', '' ); ?> + +
+
+ +
diff --git a/lodestar/components/features/testimonials/testimonials.php b/lodestar/components/features/testimonials/testimonials.php new file mode 100644 index 000000000..18e0eada9 --- /dev/null +++ b/lodestar/components/features/testimonials/testimonials.php @@ -0,0 +1,29 @@ + + 'jetpack-testimonial', + 'order' => 'ASC', + 'orderby' => 'menu_order', + 'posts_per_page' => 2, + 'no_found_rows' => true, + ) ); +?> + +have_posts() ) : ?> +
+
+ have_posts() ) : $testimonials->the_post(); + get_template_part( 'components/features/testimonials/content', 'testimonials' ); + endwhile; + wp_reset_postdata(); + ?> +
+
+ diff --git a/lodestar/components/footer/footer-image.php b/lodestar/components/footer/footer-image.php new file mode 100644 index 000000000..2492aa2f9 --- /dev/null +++ b/lodestar/components/footer/footer-image.php @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/lodestar/components/footer/footer-widgets.php b/lodestar/components/footer/footer-widgets.php new file mode 100644 index 000000000..fa2de6a9c --- /dev/null +++ b/lodestar/components/footer/footer-widgets.php @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/lodestar/components/footer/site-info.php b/lodestar/components/footer/site-info.php new file mode 100644 index 000000000..c14a02c40 --- /dev/null +++ b/lodestar/components/footer/site-info.php @@ -0,0 +1,7 @@ +
+
+ + | + Automattic' ); ?> +
+
diff --git a/lodestar/components/header/content-top.php b/lodestar/components/header/content-top.php new file mode 100644 index 000000000..d950d2c2f --- /dev/null +++ b/lodestar/components/header/content-top.php @@ -0,0 +1,13 @@ + +
+ ' . wp_kses_post( $lodestar_header_top_text_1 ) . ''; + if ( ! empty( $lodestar_header_top_text_2 ) || is_customize_preview() ) { + echo '' . wp_kses_post( $lodestar_header_top_text_2 ) . ''; + } ?> +
+ diff --git a/lodestar/components/header/header-image.php b/lodestar/components/header/header-image.php new file mode 100644 index 000000000..5a7173452 --- /dev/null +++ b/lodestar/components/header/header-image.php @@ -0,0 +1,45 @@ + +
+ ID ); + $thumbnail_attributes = wp_get_attachment_image_src( $post_thumbnail_id, 'lodestar-featured-image' ); + ?> + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + +
+ +
+ + +
diff --git a/lodestar/components/header/site-branding.php b/lodestar/components/header/site-branding.php new file mode 100644 index 000000000..eb6edb675 --- /dev/null +++ b/lodestar/components/header/site-branding.php @@ -0,0 +1,18 @@ +
+
+ + + + +

+ +

+ + + +

+ + +
+
diff --git a/lodestar/components/navigation/navigation-top.php b/lodestar/components/navigation/navigation-top.php new file mode 100644 index 000000000..8de95d412 --- /dev/null +++ b/lodestar/components/navigation/navigation-top.php @@ -0,0 +1,7 @@ + diff --git a/lodestar/components/page/content-front-page-panels.php b/lodestar/components/page/content-front-page-panels.php new file mode 100644 index 000000000..978afc268 --- /dev/null +++ b/lodestar/components/page/content-front-page-panels.php @@ -0,0 +1,150 @@ + + +
> + + + + + + ID ), 'lodestar-featured-image' ); + + $post_thumbnail_id = get_post_thumbnail_id( $post->ID ); + + $thumbnail_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'lodestar-featured-image' ); + //Calculate aspect ratio: h / w * 100% + $ratio = $thumbnail_attributes[2] / $thumbnail_attributes[1] * 100; + ?> + +
+
+
+ + + +
+
+
+ ', '' ); ?> + + + +
+ +
+ →', 'lodestar' ), array( 'span' => array( 'class' => array() ) ) ), + the_title( '"', '"', false ) + ) ); + ?> +
+ + 'jetpack-portfolio', + 'posts_per_page' => 6, + 'no_found_rows' => true, + ); + + $project_query = new WP_Query ( $args ); + ?> + + have_posts() ) : ?> + +
+ + have_posts() ) : $project_query -> the_post(); + get_template_part( 'components/features/portfolio/content', 'portfolio' ); + endwhile; + ?> + +
+ + + + + + + + 'rand', + 'post_type' => 'jetpack-testimonial', + 'posts_per_page' => 2, + 'no_found_rows' => true, + ); + + $testimonial_query = new WP_Query ( $args ); + ?> + + have_posts() ) : ?> + +
+ + have_posts() ) : $testimonial_query -> the_post(); + get_template_part( 'components/features/testimonials/content', 'testimonials' ); + endwhile; + ?> + +
+ + + + + + + + 2, + 'post_status' => 'publish', + 'ignore_sticky_posts' => true, + 'no_found_rows' => true, + ); + + $recent_posts = new WP_Query ( $args ); + ?> + + have_posts() ) : ?> +
+ have_posts() ) : $recent_posts->the_post(); + get_template_part( 'components/post/content', 'excerpt' ); + endwhile; + ?> +
+ + + + + + +
+
+ +
diff --git a/lodestar/components/page/content-front-page.php b/lodestar/components/page/content-front-page.php new file mode 100644 index 000000000..dd7c39ef9 --- /dev/null +++ b/lodestar/components/page/content-front-page.php @@ -0,0 +1,16 @@ +
> + +
+ '', + 'link_before' => '', + 'link_after' => '' + ) ); + ?> +
+ +
diff --git a/lodestar/components/page/content-page.php b/lodestar/components/page/content-page.php new file mode 100644 index 000000000..3b861f990 --- /dev/null +++ b/lodestar/components/page/content-page.php @@ -0,0 +1,31 @@ + + +
> +
+ ', '' ); ?> +
+
+ '', + 'link_before' => '', + 'link_after' => '' + ) ); + ?> +
+ +
diff --git a/lodestar/components/post/content-excerpt.php b/lodestar/components/post/content-excerpt.php new file mode 100644 index 000000000..05eb36ad3 --- /dev/null +++ b/lodestar/components/post/content-excerpt.php @@ -0,0 +1,28 @@ + + +
> +
+ ', esc_url( get_permalink() ) ), '' ); ?> + + + + +
+
+ +
+ + +
diff --git a/lodestar/components/post/content-none.php b/lodestar/components/post/content-none.php new file mode 100644 index 000000000..bdfc495f6 --- /dev/null +++ b/lodestar/components/post/content-none.php @@ -0,0 +1,35 @@ + + +
+ +
+ + +

Get started here.', 'lodestar' ), array( 'a' => array( 'href' => array() ) ) ), esc_url( admin_url( 'post-new.php' ) ) ); ?>

+ + + +

+ + +

+ +
+
diff --git a/lodestar/components/post/content.php b/lodestar/components/post/content.php new file mode 100644 index 000000000..0d9181fe5 --- /dev/null +++ b/lodestar/components/post/content.php @@ -0,0 +1,57 @@ + + +
> + +
+ + + +
+ + +
+ ', '' ); + } else { + the_title( '

', '

' ); + } + + if ( 'post' === get_post_type() ) : ?> + + + +
+
+ →', 'lodestar' ), array( 'span' => array( 'class' => array() ) ) ), + the_title( '"', '"', false ) + ) ); + + wp_link_pages( array( + 'before' => '', + 'link_before' => '', + 'link_after' => '' + ) ); + ?> +
+ + + +
diff --git a/lodestar/footer.php b/lodestar/footer.php new file mode 100644 index 000000000..38a699a64 --- /dev/null +++ b/lodestar/footer.php @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/lodestar/front-page.php b/lodestar/front-page.php new file mode 100644 index 000000000..17d6f42d4 --- /dev/null +++ b/lodestar/front-page.php @@ -0,0 +1,75 @@ + + + +
+
+ + '; + get_template_part( 'components/page/content', 'front-page' ); + echo '
'; + endwhile; + else : // I'm not sure it's possible to have no posts when this page is shown, but WTH + echo '
'; + get_template_part( 'components/post/content', 'none' ); + echo '
'; + endif; ?> + + '; + echo ''; + echo '' . sprintf( esc_html__( 'Panel %1$s Placeholder', 'lodestar' ), esc_attr( $lodestarcounter ) ) . ''; + echo ''; + endif; + + $lodestarcounter++; + endforeach; + ?> + + + + + + + diff --git a/lodestar/functions.php b/lodestar/functions.php new file mode 100644 index 000000000..6c2430e11 --- /dev/null +++ b/lodestar/functions.php @@ -0,0 +1,305 @@ + tag in the document head, and expect WordPress to + * provide it for us. + */ + add_theme_support( 'title-tag' ); + + /* + * Enable support for Post Thumbnails on posts and pages. + * + * @link https://developer.wordpress.org/themes/functionality/featured-images-post-thumbnails/ + */ + add_theme_support( 'post-thumbnails' ); + + add_image_size( 'lodestar-featured-image', 2000, 1200, true ); + + add_image_size( 'lodestar-featured-archive-image', 700, 9999 ); + + add_image_size( 'lodestar-portfolio-image', 2000, 9999 ); + + add_image_size( 'lodestar-portfolio-archive-image', 900, 600, true ); + + add_image_size( 'lodestar-thumbnail-avatar', 100, 100, true ); + + add_image_size( 'lodestar-logo', 2400, 400 ); + + // This theme uses wp_nav_menu() in one location. + register_nav_menus( array( + 'top' => esc_html__( 'Top', 'lodestar' ), + ) ); + + /* + * Switch default core markup for search form, comment form, and comments + * to output valid HTML5. + */ + add_theme_support( 'html5', array( + 'search-form', + 'comment-form', + 'comment-list', + 'gallery', + 'caption', + ) ); + + // Set up the WordPress core custom background feature. + add_theme_support( 'custom-background', apply_filters( 'lodestar_custom_background_args', array( + 'default-color' => 'ffffff', + 'default-image' => '', + ) ) ); + + // Add support to selectively refresh widgets in Customizer + add_theme_support( 'customize_selective_refresh_widgets' ); + + // Add theme support for Custom Logo. + add_theme_support( 'custom-logo', array( + 'width' => 2400, + 'height' => 400, + 'flex-width' => true, + 'flex-height' => true, + 'header-text' => array( 'site-title', 'site-description' ), + ) ); +} +endif; +add_action( 'after_setup_theme', 'lodestar_setup' ); + +/** + * Set the content width in pixels, based on the theme's design and stylesheet. + * + * Priority 0 to make it available to lower priority callbacks. + * + * @global int $content_width + */ +function lodestar_content_width() { + $GLOBALS['content_width'] = apply_filters( 'lodestar_content_width', 700 ); +} +add_action( 'after_setup_theme', 'lodestar_content_width', 0 ); + +/** + * Custom function that modifies the_custom_logo output slightly + */ +function lodestar_the_custom_logo() { + if ( has_custom_logo() ) { + $custom_logo_id = get_theme_mod( 'custom_logo' ); + $custom_logo_attr = array( + 'class' => 'site-logo', + 'itemprop' => 'logo', + ); + printf( '', + esc_url( home_url( '/' ) ), + wp_get_attachment_image( $custom_logo_id , 'lodestar-logo', false, $custom_logo_attr ) + ); + } +} + +/** + * Register custom fonts + */ +function lodestar_fonts_url() { + $fonts_url = ''; + + /* Translators: If there are characters in your language that are not + * supported by Work Sans, translate this to 'off'. Do not translate + * into your own language. + */ + $work_sans = esc_html_x( 'on', 'work_sans font: on or off', 'lodestar' ); + + /* Translators: If there are characters in your language that are not + * supported by Karla, translate this to 'off'. Do not translate + * into your own language. + */ + $karla = esc_html_x( 'on', 'Karla font: on or off', 'lodestar' ); + + if ( 'off' !== $work_sans || 'off' !== $karla ) { + $font_families = array(); + + if ( 'off' !== $work_sans ) { + $font_families[] = 'Work Sans:800'; + } + + if ( 'off' !== $karla ) { + $font_families[] = 'Karla:400,400italic,700,700italic'; + } + + $query_args = array( + 'family' => urlencode( implode( '|', $font_families ) ), + 'subset' => urlencode( 'latin,latin-ext' ), + ); + + $fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' ); + } + + return esc_url_raw( $fonts_url ); +} + +/** + * Register widget area. + * + * @link https://developer.wordpress.org/themes/functionality/sidebars/#registering-a-sidebar + */ +function lodestar_widgets_init() { + register_sidebar( array( + 'name' => esc_html__( 'Sidebar', 'lodestar' ), + 'id' => 'sidebar-1', + 'description' => '', + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + register_sidebar( array( + 'name' => esc_html__( 'Footer 1', 'lodestar' ), + 'id' => 'sidebar-2', + 'description' => '', + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + register_sidebar( array( + 'name' => esc_html__( 'Footer 2', 'lodestar' ), + 'id' => 'sidebar-3', + 'description' => '', + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + register_sidebar( array( + 'name' => esc_html__( 'Footer 3', 'lodestar' ), + 'id' => 'sidebar-4', + 'description' => '', + 'before_widget' => '
', + 'after_widget' => '
', + 'before_title' => '

', + 'after_title' => '

', + ) ); + + // echo esc_attr( lodestar_widget_column_class( 'sidebar-1' ) ); +} +add_action( 'widgets_init', 'lodestar_widgets_init' ); + + +/** + * Wrap avatars in div for easier styling + */ +function lodestar_get_avatar( $avatar ) { + if ( ! is_admin() ) { + $avatar = '' . $avatar . ''; + } + return $avatar; +} +add_filter( 'get_avatar', 'lodestar_get_avatar', 10, 5 ); + + +/** + * Use front-page.php when Front page displayes is set to a static page. + * + * @param string $template front-page.php. + * + * @return string The template to be used: blank if is_home() is true (defaults to index.php), else $template. +*/ +function lodestar_front_page_template( $template ) { + return is_home() ? '' : $template; +} +add_filter( 'frontpage_template', 'lodestar_front_page_template' ); + + +/** + * Enqueue scripts and styles. + */ +function lodestar_scripts() { + wp_enqueue_style( 'lodestar-style', get_stylesheet_uri() ); + + wp_enqueue_style( 'lodestar_fonts_url', lodestar_fonts_url(), array(), null ); + + wp_enqueue_style( 'genericons', get_template_directory_uri() . '/assets/fonts/genericons.css', array(), null ); + + wp_enqueue_script( 'lodestar-navigation', get_template_directory_uri() . '/assets/js/navigation.js', array(), '20151215', true ); + + wp_enqueue_script( 'lodestar-global', get_template_directory_uri() . '/assets/js/global.js', array( 'jquery' ), '20151215', true ); + + wp_enqueue_script( 'lodestar-skip-link-focus-fix', get_template_directory_uri() . '/assets/js/skip-link-focus-fix.js', array(), '20151215', true ); + + // Scroll effects (only loaded on front page in Customizer) + if ( lodestar_is_frontpage() && is_customize_preview() ) : + wp_enqueue_script( 'scrollTo', get_template_directory_uri() . '/assets/js/jquery.scrollTo.js', array( 'jquery' ), '20151030', true ); + endif; + + if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) { + wp_enqueue_script( 'comment-reply' ); + } + + // Portfolio navigation (only loaded on Portfolio Template) + if ( is_page_template( 'templates/portfolio-page.php' ) ) : + wp_enqueue_script( 'lazyload', get_template_directory_uri() . '/assets/js/jquery.lazyload.js', array( 'jquery' ), '20160719', true ); + wp_enqueue_script( 'isotope', get_template_directory_uri() . '/assets/js/isotope.pkgd.js', array( 'jquery' ), '20160719', true ); + wp_enqueue_script( 'lodestar-portfolio-page', get_template_directory_uri() . '/assets/js/portfolio-page.js', array( 'jquery', 'isotope', 'lazyload' ), '20160719', true ); + endif; + +} +add_action( 'wp_enqueue_scripts', 'lodestar_scripts' ); + +/** + * Implement the Custom Header feature. + */ +require get_template_directory() . '/inc/custom-header.php'; + +/** + * Custom template tags for this theme. + */ +require get_template_directory() . '/inc/template-tags.php'; + +/** + * Custom functions that act independently of the theme templates. + */ +require get_template_directory() . '/inc/extras.php'; + +/** + * Customizer additions. + */ +require get_template_directory() . '/inc/customizer.php'; + +/** + * Load Jetpack compatibility file. + */ +require get_template_directory() . '/inc/jetpack.php'; + +/** + * Load WooCommerce compatibility file. + */ +if ( class_exists( 'WooCommerce' ) ) { + require( get_template_directory() . '/inc/woocommerce.php' ); +} diff --git a/lodestar/header.php b/lodestar/header.php new file mode 100644 index 000000000..98f968188 --- /dev/null +++ b/lodestar/header.php @@ -0,0 +1,45 @@ + section and everything up until
+ * + * @link https://developer.wordpress.org/themes/basics/template-files/#template-partials + * + * @package Lodestar + */ + +?> +> + + + + + + + + + +> +
+ + + + +
diff --git a/lodestar/inc/custom-header.php b/lodestar/inc/custom-header.php new file mode 100644 index 000000000..2ca7b4655 --- /dev/null +++ b/lodestar/inc/custom-header.php @@ -0,0 +1,65 @@ + get_template_directory_uri() . '/assets/images/header.jpg', + 'default-text-color' => 'ffffff', + 'width' => 2000, + 'height' => 1200, + 'flex-height' => true, + 'wp-head-callback' => 'lodestar_header_style', + ) ) ); +} +add_action( 'after_setup_theme', 'lodestar_custom_header_setup' ); + +if ( ! function_exists( 'lodestar_header_style' ) ) : +/** + * Styles the header image and text displayed on the blog + * + * @see lodestar_custom_header_setup(). + */ +function lodestar_header_style() { + $header_text_color = get_header_textcolor(); + + // If no custom options for text are set, let's bail + // get_header_textcolor() options: add_theme_support( 'custom-header' ) is default, hide text (returns 'blank') or any hex value. + if ( get_theme_support( 'custom-header', 'default-text-color' ) === $header_text_color ) { + return; + } + + // If we get this far, we have custom styles. Let's do this. + ?> + + get_setting( 'blogname' )->transport = 'postMessage'; + $wp_customize->get_setting( 'blogdescription' )->transport = 'postMessage'; + $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage'; + + /** + * Add the Theme Options section + */ + $wp_customize->add_panel( 'lodestar_options_panel', array( + 'title' => esc_html__( 'Theme Options', 'lodestar' ), + 'description' => esc_html__( 'Configure your theme settings', 'lodestar' ), + ) ); + + // Top of site content + $wp_customize->add_section( 'lodestar_top_of_site', array( + 'title' => esc_html__( 'Header Top Text', 'lodestar' ), + 'panel' => 'lodestar_options_panel', + 'description' => esc_html__( 'Add a short bit of content to the top of your website.', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_header_top_text_1', array( + 'sanitize_callback' => 'wp_kses_post', + ) ); + + $wp_customize->add_control( 'lodestar_header_top_text_1', array( + 'section' => 'lodestar_top_of_site', + 'type' => 'textarea', + 'priority' => 1, + 'label' => esc_html__( 'Header Top Text 1', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_header_top_text_2', array( + 'sanitize_callback' => 'wp_kses_post', + ) ); + + $wp_customize->add_control( 'lodestar_header_top_text_2', array( + 'section' => 'lodestar_top_of_site', + 'type' => 'textarea', + 'priority' => 1, + 'label' => esc_html__( 'Header Top Text 2', 'lodestar' ), + ) ); + + // Panel 1 + $wp_customize->add_section( 'lodestar_panel1', array( + 'title' => esc_html__( 'Panel 1', 'lodestar' ), + 'active_callback' => 'is_front_page', + 'panel' => 'lodestar_options_panel', + 'description' => esc_html__( 'Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed.', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_panel1', array( + 'default' => false, + 'sanitize_callback' => 'lodestar_sanitize_numeric_value', + ) ); + + $wp_customize->add_control( 'lodestar_panel1', array( + 'label' => esc_html__( 'Panel Content', 'lodestar' ), + 'section' => 'lodestar_panel1', + 'type' => 'dropdown-pages', + ) ); + + $wp_customize->add_setting( 'lodestar_panel1_layout', array( + 'default' => 'one-column', + 'sanitize_callback' => 'lodestar_sanitize_layout', + ) ); + + $wp_customize->add_control( 'lodestar_panel1_layout', array( + 'label' => esc_html__( 'Panel Layout', 'lodestar' ), + 'section' => 'lodestar_panel1', + 'type' => 'radio', + 'choices' => array( + 'one-column' => esc_html__( 'One Column', 'lodestar' ), + 'two-column' => esc_html__( 'Two Column', 'lodestar' ), + ), + ) ); + + // Panel 2 + $wp_customize->add_section( 'lodestar_panel2', array( + 'title' => esc_html__( 'Panel 2', 'lodestar' ), + 'active_callback' => 'is_front_page', + 'panel' => 'lodestar_options_panel', + 'description' => esc_html__( 'Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed.', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_panel2', array( + 'default' => false, + 'sanitize_callback' => 'lodestar_sanitize_numeric_value', + ) ); + + $wp_customize->add_control( 'lodestar_panel2', array( + 'label' => esc_html__( 'Panel Content', 'lodestar' ), + 'section' => 'lodestar_panel2', + 'type' => 'dropdown-pages', + ) ); + + $wp_customize->add_setting( 'lodestar_panel2_layout', array( + 'default' => 'one-column', + 'sanitize_callback' => 'lodestar_sanitize_layout', + ) ); + + $wp_customize->add_control( 'lodestar_panel2_layout', array( + 'label' => esc_html__( 'Panel Layout', 'lodestar' ), + 'section' => 'lodestar_panel2', + 'type' => 'radio', + 'choices' => array( + 'one-column' => esc_html__( 'One Column', 'lodestar' ), + 'two-column' => esc_html__( 'Two Column', 'lodestar' ), + ), + ) ); + + // Panel 3 + $wp_customize->add_section( 'lodestar_panel3', array( + 'title' => esc_html__( 'Panel 3', 'lodestar' ), + 'active_callback' => 'is_front_page', + 'panel' => 'lodestar_options_panel', + 'description' => esc_html__( 'Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed.', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_panel3', array( + 'default' => false, + 'sanitize_callback' => 'lodestar_sanitize_numeric_value', + ) ); + + $wp_customize->add_control( 'lodestar_panel3', array( + 'label' => esc_html__( 'Panel Content', 'lodestar' ), + 'section' => 'lodestar_panel3', + 'type' => 'dropdown-pages', + ) ); + + $wp_customize->add_setting( 'lodestar_panel3_layout', array( + 'default' => 'one-column', + 'sanitize_callback' => 'lodestar_sanitize_layout', + ) ); + + $wp_customize->add_control( 'lodestar_panel3_layout', array( + 'label' => esc_html__( 'Panel Layout', 'lodestar' ), + 'section' => 'lodestar_panel3', + 'type' => 'radio', + 'choices' => array( + 'one-column' => esc_html__( 'One Column', 'lodestar' ), + 'two-column' => esc_html__( 'Two Column', 'lodestar' ), + ), + ) ); + + // Panel 4 + $wp_customize->add_section( 'lodestar_panel4', array( + 'title' => esc_html__( 'Panel 4', 'lodestar' ), + 'active_callback' => 'is_front_page', + 'panel' => 'lodestar_options_panel', + 'description' => esc_html__( 'Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed.', 'lodestar' ), + ) ); + + $wp_customize->add_setting( 'lodestar_panel4', array( + 'default' => false, + 'sanitize_callback' => 'lodestar_sanitize_numeric_value', + ) ); + + $wp_customize->add_control( 'lodestar_panel4', array( + 'label' => esc_html__( 'Panel Content', 'lodestar' ), + 'section' => 'lodestar_panel4', + 'type' => 'dropdown-pages', + ) ); + + $wp_customize->add_setting( 'lodestar_panel4_layout', array( + 'default' => 'one-column', + 'sanitize_callback' => 'lodestar_sanitize_layout', + ) ); + + $wp_customize->add_control( 'lodestar_panel4_layout', array( + 'label' => esc_html__( 'Panel Layout', 'lodestar' ), + 'section' => 'lodestar_panel4', + 'type' => 'radio', + 'choices' => array( + 'one-column' => esc_html__( 'One Column', 'lodestar' ), + 'two-column' => esc_html__( 'Two Column', 'lodestar' ), + ), + ) ); + + // Footer Image + $wp_customize->add_section( 'lodestar_footer_settings', array( + 'title' => esc_html__( 'Footer Image', 'lodestar' ), + 'panel' => 'lodestar_options_panel', + 'default' => '', + ) ); + + $wp_customize->add_setting('lodestar_footer_image', array( + 'transport' => 'refresh', + 'sanitize_callback' => 'esc_url_raw', + ) ); + + $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, + 'lodestar_footer_image', array( + 'label' => esc_html__( 'Footer Image', 'lodestar' ), + 'section' => 'lodestar_footer_settings', + 'description' => esc_html__( 'Add an image to be displayed at the bottom of the Front Page template, above the footer.', 'lodestar' ), + ) ) ); +} +add_action( 'customize_register', 'lodestar_customize_register' ); + + +/** + * Sanitize a numeric value + */ +function lodestar_sanitize_numeric_value( $input ) { + if ( is_numeric( $input ) ) { + return intval( $input ); + } else { + return 0; + } +} + +/** + * Sanitize a radio button + */ +function lodestar_sanitize_layout( $input ) { + $valid = array( + 'one-column' => esc_html__( 'One Column', 'lodestar' ), + 'two-column' => esc_html__( 'Two Column', 'lodestar' ), + ); + + if ( array_key_exists( $input, $valid ) ) { + return $input; + } else { + return ''; + } +} + +/** + * Binds JS handlers to make Theme Customizer preview reload changes asynchronously. + */ +function lodestar_customize_preview_js() { + wp_enqueue_script( 'lodestar_customizer', get_template_directory_uri() . '/assets/js/customizer.js', array( 'customize-preview' ), '20151215', true ); +} +add_action( 'customize_preview_init', 'lodestar_customize_preview_js' ); + +/** + * Some extra JavaScript to improve the user experience in the Customizer for this theme. + */ +function lodestar_panels_js() { + wp_enqueue_script( 'lodestar_extra_js', get_template_directory_uri() . '/assets/js/panel-customizer.js', array(), '20151116', true ); +} +add_action( 'customize_controls_enqueue_scripts', 'lodestar_panels_js' ); diff --git a/lodestar/inc/extras.php b/lodestar/inc/extras.php new file mode 100644 index 000000000..0895d4ea9 --- /dev/null +++ b/lodestar/inc/extras.php @@ -0,0 +1,96 @@ +Check out what our clients think of our work!<\/p>\n" + }, + "custom_css_post_id": -1 + }, + "headstart": { + "mapped_id_options": [], + "mapped_id_theme_mods": [ + "lodestar_panel1" + ], + "keep_submenu_items": true + } + }, + "widgets": [ + { + "id": "search-2", + "id_base": "search", + "settings": { + "title": "Search" + }, + "sidebar": "sidebar-1", + "position": 0 + } + ], + "content": [ + { + "post_title": "Contact", + "post_content": "[contact-form][contact-field label=\"Name\" type=\"name\" required=\"1\"\/][contact-field label=\"Email\" type=\"email\" required=\"1\"\/][contact-field label=\"Comment\" type=\"textarea\" required=\"1\"\/][\/contact-form]", + "post_status": "publish", + "menu_order": 3, + "comment_status": "closed", + "ping_status": "closed", + "post_type": "page", + "hs_custom_meta": "_hs_contact_page", + "hs_sharing": 0, + "hs_like_status": 0, + "attachment_url": "https:\/\/headstartdata.files.wordpress.com\/2016\/06\/person-smartphone-office-table.jpeg", + "hs_old_id": 101 + }, + { + "post_title": "The Journey Begins", + "post_content": "Thanks for joining me!
Good company in a journey makes the way seem shorter. — Izaak Walton<\/blockquote>\"post\"", + "post_status": "publish", + "comment_status": "open", + "ping_status": "open", + "post_type": "post", + "hs_custom_meta": "_hs_first_post", + "hs_sharing": 0, + "hs_like_status": 0, + "hs_old_id": 102 + }, + { + "post_title": "Home", + "post_content": "Welcome to my site!", + "post_status": "publish", + "menu_order": 1, + "comment_status": "closed", + "ping_status": "closed", + "post_type": "page", + "hs_custom_meta": "_hs_front_page", + "hs_sharing": 0, + "hs_like_status": 0, + "attachment_url": "https:\/\/headstartdata.files.wordpress.com\/2017\/03\/pexels-photo.jpg", + "page_template": "default", + "hs_old_id": 103 + }, + { + "post_title": "Blog", + "post_content": "", + "post_status": "publish", + "menu_order": 4, + "comment_status": "closed", + "ping_status": "closed", + "post_type": "page", + "hs_custom_meta": "_hs_blog_page", + "hs_sharing": 0, + "hs_like_status": 0, + "attachment_url": "https:\/\/headstartdata.files.wordpress.com\/2017\/03\/pexels-photo-57690.jpg", + "hs_old_id": 104 + } + ] +} \ No newline at end of file diff --git a/lodestar/inc/jetpack-fonts.php b/lodestar/inc/jetpack-fonts.php new file mode 100644 index 000000000..8c11ad368 --- /dev/null +++ b/lodestar/inc/jetpack-fonts.php @@ -0,0 +1,367 @@ + 'font-family', 'value' => '"Karla", "Helvetica Neue", helvetica, arial, sans-serif' ), + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h1, + h2, + h3, + h4, + h5, + h6', + array( + array( 'property' => 'font-family', 'value' => '"Work Sans", "Helvetica Neue", helvetica, arial, sans-serif' ), + array( 'property' => 'font-weight', 'value' => '800' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h1', + array( + array( 'property' => 'font-size', 'value' => '30px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h2', + array( + array( 'property' => 'font-size', 'value' => '26px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h3', + array( + array( 'property' => 'font-size', 'value' => '22px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h4', + array( + array( 'property' => 'font-size', 'value' => '18px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h5', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h6', + array( + array( 'property' => 'font-size', 'value' => '14px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + 'cite, + dfn, + em, + i', + array( + array( 'property' => 'font-style', 'value' => 'italic' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + 'pre', + array( + array( 'property' => 'font-family', 'value' => '"Courier 10 Pitch", Courier, monospace' ), + array( 'property' => 'font-size', 'value' => '15px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + 'code, + kbd, + tt, + var', + array( + array( 'property' => 'font-family', 'value' => 'Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace' ), + array( 'property' => 'font-size', 'value' => '15px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '#infinite-handle span button, + #infinite-handle span button:focus, + #infinite-handle span button:hover, + button, + input[type="button"], + input[type="reset"], + input[type="submit"]', + array( + array( 'property' => 'font-size', 'value' => '14px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + 'dt', + array( + array( 'property' => 'font-weight', 'value' => 'bold' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.site-title', + array( + array( 'property' => 'font-family', 'value' => '"Work Sans", "Helvetica Neue", helvetica, arial, sans-serif' ), + array( 'property' => 'font-size', 'value' => '30px' ), + array( 'property' => 'font-weight', 'value' => '800' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.site-description', + array( + array( 'property' => 'font-size', 'value' => '18px' ), + array( 'property' => 'font-family', 'value' => '"Karla", "Helvetica Neue", helvetica, arial, sans-serif' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.menu-toggle', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.lodestar-intro .entry-content', + array( + array( 'property' => 'font-size', 'value' => '20px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.nav-subtitle', + array( + array( 'property' => 'font-weight', 'value' => 'bold' ), + array( 'property' => 'font-weight', 'value' => '800' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.entry-author h2, + .entry-author h3', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.project-terms-intro', + array( + array( 'property' => 'font-weight', 'value' => 'bold' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.comments-title', + array( + array( 'property' => 'font-size', 'value' => '24px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.comment-awaiting-moderation, + .no-comments', + array( + array( 'property' => 'font-style', 'value' => 'italic' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h2.widget-title', + array( + array( 'property' => 'font-size', 'value' => '18px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'placeholder', + '.widget_goodreads div[class^="gr_custom_author"]', + array( + array( 'property' => 'font-size', 'value' => '12px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.widget-grofile h4', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.entry-content div#jp-relatedposts h3.jp-relatedposts-headline, + .entry-content div.sharedaddy h3, + .entry-content div.sharedaddy h3.sd-title', + array( + array( 'property' => 'font-family', 'value' => '"Karla", "Helvetica Neue", helvetica, arial, sans-serif' ), + array( 'property' => 'font-weight', 'value' => 'normal' ), + array( 'property' => 'font-size', 'value' => '14px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.entry-content div#jp-relatedposts h3.jp-relatedposts-headline em', + array( + array( 'property' => 'font-weight', 'value' => 'normal' ), + ) + ); + + /* WooCommerce */ + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'ul.products li.product .woocommerce-loop-category__title, + ul.products li.product .woocommerce-loop-product__title', + array( + array( 'property' => 'font-family', 'value' => '"Karla", "Helvetica Neue", helvetica, arial, sans-serif' ), + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.site-header-cart, + .woocommerce-checkout-payment .payment_box, + .woocommerce-breadcrumb, + .single-product div.product .product_meta span:not(.sku)', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.woocommerce-account .woocommerce-MyAccount-navigation ul li.is-active a, + .woocommerce-Button, + .woocommerce-Button:visited, + .woocommerce-Button:hover, + .woocommerce-page .button, + .woocommerce-page .button:visited, + .site-header-cart .button, + .site-header-cart .button:visited', + array( + array( 'property' => 'font-size', 'value' => '14px' ), + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button', + array( + array( 'property' => 'font-size', 'value' => '14px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + /* Media Queries */ + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h1', + array( + array( 'property' => 'font-size', 'value' => '34px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h2', + array( + array( 'property' => 'font-size', 'value' => '28px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h3', + array( + array( 'property' => 'font-size', 'value' => '24px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h4', + array( + array( 'property' => 'font-size', 'value' => '20px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h5', + array( + array( 'property' => 'font-size', 'value' => '16px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + 'h6', + array( + array( 'property' => 'font-size', 'value' => '14px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.site-title', + array( + array( 'property' => 'font-size', 'value' => '60px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'headings', + '.site-description', + array( + array( 'property' => 'font-size', 'value' => '24px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + TypekitTheme::add_font_category_rule( $category_rules, 'body-text', + '.lodestar-intro .entry-content', + array( + array( 'property' => 'font-size', 'value' => '30px' ), + ), + array( + '(min-width: 60em)' + ) + ); + + return $category_rules; +} ); diff --git a/lodestar/inc/jetpack.php b/lodestar/inc/jetpack.php new file mode 100644 index 000000000..e367d9e5c --- /dev/null +++ b/lodestar/inc/jetpack.php @@ -0,0 +1,261 @@ + 'main', + 'render' => 'lodestar_infinite_scroll_render', + 'footer' => 'page', + 'wrapper' => false, + 'footer_widgets' => array( 'sidebar-2', 'sidebar-3', 'sidebar-4' ), + ) ); + + // Add theme support for Responsive Videos. + add_theme_support( 'jetpack-responsive-videos' ); + + // Add theme support for Social Menus + add_theme_support( 'jetpack-social-menu', 'svg' ); + + // Add theme support for testimonials + add_theme_support( 'jetpack-testimonial' ); + + /* + * Adding theme support for Jetpack Portfolio CPT. + * Not essential to add this but this does a few nice things. + * 1. Turns the CPT on when the theme is activated. + * 2. Displays an admin notice if the option is turned off, but the theme is activated. + * 3. When the theme is switched away, if no CPTs are populated, it turns it back off. + */ + add_theme_support( 'jetpack-portfolio', array( + 'title' => true, + 'content' => true, + 'featured-image' => true, + ) ); + + //Add theme support for Content Options. + add_theme_support( 'jetpack-content-options', array( + 'blog-display' => 'content', + 'author-bio' => true, + 'post-details' => array( + 'stylesheet' => 'lodestar-style', + 'date' => '.posted-on', + 'categories' => '.cat-links', + 'tags' => '.tags-links', + 'author' => '.byline', + ), + 'featured-images' => array( + 'archive' => true, + 'post' => true, + 'page' => true, + ), + ) ); +} +add_action( 'after_setup_theme', 'lodestar_jetpack_setup' ); + +/** + * Show/Hide Featured Image outside of the loop. + */ +function lodestar_jetpack_featured_image_display() { + if ( ! function_exists( 'jetpack_featured_images_remove_post_thumbnail' ) ) { + return true; + } else { + $options = get_theme_support( 'jetpack-content-options' ); + $featured_images = ( ! empty( $options[0]['featured-images'] ) ) ? $options[0]['featured-images'] : null; + + $settings = array( + 'post-default' => ( isset( $featured_images['post-default'] ) && false === $featured_images['post-default'] ) ? '' : 1, + 'page-default' => ( isset( $featured_images['page-default'] ) && false === $featured_images['page-default'] ) ? '' : 1, + ); + + $settings = array_merge( $settings, array( + 'post-option' => get_option( 'jetpack_content_featured_images_post', $settings['post-default'] ), + 'page-option' => get_option( 'jetpack_content_featured_images_page', $settings['page-default'] ), + ) ); + + if ( ( ! $settings['post-option'] && is_single() ) + || ( ! $settings['page-option'] && is_singular() && is_page() ) ) { + return false; + } else { + return true; + } + } +} + +/** + * Custom render function for Infinite Scroll. + */ +function lodestar_infinite_scroll_render() { + + if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) { + lodestar_woocommerce_product_columns_wrapper(); + woocommerce_product_loop_start(); + } + + while ( have_posts() ) { + the_post(); + if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) { + wc_get_template_part( 'content', 'product' ); + } else if ( is_search() ) { + get_template_part( 'components/post/content', 'search' ); + } else if ( is_post_type_archive( 'jetpack-portfolio' ) ) { + get_template_part( 'components/features/portfolio/content', 'portfolio' ); + } else if ( is_post_type_archive( 'jetpack-testimonial' ) ) { + get_template_part( 'components/features/testimonials/content', 'testimonials' ); + } else { + get_template_part( 'components/post/content', get_post_format() ); + } + } + + if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) { + woocommerce_product_loop_end(); + lodestar_woocommerce_product_columns_wrapper_close(); + } + +} + +/** + * Return early if Social Menu is not available + */ +function lodestar_social_menu() { + if ( ! function_exists( 'jetpack_social_menu' ) ) { + return; + } else { + jetpack_social_menu(); + } +} + +/** +* Return early if Author Bio is not available. +*/ +function lodestar_author_bio() { + if ( ! function_exists( 'jetpack_author_bio' ) ) { + return; + } else { + jetpack_author_bio(); + } +} + +/** +* Author Bio Avatar Size. +*/ +function lodestar_author_bio_avatar_size() { + return 100; +} +add_filter( 'jetpack_author_bio_avatar_size', 'lodestar_author_bio_avatar_size' ); + +/** + * Portfolio Title. + */ +function lodestar_portfolio_title( $before = '', $after = '' ) { + $jetpack_portfolio_title = get_option( 'jetpack_portfolio_title' ); + $title = ''; + + if ( is_post_type_archive( 'jetpack-portfolio' ) ) { + if ( isset( $jetpack_portfolio_title ) && '' != $jetpack_portfolio_title ) { + $title = esc_html( $jetpack_portfolio_title ); + } else { + $title = post_type_archive_title( '', false ); + } + } elseif ( is_tax( 'jetpack-portfolio-type' ) || is_tax( 'jetpack-portfolio-tag' ) ) { + $title = single_term_title( '', false ); + } + + echo $before . $title . $after; +} + +/** + * Portfolio Content. + */ +function lodestar_portfolio_content( $before = '', $after = '' ) { + $jetpack_portfolio_content = get_option( 'jetpack_portfolio_content' ); + + if ( is_tax() && get_the_archive_description() ) { + echo $before . get_the_archive_description() . $after; + } else if ( isset( $jetpack_portfolio_content ) && '' != $jetpack_portfolio_content ) { + $content = convert_chars( convert_smilies( wptexturize( stripslashes( wp_filter_post_kses( addslashes( $jetpack_portfolio_content ) ) ) ) ) ); + echo $before . $content . $after; + } +} + +/** + * Porfolio Archive Navigation + */ +function lodestar_project_terms() { + + $terms = get_terms( + 'jetpack-portfolio-type', + array( + 'number' => 20, + 'orderby' => 'count', + 'order' => 'DESC', + ) + ); + + // Highlight currently selected page. + $class = 'current-type'; + + // Get the term for the current page. + $current_term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); + + // We're on a project category page, and not the main portfolio page, so reset the class. + if ( $current_term ) { + $class = ''; + } + + // Make sure the term exists and has some results. + if ( ! is_wp_error( $terms ) && ! empty( $terms ) ) : ?> +
+ + + + + +
    +
  • + + term_id === (int) $t->term_id ) { + $class = 'current-type'; + } ?> + +
  • name ); ?>
  • + +
+
+ term_id; + } + return implode( " ", $typeid ); +} + diff --git a/lodestar/inc/template-tags.php b/lodestar/inc/template-tags.php new file mode 100644 index 000000000..eb0be1dd7 --- /dev/null +++ b/lodestar/inc/template-tags.php @@ -0,0 +1,236 @@ +%2$s'; + if ( get_the_time( 'U' ) !== get_the_modified_time( 'U' ) ) { + $time_string = ''; + } + + $time_string = sprintf( $time_string, + esc_attr( get_the_date( 'c' ) ), + esc_html( get_the_date() ), + esc_attr( get_the_modified_date( 'c' ) ), + esc_html( get_the_modified_date() ) + ); + + // Wrap that in a link, and preface it with 'Posted on' + $posted_on = sprintf( + esc_html_x( 'Posted on %s', 'post date', 'lodestar' ), + '' . $time_string . '' + ); + + // Get the author name; wrap it in a link + $byline = sprintf( + ' %2$s', + esc_html_x( 'by', 'post author', 'lodestar' ), + '' . esc_html( get_the_author() ) . '' + ); + + // Check to make sure we have more than one category before writing to page + // Also, don't show when blog posts appear on static front page + $categories_list = get_the_category_list( $separate_meta ); + $categories = ''; + if ( $categories_list && lodestar_categorized_blog() && ! is_front_page() && 'posts' !== get_option( 'show_on_front' ) ) { + $categories = sprintf( '%1$s %2$s', esc_html_x( 'in', 'prefaces list of categories assigned to the post', 'lodestar' ), $categories_list ); // WPCS: XSS OK. + } + + // Finally, let's write all of this to the page + echo '' . $posted_on . ''; // WPCS: XSS OK. + // Make sure $categories actually exists before trying to echo. + if ( '' !== $categories ) { + echo ' ' . $categories . ''; // WPCS: XSS OK. + } +} +endif; + + +if ( ! function_exists( 'lodestar_portfolio_meta' ) ) : +/** + * Prints the portfolio Category + */ +function lodestar_portfolio_meta() { + /* translators: used between list items, there is a space after the comma */ + $separate_meta = esc_html__( ', ', 'lodestar' ); + $categories = get_the_term_list( get_the_ID(), 'jetpack-portfolio-type', esc_html_x( 'Type: ', 'prefaces list of categories assigned to post', 'lodestar' ), $separate_meta, '' ); + + echo ' ' . $categories . ''; // WPCS: XSS OK. +} +endif; + + +if ( ! function_exists( 'lodestar_edit_post_link' ) ) : +/** + * Prints the post's edit link + */ +function lodestar_edit_post_link() { + // Display 'edit' link + edit_post_link( + sprintf( + /* translators: %s: Name of current post */ + esc_html__( 'Edit %s', 'lodestar' ), + the_title( '"', '"', false ) + ), + '', + '' + ); +} +endif; + + +if ( ! function_exists( 'lodestar_entry_footer' ) ) : +/** + * Prints HTML with meta information for the categories, tags and comments. + */ +function lodestar_entry_footer() { + + /* translators: used between list items, there is a space after the comma */ + $separate_meta = esc_html__( ', ', 'lodestar' ); + + // Display Tags for posts and portfolio projects + if ( 'post' === get_post_type() ) { + /* translators: used between list items, there is a space after the comma */ + the_tags( sprintf( '%s ', esc_html__( 'Tagged', 'lodestar' ) ), $separate_meta, '' ); + } else if ( 'jetpack-portfolio' === get_post_type() ) { + $tags_list = get_the_term_list( get_the_ID(), 'jetpack-portfolio-tag', '', $separate_meta, '' ); + if ( $tags_list ) { + printf( '' . esc_html__( 'Tagged %1$s', 'lodestar' ) . '', $tags_list ); + } + } + + // Display link to comments + if ( ! is_single() && ! post_password_required() && ( comments_open() || get_comments_number() ) ) { + echo ''; + comments_popup_link( esc_html__( 'Leave a comment', 'lodestar' ), esc_html__( '1 Comment', 'lodestar' ), esc_html__( '% Comments', 'lodestar' ) ); + echo ''; + } + + lodestar_edit_post_link(); +} +endif; + + +/** + * Returns an accessibility-friendly link to edit a post or page. + * This also gives us a little context about what exactly we're editing + * (post or page?) so that users understand a bit more where they are in terms + * of the template hierarchy and their content. Helpful when/if the single-page + * layout with multiple posts/pages shown gets confusing. + */ +function lodestar_edit_link( $id ) { + if ( is_page() ) : + $type = esc_html__( 'Page', 'lodestar' ); + elseif ( get_post( $id ) ) : + $type = esc_html__( 'Post', 'lodestar' ); + endif; + $link = edit_post_link( + sprintf( + /* translators: %s: Name of current post */ + esc_html__( 'Edit %1$s %2$s', 'lodestar' ), + esc_html( $type ), + the_title( '"', '"', false ) + ), + '', + '' + ); + return $link; +} + + +/** + * Display a front page section. + * + * @param WP_Customize_Partial $partial Partial associated with a selective refresh request. + * @param integer $id Front page section to display. + */ +function lodestar_front_page_section( $partial = null, $id = 0 ) { + if ( is_a( $partial, 'WP_Customize_Partial' ) ) { + // Find out the id and set it up during a selective refresh. + global $lodestarcounter; + $id = str_replace( 'panel_', '', $partial->id ); + $lodestarcounter = $id; + } + + global $post; // Modify the global post object before setting up post data. + if ( get_theme_mod( 'panel_' . $id ) ) { + $post = get_post( get_theme_mod( 'panel_' . $id ) ); + setup_postdata( $post ); + set_query_var( 'panel', $id ); + + get_template_part( 'template-parts/page/content', 'front-page-panels' ); + + wp_reset_postdata(); + } elseif ( is_customize_preview() ) { + // The output placeholder anchor. + echo '
' . sprintf( esc_html__( 'Front Page Section %1$s Placeholder', 'lodestar' ), $id ) . '
'; + } +} + +if ( ! function_exists( 'lodestar_excerpt_more' ) && ! is_admin() ) : +/** + * Replaces "[...]" (appended to automatically generated excerpts) with ... and a 'Continue reading' link. + * + * @return string 'Continue reading' link prepended with an ellipsis. + */ +function lodestar_excerpt_more( $more ) { + $link = sprintf( '%2$s', + esc_url( get_permalink( get_the_ID() ) ), + /* translators: %s: Name of current post */ + sprintf( + wp_kses( __( 'Continue reading %s ', 'lodestar' ), array( 'span' => array( 'class' => array() ) ) ), + '' . get_the_title( get_the_ID() ) . '' + ) + ); + return ' … ' . $link; +} +add_filter( 'excerpt_more', 'lodestar_excerpt_more' ); +endif; + +/** + * Returns true if a blog has more than 1 category. + * + * @return bool + */ +function lodestar_categorized_blog() { + $category_count = get_transient( 'lodestar_categories' ); + if ( false === $category_count ) { + // Create an array of all the categories that are attached to posts. + $categories = get_categories( array( + 'fields' => 'ids', + 'hide_empty' => 1, + // We only need to know if there is more than one category. + 'number' => 2, + ) ); + // Count the number of categories that are attached to the posts. + $category_count = count( $categories ); + set_transient( 'lodestar_categories', $category_count ); + } + return $category_count > 1; +} +/** + * Flush out the transients used in twentyseventeen_categorized_blog. + */ +function lodestar_category_transient_flusher() { + if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { + return; + } + // Like, beat it. Dig? + delete_transient( 'lodestar_categories' ); +} +add_action( 'edit_category', 'lodestar_category_transient_flusher' ); +add_action( 'save_post', 'lodestar_category_transient_flusher' ); diff --git a/lodestar/inc/woocommerce.php b/lodestar/inc/woocommerce.php new file mode 100644 index 000000000..c400920bc --- /dev/null +++ b/lodestar/inc/woocommerce.php @@ -0,0 +1,300 @@ + 830, + 'single_image_width' => 894, + ) ); + add_theme_support( 'wc-product-gallery-zoom' ); + add_theme_support( 'wc-product-gallery-lightbox' ); + add_theme_support( 'wc-product-gallery-slider' ); +} + +add_action( 'after_setup_theme', 'lodestar_woocommerce_setup' ); + +/** + * WooCommerce specific scripts & stylesheets + * + * @return void + */ +function lodestar_woocommerce_scripts() { + wp_enqueue_style( 'lodestar-woocommerce-style', get_template_directory_uri() . '/woocommerce.css' ); + wp_style_add_data( 'lodestar-woocommerce-style', 'rtl', 'replace' ); +} + +add_action( 'wp_enqueue_scripts', 'lodestar_woocommerce_scripts' ); + +/** + * Disable the default WooCommerce stylesheet + * + * Removing the default WooCommerce stylesheet and enqueing your own will + * protect you during WooCommerce core updates. + * + * See: https://docs.woocommerce.com/document/disable-the-default-stylesheet/ + */ +add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' ); + +/** + * Add 'woocommerce-active' class to the body tag + * + * @param array $classes css classes applied to the body tag. + * @return array $classes modified to include 'woocommerce-active' class + */ +function lodestar_woocommerce_active_body_class( $classes ) { + $classes[] = 'woocommerce-active'; + + return $classes; +} + +add_filter( 'body_class', 'lodestar_woocommerce_active_body_class' ); + +/** + * Products per page + * + * @return integer number of products + */ +function lodestar_woocommerce_products_per_page() { + return intval( apply_filters( 'lodestar_woocommerce_products_per_page', 12 ) ); +} + +add_filter( 'loop_shop_per_page', 'lodestar_woocommerce_products_per_page' ); + +/** + * Product gallery thumnbail columns + * + * @return integer number of columns + */ +function lodestar_woocommerce_thumbnail_columns() { + return intval( apply_filters( 'lodestar_woocommerce_product_thumbnail_columns', 4 ) ); +} + +add_filter( 'woocommerce_product_thumbnails_columns', 'lodestar_woocommerce_thumbnail_columns' ); + +/** + * Default loop columns on product archives + * + * @return integer products per row + */ +function lodestar_woocommerce_loop_columns() { + return intval( apply_filters( 'lodestar_woocommerce_loop_columns', 3 ) ); +} + +add_filter( 'loop_shop_columns', 'lodestar_woocommerce_loop_columns' ); + +/** + * Related Products Args + * + * @param array $args related products args. + * @return array $args related products args + */ +function lodestar_woocommerce_related_products_args( $args ) { + $args = apply_filters( 'lodestar_woocommerce_related_products_args', array( + 'posts_per_page' => 3, + 'columns' => 3, + ) ); + + return $args; +} + +add_filter( 'woocommerce_output_related_products_args', 'lodestar_woocommerce_related_products_args' ); + +if ( ! function_exists( 'lodestar_woocommerce_product_columns_wrapper' ) ) { + /** + * Product columns wrapper + * + * @return void + */ + function lodestar_woocommerce_product_columns_wrapper() { + $columns = lodestar_woocommerce_loop_columns(); + echo '
'; + } +} + +add_action( 'woocommerce_before_shop_loop', 'lodestar_woocommerce_product_columns_wrapper', 40 ); + +if ( ! function_exists( 'lodestar_woocommerce_product_columns_wrapper_close' ) ) { + /** + * Product columns wrapper close + * + * @return void + */ + function lodestar_woocommerce_product_columns_wrapper_close() { + echo '
'; + } +} + +add_action( 'woocommerce_after_shop_loop', 'lodestar_woocommerce_product_columns_wrapper_close', 40 ); + +if ( ! function_exists( 'lodestar_woocommerce_wrapper_before' ) ) { + /** + * Before Content + * Wraps all WooCommerce content in wrappers which match the theme markup + * + * @return void + */ + function lodestar_woocommerce_wrapper_before() { + ?> +
+
+
+
+ +
+
+
+ + + +
+ + + cart->get_cart_subtotal() ); ?> cart->get_cart_contents_count(), 'lodestar' ), WC()->cart->get_cart_contents_count() ) );?> + + +
    +
  • + +
  • +
  • + +
  • +
+ get( 'page_id' ); + $is_static_front_page = 'page' === get_option( 'show_on_front' ); + + if ( $is_static_front_page && $front_page_id === $current_page_id ) { + $is_shop_page = ( $current_page_id === wc_get_page_id( 'shop' ) ) ? true : false; + } else { + $is_shop_page = is_shop(); + } + + return $is_shop_page; +} + +/** + * Jetpack infinite scroll duplicates posts where orderby is anything other than modified or date + * This filter offsets the products returned by however many are displayed per page + * + * @link https://github.com/Automattic/jetpack/issues/1135 + * @param array $args infinite scroll args. + * @return array infinite scroll args. + */ +function lodestar_woocommerce_jetpack_duplicate_products( $args ) { + if ( ( isset( $args['post_type'] ) && 'product' === $args['post_type'] ) || ( isset( $args['taxonomy'] ) && 'product_cat' === $args['taxonomy'] ) ) { + $args['offset'] = $args['posts_per_page'] * $args['paged']; + } + + return $args; +} +add_filter( 'infinite_scroll_query_args', 'lodestar_woocommerce_jetpack_duplicate_products', 100 ); + +/** + * Override number of products per page in Jetpack infinite scroll. + * + * @param array $args infinite scroll args. + * @return array infinite scroll args. + */ +function lodestar_woocommerce_jetpack_products_per_page( $args ) { + if ( is_array( $args ) && ( lodestar_woocommerce_is_shop_page() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) { + $args['posts_per_page'] = lodestar_woocommerce_products_per_page(); + } + + return $args; +} +add_filter( 'infinite_scroll_settings', 'lodestar_woocommerce_jetpack_products_per_page' ); diff --git a/lodestar/inc/wpcom-colors.php b/lodestar/inc/wpcom-colors.php new file mode 100644 index 000000000..da106a487 --- /dev/null +++ b/lodestar/inc/wpcom-colors.php @@ -0,0 +1,478 @@ + a.remove, + table.cart .product-remove a', 'color', 'bg', 12 ), + + array( 'input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="number"], + input[type="tel"], + input[type="range"], + input[type="date"], + input[type="month"], + input[type="week"], + input[type="time"], + input[type="datetime"], + input[type="datetime-local"], + input[type="color"], + textarea', 'color', '#fff' ), + + array( 'input[type="text"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="password"]:focus, + input[type="search"]:focus, + input[type="number"]:focus, + input[type="tel"]:focus, + input[type="range"]:focus, + input[type="date"]:focus, + input[type="month"]:focus, + input[type="week"]:focus, + input[type="time"]:focus, + input[type="datetime"]:focus, + input[type="datetime-local"]:focus, + input[type="color"]:focus, + textarea:focus', 'color', '#fff' ), + + array( '.site-header, + .header-top, + .main-navigation ul ul ul, + .main-navigation ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul a:hover, + .main-navigation ul ul a:focus, + .main-navigation ul ul li:hover, + .main-navigation ul ul li:focus, + .main-navigation ul ul ul ul a:hover, + .main-navigation ul ul ul ul a:focus, + .main-navigation ul ul ul ul li:hover, + .main-navigation ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul li:focus, + .site-info, + button, + button:hover, + button:focus, + input[type="button"], + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"], + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"], + input[type="submit"]:hover, + input[type="submit"]:focus, + #infinite-handle span button, + #infinite-handle span button:hover, + #infinite-handle span button:focus', 'background-color' ), + + // Background - contrast against bg + array( '.main-navigation li:hover, + .main-navigation li:focus, + .main-navigation a:hover, + .main-navigation a:focus, + .main-navigation ul ul, + .main-navigation ul ul ul ul, + .main-navigation ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul a:hover, + .main-navigation ul ul ul a:focus, + .main-navigation ul ul ul li:hover, + .main-navigation ul ul ul li:focus, + .main-navigation ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul li:focus, + .main-navigation ul, + .main-navigation ul li.current_page_item > a, + .main-navigation ul li.current-menu-item > a, + .main-navigation ul li.current_page_ancestor > a', 'background-color', 'txt', 1.5 ), + + // WooCommerce + array( '.star-rating span:before, + span.price, + p.price, + span.price ins, + p.price ins, + .widget_layered_nav_filters ul li a:before', 'color', 'bg' ), + + array( '.woocommerce-account .woocommerce-MyAccount-navigation ul li.is-active a, + .woocommerce-page .button, + .woocommerce-page .button:visited, + .woocommerce-page .hover, + .woocommerce-page .button:hover, + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button, + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button:hover, + .site-header-cart .button, + .site-header-cart .button:visited', 'background-color' ), + + array( '.site-header-cart .widget_shopping_cart', 'background-color', 'txt', 1.5 ), + + array( '.onsale, + table.cart .product-remove a:hover, + .woocommerce-message:before, + .woocommerce-info:before, + .woocommerce-error:before, + .woocommerce-noreviews:before, + p.no-comments:before, + .single-product div.product .woocommerce-product-gallery .woocommerce-product-gallery__trigger:before', 'background-color', 'bg', 1.5 ), + + array( '.woocommerce-message, + .woocommerce-info, + .woocommerce-error, + .woocommerce-noreviews, + p.no-comments', 'border-color', 'bg' ), +), +__( 'Text' ) ); + + +add_color_rule( 'link', '#999999', array( + // Color - contrast against bg + array( 'a, + a:visited, + .entry-title a:hover, + .entry-title a:focus', 'color', 'bg' ), + + array( 'button, + button:hover, + button:focus, + input[type="button"], + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"], + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"], + input[type="submit"]:hover, + input[type="submit"]:focus, + #infinite-handle span button, + #infinite-handle span button:hover, + #infinite-handle span button:focus', 'color', 'txt' ), + + // Background - contrast against bg + array( '.site-footer .jetpack-social-navigation a, + .site-footer .jetpack-social-navigation a:hover, + .site-footer .jetpack-social-navigation a:focus', + 'background-color', 'bg' ), + + // WooCommerce + array( '.widget_price_filter .ui-slider .ui-slider-range, + .widget_price_filter .ui-slider .ui-slider-handle', 'background-color', 'bg' ), + + array( '.woocommerce-page .button, + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button, + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button:hover', 'color', 'txt' ), + +), +__( 'Link' ) ); + + +/* Extra Colour Rules */ +add_color_rule( 'extra', '#ffffff', array( + // Color - contrast against bg + array( '.site-footer .widget-area', 'color', 'bg' ), + + array( 'input[type="text"]:focus, + input[type="email"]:focus, + input[type="url"]:focus, + input[type="password"]:focus, + input[type="search"]:focus, + input[type="number"]:focus, + input[type="tel"]:focus, + input[type="range"]:focus, + input[type="date"]:focus, + input[type="month"]:focus, + input[type="week"]:focus, + input[type="time"]:focus, + input[type="datetime"]:focus, + input[type="datetime-local"]:focus, + input[type="color"]:focus, + textarea:focus, + .post-navigation .nav-links, + .entry-author', 'border-color', 'bg', 4 ), + + // Color - contrast against txt + array( '.header-top, + .header-top a, + .header-top a:visited, + .header-top a:hover, + .header-top a:focus, + .site-top-content span.site-top-content-2, + .menu-toggle, + .menu-toggle:hover, + .menu-toggle:focus, + .site-info, + .site-info a, + .site-info:visited', 'color', 'txt', 14 ), + + // Border - contrast against txt + array( '.menu-toggle, + .menu-toggle:hover, + .menu-toggle:focus', 'border-color', 'txt' ), + + // Woocommerce + array( '.woocommerce-message:before, + .woocommerce-info:before, + .woocommerce-error:before, + .woocommerce-noreviews:before, + p.no-comments:before', 'color', 'txt' ), + + array( '.site-header-cart .cart-contents .count', 'color', 'txt', 14 ), + array( '.onsale', 'color', 'txt' ), + +) ); + +add_color_rule( 'extra', '#bbbbbb', array( + // Border - low contrast against bg + array( 'input[type="text"], + input[type="email"], + input[type="url"], + input[type="password"], + input[type="search"], + input[type="number"], + input[type="tel"], + input[type="range"], + input[type="date"], + input[type="month"], + input[type="week"], + input[type="time"], + input[type="datetime"], + input[type="datetime-local"], + input[type="color"], + textarea, + select', 'border-color', 'bg', 5 ), + + // Background - low contrast against bg + array( 'hr', 'background-color', 'bg', 3 ), + + // Border - contrast against bg + array( 'td, + th, + blockquote, + .lodestar-front-page article:not(.has-post-thumbnail), + .jetpack-testimonial .entry-content, + .widget ul li, + .widget_product_categories ul li li, + .single-product div.product .woocommerce-tabs .woocommerce-Tabs-panel, + .single-product div.product .woocommerce-tabs ul.tabs li, + .widget .tagcloud a:hover, + .widget .tagcloud a:focus, + .widget.widget_tag_cloud a:hover, + .widget.widget_tag_cloud a:focus, + .wp_widget_tag_cloud a:hover, + .wp_widget_tag_cloud a:focus, + .jetpack-social-navigation, + .woocommerce-checkout-payment ul.payment_methods, + .woocommerce-checkout-payment .form-row', 'border-color', 'bg', 1.5 ), +) ); + +add_color_rule( 'extra', '#555555', array( + // Colour - contrast against bg + array( '.entry-content div.sharedaddy h3, + .entry-content div.sharedaddy h3.sd-title, + .entry-content div#jp-relatedposts h3.jp-relatedposts-headline', 'color', 'bg' ), + +) ); + +add_color_rule( 'extra', '#111111', array( + // Background + array( '.main-navigation ul', 'background' ), +) ); + +/* Extra CSS */ +function lodestar_extra_css() { ?> + + body .header-top a:hover, + body .header-top a:focus, + .menu-toggle:hover, + .menu-toggle:focus, + .site-top-content-2, + .site-footer .jetpack-social-navigation a:hover, + .site-footer .jetpack-social-navigation a:focus { + opacity: 0.8; + } + + body .header-top #site-navigation a:hover, + body .header-top #site-navigation a:focus { + opacity: 1.0; + } + + body .site-branding, + body .site-branding a { + color: #fff; + } + + body .site-description, + body .site-description a { + color: #ccc; + } + + pre, + mark, + ins { + background: rgba(0,0,0,0.15); + } + + .entry-content h1, + .entry-content h2, + .panel-content .entry-title, + .entry-meta { + opacity: 0.6; + } + + .lodestar-intro .entry-content { + opacity: 0.7; + } + + .entry-content h5, + .entry-content h6 { + opacity: 0.8; + } + + button:hover, + button:focus, + input[type="button"]:hover, + input[type="button"]:focus, + input[type="reset"]:hover, + input[type="reset"]:focus, + input[type="submit"]:hover, + input[type="submit"]:focus, + #infinite-handle span button:hover, + #infinite-handle span button:focus, + .woocommerce-page .button:hover, + .woocommerce-page .button:focus, + .site-header-cart .button:hover, + .site-header-cart .button:focus { + opacity: 0.8; + } + + table.shop_table { + border: none; + } + + table.shop_table th, + .woocommerce-checkout-payment .payment_box { + background: rgba(0,0,0,0.15); + } + + @media only screen and ( max-width: 59.9999em ) { + .main-navigation li:hover, + .main-navigation li:focus, + .main-navigation a:hover, + .main-navigation a:focus, + .main-navigation ul ul { + background: transparent !important; + } + } + + @media only screen and ( min-width: 60em ) { + .main-navigation ul, + #top-menu { + background-color: transparent; + } + } + + 'ffffff', + 'border' => 'dddddd', + 'text' => '333333', + 'link' => '999999', + 'url' => '999999', + ); + } + + // Add print stylesheet. + add_theme_support( 'print-style' ); +} +add_action( 'after_setup_theme', 'lodestar_wpcom_setup' ); + +/** + * Enqueue wp.com-specific styles + */ +function lodestar_wpcom_styles() { + wp_enqueue_style( 'lodestar-wpcom', get_template_directory_uri() . '/inc/wpcom-style.css', '20160708' ); +} +add_action( 'wp_enqueue_scripts', 'lodestar_wpcom_styles' ); + +/** + * Make sure any old assigned Jetpack logos are moved over to the Core logo spot. + */ +function lodestar_move_logo() { + if ( current_theme_supports( 'custom-logo' ) && ! get_theme_mod( 'custom_logo' ) && $jp_logo = get_option( 'site_logo' ) ) { + set_theme_mod( 'custom_logo', $jp_logo['id'] ); + delete_option( 'site_logo' ); + } +} +add_action( 'init', 'lodestar_move_logo' ); diff --git a/lodestar/index.php b/lodestar/index.php new file mode 100644 index 000000000..1eeac97c3 --- /dev/null +++ b/lodestar/index.php @@ -0,0 +1,56 @@ + +
+
+
+ + + +
+

+
+ + +
+
+ +
+Get started here." +msgstr "Bereit, deinen ersten Beitrag zu veröffentlichen? Erste Schritte." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "Nicht gefunden" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "Weiterlesen %s " + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Panel %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Menü" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Menü oben" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "Theme: %1$s von %2$s." + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "Mit freundlicher Unterstützung von %s" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "https://wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Footer-Bild" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Seiten:" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Kommentare sind geschlossen." + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Ein Kommentar zu „%2$s“" +msgstr[1] "%1$s Kommentare zu „%2$s“" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Referenzen" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "Vielleicht findest Du etwas in den monatlichen Archiven." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "Oft verwendete Kategorien" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Sieht so aus, als ob an dieser Stelle nichts gefunden wird. Vielleicht hilft einer der Links unten oder eine Suche?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "Diese Seite konnte leider nicht gefunden werden." diff --git a/lodestar/languages/es.mo b/lodestar/languages/es.mo new file mode 100644 index 000000000..64c186d10 Binary files /dev/null and b/lodestar/languages/es.mo differ diff --git a/lodestar/languages/es.po b/lodestar/languages/es.po new file mode 100644 index 000000000..aa7e5e945 --- /dev/null +++ b/lodestar/languages/es.po @@ -0,0 +1,340 @@ +# Translation of WordPress.com - Themes - Lodestar in Spanish (Spain) +# This file is distributed under the same license as the WordPress.com - Themes - Lodestar package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-01-23 07:34:22+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: es\n" +"Project-Id-Version: WordPress.com - Themes - Lodestar\n" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "Proyectos anteriores" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "Plantilla de Portfolio" + +#. Description of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Lodestar is a trendy one-page theme designed with startups and small business ventures in mind." +msgstr "Lodestar es un theme moderno de tipo one-page, diseñado teniendo startups y pequeños negocios en mente." + +#: single.php:23 +msgid "Next Post" +msgstr "Entrada siguiente" + +#: single.php:22 +msgid "Previous Post" +msgstr "Entrada anterior" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "Siguiente proyecto" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "Proyecto anterior" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "Resultados de búsqueda por: %s" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "Blanco, rojo y gris" + +#: inc/wpcom-colors.php:472 +msgid "Beige, Blue, and Orange" +msgstr "Beis, azul y naranja" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "Blanco, marrón y azul " + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "Gris claro y rosa" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "Azul" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "Gris y verde" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "Enlace" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "Texto" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "Fondo" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "Editar %1$s %2$s" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "Entrada" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "Página" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "% comentarios" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "1 comentario" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "Deja un comentario" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "Etiquetado como %1$s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "Etiquetado" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "Editar %s" + +#: inc/template-tags.php:70 +msgctxt "prefaces list of categories assigned to post" +msgid "Type: " +msgstr "Tipo:" + +#: inc/template-tags.php:50 +msgctxt "prefaces list of categories assigned to the post" +msgid "in" +msgstr "en" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "por" + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "Publicado el %s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr ", " + +#: inc/jetpack.php:243 +msgid "All" +msgstr "Todos" + +#: inc/jetpack.php:239 +msgid "Types:" +msgstr "tipos" + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "Panel 4" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "Panel 3" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "Panel 2" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "Dos columnas" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "Una columna" + +#: inc/customizer.php:80 inc/customizer.php:114 inc/customizer.php:148 +#: inc/customizer.php:182 +msgid "Panel Layout" +msgstr "Diseño del panel " + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "Contenido del panel" + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "Panel 1" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "Texto 2 de la parte superior de la cabecera." + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "Texto 1 de la parte superior de la cabecera." + +#: inc/customizer.php:30 +msgid "Add a short bit of content to the top of your website." +msgstr "Añadir un texto corto en la parte superior de su página web." + +#: inc/customizer.php:28 +msgid "Header Top Text" +msgstr "Texto de la parte superior de la cabecera." + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "Configurar las opciones del tema" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "Opciones del tema" + +#: header.php:25 +msgid "Skip to content" +msgstr "Saltar al contenido" + +#: functions.php:174 +msgid "Footer 3" +msgstr "Pie de página 3" + +#: functions.php:164 +msgid "Footer 2" +msgstr "Pie de página 2" + +#: functions.php:154 +msgid "Footer 1" +msgstr "Pie de página 1" + +#: functions.php:144 +msgid "Sidebar" +msgstr "Barra lateral" + +#. Translators: If there are characters in your language that are not supported +#. by Karla, translate this to 'off'. Do not translate into your own language. +#: functions.php:113 +msgctxt "Karla font: on or off" +msgid "on" +msgstr "activar" + +#: functions.php:57 +msgid "Top" +msgstr "Arriba" + +#: front-page.php:61 +msgid "Panel %1$s Placeholder" +msgstr "Marcador de posición de panel %1$s" + +#: components/post/content-none.php:29 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Parece que no podemos encontrar lo que estás buscando. Tal vez la búsqueda te pueda ayudar." + +#: components/post/content-none.php:23 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Lo siento pero no hay nada que se ajuste a tus criterios de búsqueda. Por favor, inténtalo de nuevo con palabras claves distintas." + +#: components/post/content-none.php:19 +msgid "Ready to publish your first post? Get started here." +msgstr "¿Estás listo para publicar tu primera entrada? Empieza aquí." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "No se ha encontrado nada" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "Continuar leyendo %s " + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Panel %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Menú" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Menú de la parte de arriba" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "Tema: %1$s por %2$s." + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "Orgullosamente ofrecido por %s" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "http://wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Imagen pie de página" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Páginas:" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Los comentarios están cerrados." + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Un comentario sobre “%2$s”" +msgstr[1] "%1$s comentarios sobre “%2$s”" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Testimonios" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "Intenta buscar en los archivos por mes." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "Categorías más usadas" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Parece que no se encontró nada en esta ubicación. ¿Quizás pruebes con uno de los enlaces de abajo o una búsqueda?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "¡Vaya! No se pudo encontrar esa página." diff --git a/lodestar/languages/lodestar.pot b/lodestar/languages/lodestar.pot new file mode 100644 index 000000000..bad9b52db --- /dev/null +++ b/lodestar/languages/lodestar.pot @@ -0,0 +1,423 @@ +# Copyright (C) 2018 Automattic +# This file is distributed under the GNU General Public License v2 or later. +msgid "" +msgstr "" +"Project-Id-Version: Lodestar 1.0.4\n" +"Report-Msgid-Bugs-To: http://wordpress.org/support/theme/lodestar\n" +"POT-Creation-Date: 2018-01-23 03:00:43+00:00\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "" + +#: 404.php:20 +msgid "" +"It looks like nothing was found at this location. Maybe try one of the links " +"below or a search?" +msgstr "" + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "" + +#: archive-jetpack-portfolio.php:26 +msgid "Newer projects" +msgstr "" + +#: archive-jetpack-portfolio.php:27 +msgid "Portfolio navigation" +msgstr "" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "" + +#. translators: 1: title. +#: comments.php:34 +msgid "One thought on “%1$s”" +msgstr "" + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "" +msgstr[1] "" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 +#: components/page/content-page.php:21 components/post/content.php:45 +msgid "Pages:" +msgstr "" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "" + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "" + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "" + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "" + +#: components/post/content-none.php:19 +msgid "" +"Ready to publish your first post? Get started here." +msgstr "" + +#: components/post/content-none.php:23 +msgid "" +"Sorry, but nothing matched your search terms. Please try again with some " +"different keywords." +msgstr "" + +#: components/post/content-none.php:29 +msgid "" +"It seems we can’t find what you’re looking for. Perhaps " +"searching can help." +msgstr "" + +#: front-page.php:61 +msgid "Panel %1$s Placeholder" +msgstr "" + +#: functions.php:57 +msgid "Top" +msgstr "" + +#. Translators: If there are characters in your language that are not supported +#. by Work Sans, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:107 +msgctxt "work_sans font: on or off" +msgid "on" +msgstr "" + +#. Translators: If there are characters in your language that are not supported +#. by Karla, translate this to 'off'. Do not translate into your own language. +#: functions.php:113 +msgctxt "Karla font: on or off" +msgid "on" +msgstr "" + +#: functions.php:144 +msgid "Sidebar" +msgstr "" + +#: functions.php:154 +msgid "Footer 1" +msgstr "" + +#: functions.php:164 +msgid "Footer 2" +msgstr "" + +#: functions.php:174 +msgid "Footer 3" +msgstr "" + +#: header.php:25 +msgid "Skip to content" +msgstr "" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "" + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "" + +#: inc/customizer.php:28 +msgid "Header Top Text" +msgstr "" + +#: inc/customizer.php:30 +msgid "Add a short bit of content to the top of your website." +msgstr "" + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "" + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "" + +#: inc/customizer.php:60 inc/customizer.php:94 inc/customizer.php:128 +#: inc/customizer.php:162 +msgid "" +"Add an image to your panel by setting a featured image in the page editor. " +"If you don’t select a page, this panel will not be displayed." +msgstr "" + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "" + +#: inc/customizer.php:80 inc/customizer.php:114 inc/customizer.php:148 +#: inc/customizer.php:182 +msgid "Panel Layout" +msgstr "" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "" + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "" + +#: inc/customizer.php:207 +msgid "" +"Add an image to be displayed at the bottom of the Front Page template, above " +"the footer." +msgstr "" + +#: inc/jetpack.php:239 +msgid "Types:" +msgstr "" + +#: inc/jetpack.php:243 +msgid "All" +msgstr "" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr "" + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "" + +#: inc/template-tags.php:50 +msgctxt "prefaces list of categories assigned to the post" +msgid "in" +msgstr "" + +#: inc/template-tags.php:70 +msgctxt "prefaces list of categories assigned to post" +msgid "Type: " +msgstr "" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "" + +#: inc/template-tags.php:180 +msgid "Front Page Section %1$s Placeholder" +msgstr "" + +#: inc/woocommerce.php:212 +msgid "View your shopping cart" +msgstr "" + +#: inc/woocommerce.php:213 +msgid "%d item" +msgid_plural "%d items" +msgstr[0] "" +msgstr[1] "" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "" + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "" + +#: inc/wpcom-colors.php:472 +msgid "Beige, Blue, and Orange" +msgstr "" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "" + +#: single.php:22 +msgid "Previous Post" +msgstr "" + +#: single.php:23 +msgid "Next Post" +msgstr "" + +#. Theme Name of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Lodestar" +msgstr "" + +#. Theme URI of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "http://theme.wordpress.com/themes/lodestar" +msgstr "" + +#. Description of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "" +"Lodestar is a trendy one-page theme designed with startups and small " +"business ventures in mind." +msgstr "" + +#. Author of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Automattic" +msgstr "" + +#. Author URI of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "https://www.wordpress.com" +msgstr "" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/testimonial-page.php +msgid "Testimonial Template" +msgstr "" diff --git a/lodestar/languages/no.mo b/lodestar/languages/no.mo new file mode 100644 index 000000000..46ca085b8 Binary files /dev/null and b/lodestar/languages/no.mo differ diff --git a/lodestar/languages/no.po b/lodestar/languages/no.po new file mode 100644 index 000000000..bd09e8407 --- /dev/null +++ b/lodestar/languages/no.po @@ -0,0 +1,354 @@ +# Translation of WordPress.com - Themes - Lodestar in Norwegian +# This file is distributed under the same license as the WordPress.com - Themes - Lodestar package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-01-23 07:34:23+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: no\n" +"Project-Id-Version: WordPress.com - Themes - Lodestar\n" + +#. translators: 1: title. +#: comments.php:34 +msgid "One thought on “%1$s”" +msgstr "En tanke om “%1$s”" + +#: archive-jetpack-portfolio.php:27 +msgid "Portfolio navigation" +msgstr "Porteføljenavigasjon" + +#: archive-jetpack-portfolio.php:26 +msgid "Newer projects" +msgstr "Nyere prosjekter" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "Eldre prosjekter" + +#: inc/woocommerce.php:213 +msgid "%d item" +msgid_plural "%d items" +msgstr[0] "%d gjenstand" +msgstr[1] "%d gjenstander" + +#: inc/woocommerce.php:212 +msgid "View your shopping cart" +msgstr "Vis handlevognen din" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "Porteføljemal" + +#: single.php:23 +msgid "Next Post" +msgstr "Neste innlegg" + +#: single.php:22 +msgid "Previous Post" +msgstr "Forrige innlegg" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "Neste prosjekt" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "Forrige prosjekt" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "Søkeresultater for: %s" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "Hvit, Rød og GrÃ¥" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "Hvit, Brun og BlÃ¥" + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "LysegrÃ¥ og rosa" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "BlÃ¥" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "GrÃ¥ og Grønn" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "Lenke" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "Tekst" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "Bakgrunn" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "Rediger %1$s %2$s" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "Innlegg" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "Side" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "% kommentarer" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "1 kommentar" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "Legg igjen en kommentar" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "Stikkord %1$s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "Merket med" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "Rediger %s" + +#: inc/template-tags.php:70 +msgctxt "prefaces list of categories assigned to post" +msgid "Type: " +msgstr "Type:" + +#: inc/template-tags.php:50 +msgctxt "prefaces list of categories assigned to the post" +msgid "in" +msgstr "i" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "av" + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "Publisert den %s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr ", " + +#: inc/jetpack.php:243 +msgid "All" +msgstr "Alle" + +#: inc/jetpack.php:239 +msgid "Types:" +msgstr "Typer:" + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "Panel 4" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "Panel 3" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "Panel 2" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "To-kolonner" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "En kolonne" + +#: inc/customizer.php:80 inc/customizer.php:114 inc/customizer.php:148 +#: inc/customizer.php:182 +msgid "Panel Layout" +msgstr "Paneloppsett" + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "Panelinnhold" + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "Panel 1" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "ToppomrÃ¥de-topptekst 2" + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "ToppomrÃ¥de-topptekst 1" + +#: inc/customizer.php:28 +msgid "Header Top Text" +msgstr "ToppomrÃ¥de-topptekst" + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "Konfigurer dine temainnstillinger" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "Temainnstillinger" + +#: header.php:25 +msgid "Skip to content" +msgstr "GÃ¥ til innhold" + +#: functions.php:174 +msgid "Footer 3" +msgstr "BunnomrÃ¥de 3" + +#: functions.php:164 +msgid "Footer 2" +msgstr "BunnomrÃ¥de 2" + +#: functions.php:154 +msgid "Footer 1" +msgstr "BunnomrÃ¥de 1" + +#: functions.php:144 +msgid "Sidebar" +msgstr "Sidekolonnen" + +#. Translators: If there are characters in your language that are not supported +#. by Karla, translate this to 'off'. Do not translate into your own language. +#: functions.php:113 +msgctxt "Karla font: on or off" +msgid "on" +msgstr "on" + +#. Translators: If there are characters in your language that are not supported +#. by Work Sans, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:107 +msgctxt "work_sans font: on or off" +msgid "on" +msgstr "on" + +#: functions.php:57 +msgid "Top" +msgstr "Topp" + +#: components/post/content-none.php:29 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Vi klarer ikke Ã¥ finne det du leter etter. Prøv Ã¥ søke." + +#: components/post/content-none.php:23 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Beklager, men intet passet med dine søkeord. Vennligst prøv igjen med andre søkeord." + +#: components/post/content-none.php:19 +msgid "Ready to publish your first post? Get started here." +msgstr "Klar for Ã¥ publisere ditt første innlegg? Kom i gang her." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "Ingenting funnet" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "Les mer %s " + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Panel %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Meny" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Toppmeny" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "Tema: %1$s av %2$s." + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "Stolt drevet av %s" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "https://nb.wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Bunnbilde" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Sider:" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Kommentarer er stengt." + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "En kommentar om “%2$s”" +msgstr[1] "%1$s kommentarer om “%2$s”" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Tilbakemeldinger" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "Prøv Ã¥ søke i mÃ¥nedsarkivet." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "Mest brukte kategorier" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Det ble tydeligvis ikke funnet noe her. Kanskje forsøke en av lenkene under eller et søk?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "Auda! Den siden finnes ikke." diff --git a/lodestar/languages/pt-br.mo b/lodestar/languages/pt-br.mo new file mode 100644 index 000000000..03f9e5ff9 Binary files /dev/null and b/lodestar/languages/pt-br.mo differ diff --git a/lodestar/languages/pt-br.po b/lodestar/languages/pt-br.po new file mode 100644 index 000000000..1a265853d --- /dev/null +++ b/lodestar/languages/pt-br.po @@ -0,0 +1,341 @@ +# Translation of WordPress.com - Themes - Lodestar in Portuguese (Brazil) +# This file is distributed under the same license as the WordPress.com - Themes - Lodestar package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-02-06 19:58:21+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: pt_BR\n" +"Project-Id-Version: WordPress.com - Themes - Lodestar\n" + +#. translators: 1: title. +#: comments.php:34 +msgid "One thought on “%1$s”" +msgstr "Um comentário em “%1$s”" + +#: archive-jetpack-portfolio.php:27 +msgid "Portfolio navigation" +msgstr "Navegação do portfólio" + +#: archive-jetpack-portfolio.php:26 +msgid "Newer projects" +msgstr "Novos Projetos" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "Projetos Antigos" + +#: inc/woocommerce.php:213 +msgid "%d item" +msgid_plural "%d items" +msgstr[0] "%d item" +msgstr[1] "%d itens" + +#: inc/woocommerce.php:212 +msgid "View your shopping cart" +msgstr "Visualize seu carrinho" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "Template de portfólio" + +#. Description of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Lodestar is a trendy one-page theme designed with startups and small business ventures in mind." +msgstr "Lodestar é um tema de uma página desenhado pensando em startups e pequenos negócios." + +#: single.php:23 +msgid "Next Post" +msgstr "Próximo post" + +#: single.php:22 +msgid "Previous Post" +msgstr "Post anterior" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "Próximo projeto" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "Projeto anterior" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "Resultados da busca por: %s" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "Branco, vermelho e cinza" + +#: inc/wpcom-colors.php:472 +msgid "Beige, Blue, and Orange" +msgstr "Bege, azul e laranja" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "Branco, marrom e azul" + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "Cinza claro e rosa" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "Azul" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "Cinza e azul" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "Link" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "Texto" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "Fundo" + +#: inc/template-tags.php:180 +msgid "Front Page Section %1$s Placeholder" +msgstr "Seção %1$s da página inicial" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "Editar %1$s %2$s" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "Publicar" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "Página" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "% Comentários" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "1 Comentário" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "Deixe um comentário" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "Marcado %1$s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "Com a tag" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "Editar %s" + +#: inc/template-tags.php:50 +msgctxt "prefaces list of categories assigned to the post" +msgid "in" +msgstr "em" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "por" + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "Publicado em %s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr ", " + +#: inc/jetpack.php:243 +msgid "All" +msgstr "Tudo" + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "Painel 4" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "Painel 3" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "Painel 2" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "Duas colunas" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "Uma coluna" + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "Painel de conteúdo" + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "Painel 1" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "Texto do topo 2" + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "Texto do topo 1" + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "Configure seu tema" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "Opções do tema" + +#: header.php:25 +msgid "Skip to content" +msgstr "Ir para conteúdo" + +#: functions.php:174 +msgid "Footer 3" +msgstr "Footer 3" + +#: functions.php:164 +msgid "Footer 2" +msgstr "Rodapé 2" + +#: functions.php:154 +msgid "Footer 1" +msgstr "Rodapé 1" + +#: functions.php:144 +msgid "Sidebar" +msgstr "Lateral" + +#. Translators: If there are characters in your language that are not supported +#. by Karla, translate this to 'off'. Do not translate into your own language. +#: functions.php:113 +msgctxt "Karla font: on or off" +msgid "on" +msgstr "on" + +#: functions.php:57 +msgid "Top" +msgstr "Topo" + +#: components/post/content-none.php:29 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Parece que não encontramos o que você está procurando. Talvez a ferramenta de pesquisa possa ajudar." + +#: components/post/content-none.php:23 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Não encontramos nada para estes termos de busca. Tente novamente com palavras-chave diferentes." + +#: components/post/content-none.php:19 +msgid "Ready to publish your first post? Get started here." +msgstr "Pronto para publicar seu primeiro post? Comece aqui." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "Nenhum resultado" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "Continue lendo %s \t" + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Painel %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Menu" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Menu Principal" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "Tema: %1$s %2$s." + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "Orgulhosamente feito com %s" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "https://br.wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Imagem do rodapé" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Páginas" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Os comentários estão fechados." + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Um comentário em “%2$s”" +msgstr[1] "%1$s comentários em “%2$s”" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Depoimentos" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "Tente olhar nos arquivos mensais." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "Categorias mais Usadas" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Parece que nada foi encontrado neste lugar. Quem sabe você possa tentar um dos links abaixo ou uma busca?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "Ops! Essa página não pode ser encontrada." diff --git a/lodestar/languages/ro.mo b/lodestar/languages/ro.mo new file mode 100644 index 000000000..aeaf38ca9 Binary files /dev/null and b/lodestar/languages/ro.mo differ diff --git a/lodestar/languages/ro.po b/lodestar/languages/ro.po new file mode 100644 index 000000000..5e551987a --- /dev/null +++ b/lodestar/languages/ro.po @@ -0,0 +1,391 @@ +# Translation of WordPress.com - Themes - Lodestar in Romanian +# This file is distributed under the same license as the WordPress.com - Themes - Lodestar package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-01-23 07:34:22+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: ro\n" +"Project-Id-Version: WordPress.com - Themes - Lodestar\n" + +#. translators: 1: title. +#: comments.php:34 +msgid "One thought on “%1$s”" +msgstr "Un gând despre „%1$s”" + +#: archive-jetpack-portfolio.php:27 +msgid "Portfolio navigation" +msgstr "Navigare în portofoliu" + +#: archive-jetpack-portfolio.php:26 +msgid "Newer projects" +msgstr "Proiecte mai noi" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "Proiecte mai vechi" + +#: inc/woocommerce.php:213 +msgid "%d item" +msgid_plural "%d items" +msgstr[0] "%d element" +msgstr[1] "%d elemente" +msgstr[2] "%d de elemente" + +#: inc/woocommerce.php:212 +msgid "View your shopping cart" +msgstr "Vezi coÈ™ul tău de cumpărături" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/testimonial-page.php +msgid "Testimonial Template" +msgstr "Șablon testimonial" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "Șablon portofoliu" + +#. Description of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Lodestar is a trendy one-page theme designed with startups and small business ventures in mind." +msgstr "Lodestar este o temă la modă, pe o singură pagină, proiectată cu gândul la pornirea îndrăzneață a unor startup-uri sau mici afaceri." + +#: single.php:23 +msgid "Next Post" +msgstr "Articol următor" + +#: single.php:22 +msgid "Previous Post" +msgstr "Articol anterior" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "Proiectul următor" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "Proiectul anterior" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "Rezultatele căutării pentru: %s" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "Alb, roÈ™u È™i gri" + +#: inc/wpcom-colors.php:472 +msgid "Beige, Blue, and Orange" +msgstr "Bej, albastru È™i portocaliu" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "Alb, maro È™i albastru" + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "Gri deschis È™i roz" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "Albastru" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "Gri È™i verde" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "Legătură" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "Text" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "Fundal" + +#: inc/template-tags.php:180 +msgid "Front Page Section %1$s Placeholder" +msgstr "Substituent pentru secÈ›iunea %1$s în pagina din față" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "Editează %1$s %2$s" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "Articol" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "Pagină" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "% comentarii" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "1 comentariu" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "Lasă un comentariu" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "Etichetat %1$s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "Etichetat" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "Editează %s" + +#: inc/template-tags.php:70 +msgctxt "prefaces list of categories assigned to post" +msgid "Type: " +msgstr "Tip:" + +#: inc/template-tags.php:50 +msgctxt "prefaces list of categories assigned to the post" +msgid "in" +msgstr "în" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "de" + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "Publicat de %s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr ", " + +#: inc/jetpack.php:243 +msgid "All" +msgstr "ToÈ›i" + +#: inc/jetpack.php:239 +msgid "Types:" +msgstr "Tipuri:" + +#: inc/customizer.php:207 +msgid "Add an image to be displayed at the bottom of the Front Page template, above the footer." +msgstr "Adaugă o imagine pentru a fi afiÈ™ată în partea de jos a È™ablonului paginii din față, deasupra subsolului." + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "Panou 4" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "Panou 3" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "Panou 2" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "Două coloane" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "O coloană" + +#: inc/customizer.php:80 inc/customizer.php:114 inc/customizer.php:148 +#: inc/customizer.php:182 +msgid "Panel Layout" +msgstr "Aranjament panou" + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "ConÈ›inut panou" + +#: inc/customizer.php:60 inc/customizer.php:94 inc/customizer.php:128 +#: inc/customizer.php:162 +msgid "Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed." +msgstr "Adaugă o imagine în panoul tău prin setarea unei imagini reprezentative în editorul de pagină. Dacă nu selectezi o pagină, acest panou nu va fi afiÈ™at." + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "Panou 1" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "Text sus 2 în antet" + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "Text sus 1 în antet" + +#: inc/customizer.php:30 +msgid "Add a short bit of content to the top of your website." +msgstr "Adaugă un pic de conÈ›inut în partea de sus a sitului tău web." + +#: inc/customizer.php:28 +msgid "Header Top Text" +msgstr "Text sus în antet" + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "Configurează setările temei" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "OpÈ›iuni temă" + +#: header.php:25 +msgid "Skip to content" +msgstr "Sari la conÈ›inut" + +#: functions.php:174 +msgid "Footer 3" +msgstr "Subsol 3" + +#: functions.php:164 +msgid "Footer 2" +msgstr "Subsol 2" + +#: functions.php:154 +msgid "Footer 1" +msgstr "Subsol 1" + +#: functions.php:144 +msgid "Sidebar" +msgstr "Bară laterală" + +#. Translators: If there are characters in your language that are not supported +#. by Karla, translate this to 'off'. Do not translate into your own language. +#: functions.php:113 +msgctxt "Karla font: on or off" +msgid "on" +msgstr "on" + +#. Translators: If there are characters in your language that are not supported +#. by Work Sans, translate this to 'off'. Do not translate into your own +#. language. +#: functions.php:107 +msgctxt "work_sans font: on or off" +msgid "on" +msgstr "on" + +#: functions.php:57 +msgid "Top" +msgstr "Sus" + +#: front-page.php:61 +msgid "Panel %1$s Placeholder" +msgstr "Substituent panou %1$s" + +#: components/post/content-none.php:29 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Se pare că nu putem găsi ceea ce cauÈ›i. Probabil o căutare poate ajuta." + +#: components/post/content-none.php:23 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Regret, dar nu s-a potrivit nimic cu criteriul tău de căutare. Te rog încearcă din nou cu alte cuvinte cheie." + +#: components/post/content-none.php:19 +msgid "Ready to publish your first post? Get started here." +msgstr "Gata să-È›i publici primul articol? ÃŽncepe de aici." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "N-am găsit nimic" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "Continuă lectura %s " + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Panou %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Meniu" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Meniu superior" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "Temă: %1$s de %2$s." + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "Propulsat cu mândrie de %s" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "https://wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Imagine subsol" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Pagini:" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Comentariile sunt închise" + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "Un gând despre „%2$s”" +msgstr[1] "%1$s gânduri despre „%2$s”" +msgstr[2] "%1$s de gânduri despre „%2$s”" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Testimoniale" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "ÃŽncearcă să cauÈ›i în arhivele lunare." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "Cele mai folosite categorii" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Se pare că nu a fost găsit nimic la această locaÈ›ie. Poate încerci una din legăturile de mai jos sau o căutare?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "Hopa! Acea pagină nu poate fi găsită" diff --git a/lodestar/languages/tr.mo b/lodestar/languages/tr.mo new file mode 100644 index 000000000..12a650061 Binary files /dev/null and b/lodestar/languages/tr.mo differ diff --git a/lodestar/languages/tr.po b/lodestar/languages/tr.po new file mode 100644 index 000000000..00cf52012 --- /dev/null +++ b/lodestar/languages/tr.po @@ -0,0 +1,350 @@ +# Translation of WordPress.com - Themes - Lodestar in Turkish +# This file is distributed under the same license as the WordPress.com - Themes - Lodestar package. +msgid "" +msgstr "" +"PO-Revision-Date: 2018-01-23 07:34:22+0000\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: GlotPress/2.4.0-alpha\n" +"Language: tr\n" +"Project-Id-Version: WordPress.com - Themes - Lodestar\n" + +#: archive-jetpack-portfolio.php:26 +msgid "Newer projects" +msgstr "Yeni projeler" + +#: archive-jetpack-portfolio.php:25 +msgid "Older projects" +msgstr "Eski projeler" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/testimonial-page.php +msgid "Testimonial Template" +msgstr "Görüşler Åžablonu" + +#. Template Name of the plugin/theme +#: wp-content/themes/pub/lodestar/templates/portfolio-page.php +msgid "Portfolio Template" +msgstr "Portfolyo Åžablonu" + +#. Description of the plugin/theme +#: wp-content/themes/pub/lodestar/style.css +msgid "Lodestar is a trendy one-page theme designed with startups and small business ventures in mind." +msgstr "Lodestar, giriÅŸimciler ve küçük iÅŸletmelerin ihtiyaçları göz önüne alınarak tasarlanmış, tek sayfalı modern bir temadır." + +#: single.php:23 +msgid "Next Post" +msgstr "Sonraki Yazı" + +#: single.php:22 +msgid "Previous Post" +msgstr "Önceki Yazı" + +#: single-jetpack-portfolio.php:19 +msgid "Next Project" +msgstr "Sonraki Proje" + +#: single-jetpack-portfolio.php:18 +msgid "Previous Project" +msgstr "Önceki Proje" + +#: search.php:19 +msgid "Search Results for: %s" +msgstr "Åžu kriter için arama sonuçları: %s" + +#: inc/wpcom-colors.php:478 +msgid "White, Red, and Grey" +msgstr "Beyaz, Kırmızı ve Gri" + +#: inc/wpcom-colors.php:472 +msgid "Beige, Blue, and Orange" +msgstr "Bej, Mavi ve Turuncu" + +#: inc/wpcom-colors.php:466 +msgid "White, Brown, and Blue" +msgstr "Beyaz, Kahverengi ve Mavi" + +#: inc/wpcom-colors.php:460 +msgid "Light Grey and Pink" +msgstr "Açık Gri ve Pembe" + +#: inc/wpcom-colors.php:454 +msgid "Blue" +msgstr "Mavi" + +#: inc/wpcom-colors.php:448 +msgid "Grey and Green" +msgstr "Gri ve YeÅŸil" + +#: inc/wpcom-colors.php:232 +msgid "Link" +msgstr "BaÄŸlantı" + +#: inc/wpcom-colors.php:191 +msgid "Text" +msgstr "Metin" + +#: inc/wpcom-colors.php:18 +msgid "Background" +msgstr "Arkaplan" + +#: inc/template-tags.php:180 +msgid "Front Page Section %1$s Placeholder" +msgstr "Ön Sayfa Bölümü %1$s Yer Tutucusu" + +#. translators: %s: Name of current post +#: inc/template-tags.php:144 +msgid "Edit %1$s %2$s" +msgstr "Düzenle %1$s %2$s" + +#: inc/template-tags.php:139 +msgid "Post" +msgstr "Yazı" + +#: inc/template-tags.php:137 +msgid "Page" +msgstr "Sayfa" + +#: inc/template-tags.php:119 +msgid "% Comments" +msgstr "% Yorum" + +#: inc/template-tags.php:119 +msgid "1 Comment" +msgstr "1 Yorum" + +#: inc/template-tags.php:119 +msgid "Leave a comment" +msgstr "Yorum bırakın" + +#: inc/template-tags.php:112 +msgid "Tagged %1$s" +msgstr "%1$s etiketlendi" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:108 +msgid "Tagged" +msgstr "Etiketler" + +#. translators: %s: Name of current post +#: inc/template-tags.php:86 +msgid "Edit %s" +msgstr "Düzenle %s" + +#: inc/template-tags.php:70 +msgctxt "prefaces list of categories assigned to post" +msgid "Type: " +msgstr "Tip:" + +#: inc/template-tags.php:41 +msgctxt "post author" +msgid "by" +msgstr "- Yazar: " + +#: inc/template-tags.php:34 +msgctxt "post date" +msgid "Posted on %s" +msgstr "Gönderi tarihi %s" + +#. translators: used between list items, there is a space after the comma +#: inc/template-tags.php:17 inc/template-tags.php:69 inc/template-tags.php:103 +msgid ", " +msgstr ", " + +#: inc/jetpack.php:243 +msgid "All" +msgstr "Tümü" + +#: inc/jetpack.php:239 +msgid "Types:" +msgstr "Tipler:" + +#: inc/customizer.php:207 +msgid "Add an image to be displayed at the bottom of the Front Page template, above the footer." +msgstr "Ön sayfanızın alt bölümünde, alt bilgilerden önce görüntülenecek bir görsel ekleyin." + +#: inc/customizer.php:159 +msgid "Panel 4" +msgstr "Panel 4" + +#: inc/customizer.php:125 +msgid "Panel 3" +msgstr "Panel 3" + +#: inc/customizer.php:91 +msgid "Panel 2" +msgstr "Panel 2" + +#: inc/customizer.php:85 inc/customizer.php:119 inc/customizer.php:153 +#: inc/customizer.php:187 inc/customizer.php:230 +msgid "Two Column" +msgstr "Ä°ki Sütun" + +#: inc/customizer.php:84 inc/customizer.php:118 inc/customizer.php:152 +#: inc/customizer.php:186 inc/customizer.php:229 +msgid "One Column" +msgstr "Bir Sütun" + +#: inc/customizer.php:80 inc/customizer.php:114 inc/customizer.php:148 +#: inc/customizer.php:182 +msgid "Panel Layout" +msgstr "Panel Düzeni" + +#: inc/customizer.php:69 inc/customizer.php:103 inc/customizer.php:137 +#: inc/customizer.php:171 +msgid "Panel Content" +msgstr "Panel İçeriÄŸi" + +#: inc/customizer.php:60 inc/customizer.php:94 inc/customizer.php:128 +#: inc/customizer.php:162 +msgid "Add an image to your panel by setting a featured image in the page editor. If you don’t select a page, this panel will not be displayed." +msgstr "Sayfa düzenleyicisinde bir öne çıkan resim belirleyerek panelinize görsel ekleyin. Bir sayfa seçmezseniz bu panel görünür olmayacaktır." + +#: inc/customizer.php:57 +msgid "Panel 1" +msgstr "Panel 1" + +#: inc/customizer.php:52 +msgid "Header Top Text 2" +msgstr "Ãœst Bölüm Metni 2" + +#: inc/customizer.php:41 +msgid "Header Top Text 1" +msgstr "Ãœst Bölüm Metni 1" + +#: inc/customizer.php:30 +msgid "Add a short bit of content to the top of your website." +msgstr "Web sitenizin üst bölümüne kısa bir içerik ekleyin." + +#: inc/customizer.php:28 +msgid "Header Top Text" +msgstr "Ãœst Bölüm Metni" + +#: inc/customizer.php:23 +msgid "Configure your theme settings" +msgstr "Tema ayarlarınızı yapılandırın" + +#: inc/customizer.php:22 +msgid "Theme Options" +msgstr "Tema Seçenekleri" + +#: header.php:25 +msgid "Skip to content" +msgstr "İçeriÄŸe geç" + +#: functions.php:174 +msgid "Footer 3" +msgstr "Alt Bölme 3" + +#: functions.php:164 +msgid "Footer 2" +msgstr "Alt Bölme 2" + +#: functions.php:154 +msgid "Footer 1" +msgstr "Alt Bölme 1" + +#: functions.php:144 +msgid "Sidebar" +msgstr "Yan Menü" + +#: functions.php:57 +msgid "Top" +msgstr "Ãœst" + +#: front-page.php:61 +msgid "Panel %1$s Placeholder" +msgstr "Panel %1$s Yer Tutucusu" + +#: components/post/content-none.php:29 +msgid "It seems we can’t find what you’re looking for. Perhaps searching can help." +msgstr "Aradığınız sayfa bulunamadı. Belki arama kutusu aradığınızı bulma konusunda yardımcı olabilir." + +#: components/post/content-none.php:23 +msgid "Sorry, but nothing matched your search terms. Please try again with some different keywords." +msgstr "Ãœzgünüz fakat aradığınız kriterler ile örtüşen sonuç bulunamadı. Lütfen baÅŸka kriterler ile tekrar deneyin." + +#: components/post/content-none.php:19 +msgid "Ready to publish your first post? Get started here." +msgstr "Ä°lk yazınızı yayınlamaya hazır mısınız? Buradan baÅŸlayın." + +#: components/post/content-none.php:13 +msgid "Nothing Found" +msgstr "Hiçbir ÅŸey bulunmadı" + +#. translators: %s: Name of current post +#. translators: %s: Name of current post. +#. translators: %s: Name of current post +#: components/page/content-front-page-panels.php:50 +#: components/post/content.php:40 inc/template-tags.php:195 +msgid "Continue reading %s " +msgstr "%s yazısını okumaya devam et " + +#: components/page/content-front-page-panels.php:18 +msgid "Panel %1$s" +msgstr "Panel %1$s" + +#: components/navigation/navigation-top.php:2 +msgid "Menu" +msgstr "Menü" + +#: components/navigation/navigation-top.php:1 +msgid "Top Menu" +msgstr "Ãœst Menü" + +#: components/footer/site-info.php:5 +msgid "Theme: %1$s by %2$s." +msgstr "" + +#: components/footer/site-info.php:3 +msgid "Proudly powered by %s" +msgstr "%s gururla sunar" + +#: components/footer/site-info.php:3 +msgid "https://wordpress.org/" +msgstr "https://wordpress.org/" + +#: components/footer/footer-image.php:17 inc/customizer.php:193 +#: inc/customizer.php:205 +msgid "Footer Image" +msgstr "Alt Bölüm Görseli" + +#: components/features/portfolio/content-portfolio-single.php:35 +#: components/page/content-front-page.php:8 components/page/content-page.php:21 +#: components/post/content.php:45 +msgid "Pages:" +msgstr "Sayfalar:" + +#: comments.php:68 +msgid "Comments are closed." +msgstr "Yorumlar kapatıldı." + +#. translators: 1: comment count number, 2: title. +#: comments.php:40 +msgctxt "comments title" +msgid "%1$s thought on “%2$s”" +msgid_plural "%1$s thoughts on “%2$s”" +msgstr[0] "“%2$s” için bir yorum" +msgstr[1] "“%2$s” için %1$s yorum" + +#: archive-jetpack-testimonial.php:29 +msgid "Testimonials" +msgstr "Görüşler" + +#: 404.php:48 +msgid "Try looking in the monthly archives." +msgstr "Aylık arÅŸivlere göz atmayı deneyin." + +#: 404.php:32 +msgid "Most Used Categories" +msgstr "En çok Kullanılan Kategoriler" + +#: 404.php:20 +msgid "It looks like nothing was found at this location. Maybe try one of the links below or a search?" +msgstr "Burada hiçbir ÅŸeyin bulunmadığı görülüyor. Belki alttaki baÄŸlantılardan birini veya bir arama yapmayı denemelisin?" + +#: 404.php:17 +msgid "Oops! That page can’t be found." +msgstr "Off! Bu sayfa bulunamadı." diff --git a/lodestar/page.php b/lodestar/page.php new file mode 100644 index 000000000..cd44ec8b4 --- /dev/null +++ b/lodestar/page.php @@ -0,0 +1,39 @@ + +
+
+
+ + + + +
+
+ +
+ Themes and click the Add New button. +2. Click Upload and Choose File, then select the theme's .zip file. Click Install Now. +3. Click Activate to use your new theme right away. + +== Frequently Asked Questions == + += Does this theme support any plugins? = + +Lodestar includes support for Jetpack's Infinite Scroll and Site Logos, as well as other features. + + +== Setting Up Your Front Page == + +The page you assigned as your Static Front Page will automatically display a single panel with a full-screen featured image, site logo and/or title, menu, and page content underneath. + +You can add more content to your front page by adding panels. Each panel is created from a static page on your site. + +To add additional panels to your Front page, follow these steps: + +1. Create or edit a page. +2. To add a large image to the top of the panel, assign a Featured Image to the page. This image should be at least 2000 pixels wide and 1200 pixels tall. +3. Publish your page. +4. Navigate to Customize → Theme Options. From the drop-down, select the page you’d like to appear in the panel. +5. For each panel, you also have the option to display the page's content in one or two columns. + +Lodestar supports up to four different panels; the theme will only display the panels you add, so you can opt to add fewer. + + +== Front Page Footer Image == + +The last panel of the front page is an optional full-size image. This can be assigned under Customize → Theme Options → Footer Image. + + +== Add Header Top Text == + +You can add two strings of text to the top of Lodestar, next to the menu. This allows you to keep your contact information or call to action visible on all pages throughout the site. + +To add your own text, navigate to Customize → Theme Options → Header Top Text. It's recommended that you only use short strings of text here. You can include links and other HTML in the Header Top Text fields. + + +== Portfolio (requires Jetpack: jetpack.me) == + +Lodestar helps you showcase your company's work as portfolio projects. Each project is displayed with its featured image and additional information is displayed on hover. + +Once you've added some portfolio projects to your website, they will be visible at http://yourgroovysite.wordpress.com/portfolio. + +You can also apply Lodestar's Portfolio Template to a page, which allows visitors to sort your creative works by Project Type. The Portfolio Template will display up to 120 projects. + + +== Testimonials (requires Jetpack: jetpack.me) == + +Add testimonials to your Lodestar website to share what others have been saying about your work. You can view the testimonial archive by adding /testimonial to your URL. + +You can also apply Lodestar's Testimonial Template to display your testimonials on any page of the site. + + +== Custom Menus == + +Lodestar includes one Custom Menu in the header, which can be configured via My Sites → Menus. If no menu is assigned, this area will display a list of your pages by default. + + +== Social Links Menu (requires Jetpack: jetpack.com) == + +With Lodestar, you have the option to display links to your social media profiles in the header and footer. To display them, set up a Social Links Menu. + + +== Widget Areas == + +Lodestar offers four widget areas: + +* The optional Sidebar, which appears on the right on all posts and pages, excluding the static front page. +* Three optional Footer widget areas. + +If the Sidebar area is not active, the theme automatically adjusts to have a single column. + + +== Site Logo == + +Brand identity is very important — that’s why Lodestar supports the Site Logo feature. To add your own image, go to Customize → Site Identity. The logo will appear in the header, above the site title. + + +== Custom Background == + +Custom color, pattern, or a beautiful image – the choice is yours. To change the background, visit Customize → Colors & Backgrounds from your dashboard. + + +== Quick Specs (all measurements in pixels) == +* The main column width is up to 1120 wide on the static front page, and 700 wide on the blog index, archive, single posts, and pages. +* The optional sidebar is up to 336 wide. +* The recommended Featured Image size is at least 2000 wide by 1200 tall. The theme will scale and crop the images depending on the page and device size. +* The recommended Custom Header image size is at least 2000 wide by 1200 tall. +* The Site Logo will display up to 200 tall; larger logo sizes are recommended as they will display sharper on retina devices. + + +== Changelog == + += 1.0 - February 20, 2017 = +* Initial release + +== Credits == + +* Based on Components http://components.underscores.me/, (C) 2015-2016 Automattic, Inc., [GPLv2 or later](https://www.gnu.org/licenses/gpl-2.0.html) +* normalize.css http://necolas.github.io/normalize.css/, (C) 2012-2016 Nicolas Gallagher and Jonathan Neal, [MIT](http://opensource.org/licenses/MIT) +* Isotope http://isotope.metafizzy.co/ (C) 2016 Metafizzy [GPLv3 or later] (https://www.gnu.org/licenses/gpl-3.0.html) +* imagesLoaded https://github.com/desandro/imagesloaded (C) 2017 David DeSandro [MIT](http://opensource.org/licenses/MIT) +* ScrollTo https://github.com/flesler/jquery.scrollTo (C) 2007-2016 Ariel Flesler [MIT](http://opensource.org/licenses/MIT) +* Genericons icon font http://www.genericons.com (C) 2016 Automattic [GPLv2 or later](https://www.gnu.org/licenses/gpl-2.0.html) +* Default header image http://negativespace.co/photos/woman-coding/, [C00] (https://creativecommons.org/publicdomain/zero/1.0/) diff --git a/lodestar/rtl.css b/lodestar/rtl.css new file mode 100644 index 000000000..43e1f38b8 --- /dev/null +++ b/lodestar/rtl.css @@ -0,0 +1,355 @@ +/* +Theme Name: Lodestar + +Adding support for language written in a Right To Left (RTL) direction is easy - +it's just a matter of overwriting all the horizontal positioning attributes +of your CSS stylesheet in a separate stylesheet file named rtl.css. + +https://codex.wordpress.org/Right_to_Left_Languagecomponentsupport + +*/ + +/* Reset */ + +body { + direction: rtl; + unicode-bidi: embed; +} + +th { + text-align: right; +} + +/* Accessibility */ + +.screen-reader-text:focus { + left: auto; + right: 5px; +} + +/* Typography */ +blockquote { + border-left: 0; + border-right: 4px solid #ddd; + padding-left: 0; + padding-right: 1.5em; +} + +textarea { + padding-right: 3px; +} + +ul, +ol { + margin-left: 0; + margin-right: 3em; +} + +li > ul, +li > ol { + margin-left: 0; + margin-right: 1.5em; +} + +.menu-toggle::after, +.menu-item-has-children > a::before, +.page_item_has_children > a::before { + font-family: Genericons; + font-size: 1em; + font-style: normal; + font-weight: normal; + line-height: 1; + text-decoration: none; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: auto; +} + +/* Media */ +.mejs-offscreen { + right: -10000px; +} + +/* Main Navigation */ + +.main-navigation ul { + text-align: right; +} + +.main-navigation ul ul { + padding-left: 0; + padding-right: 1.5em; +} + +.menu-toggle::after { + content: "\f419"; + margin-right: 0.5em; + position: relative; + top: -2px; +} + +.menu-toggle::before { + display: none; +} + +/* Front Page */ + +.lodestar-panel .jetpack-testimonial .edit-link, +.panel-content .wrap .recent-posts .post h2, +.lodestar-panel .recent-posts .edit-link { + text-align: right; +} + +/* Blog Entries */ + +.entry-footer .cat-links, +.entry-footer .tags-links, +.entry-footer .comments-link, +.entry-footer .edit-link { + margin-left: 2em; + margin-right: 0; +} + +.entry-footer span:last-child { + margin-left: 0; +} + +.entry-author .author-avatar { + float: right; + margin-left: 1em; + margin-right: 0; +} + +.entry-author .author-heading, +.entry-author .author-bio { + float: left; +} + +#infinite-handle span { + border: 0; +} + +#infinite-handle span::before { + display: none; +} + +/* Jetpack Testimonial */ +.jetpack-testimonial .post-thumbnail { + float: right; + margin-left: 1em; + margin-right: 0; +} + +.testimonial-about { + margin-left: 0; + margin-right: 30px; +} + +.testimonial-about .entry-header { + float: right; +} + +/* Comments */ +.comment-body { + padding-left: 0; + padding-right: 100px; +} + +.children { + padding-left: 0; + padding-right: 40px; +} + +.comment-author .avatar-container { + float: right; + left: auto; + right: -100px; +} + +.children .comment-author .avatar-container { + left: auto; + right: -80px; +} + +.bypostauthor::before { + left: auto; + right: 0; +} + +.children .bypostauthor::before { + left: auto; + right: 20px; +} + +/* Widgets */ +.widget ul { + margin: 0; +} + +.search-form .search-submit { + left: 0; + right: auto; +} + +.widget .tagcloud a, +.widget.widget_tag_cloud a, +.wp_widget_tag_cloud a { + float: right; + margin: 4px 0 0 4px !important; /* !important to override inline styles */ +} + +.widget ul li li { + padding: 6px 1.5rem 6px 0; +} + +/* Customizer styles */ +.lodestar-customizer.lodestar-front-page .lodestar-panel .lodestar-panel-title { + left: 3.2em; + right: auto; +} + +/* Media queries */ + +@media screen and (min-width: 30em) { + .site-top-content span.site-top-content-2 { + margin-left: 0; + } + + .site-top-content span.site-top-content-1 { + margin-right: 1.5em; + } +} + +@media screen and (min-width: 60em) { + + .has-sidebar #primary { + float: right; + } + + .has-sidebar #secondary { + float: left; + } + + .error404 #primary { + float: none; + } + + .has-top-content .main-navigation ul.nav-menu { + text-align: right; + } + + .main-navigation ul ul { + padding-right: 0; + } + + .main-navigation ul ul, + .main-navigation ul ul ul { + left: auto; + right: -999em; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: auto; + right: 100%; + } + + .main-navigation ul li:hover > ul, + .main-navigation ul li.focus > ul { + right: auto; + } + + .main-navigation .menu-item-has-children > a::after, + .main-navigation .page_item_has_children > a::after { + display: none; + } + + .main-navigation .menu-item-has-children > a::before, + .main-navigation .page_item_has_children > a::before { + content: "\f431"; + display: inline; + position: relative; + right: 2px; + top: -2px; + } + + .main-navigation ul ul .menu-item-has-children > a::before, + .main-navigation ul ul .page_item_has_children > a::before { + margin-top: -10px; + left: 1.0em; + position: absolute; + right: auto; + top: 50%; + -webkit-transform: rotate(90deg); /* Chrome, Safari, Opera */ + -ms-transform: rotate(90deg); /* IE 9 */ + transform: rotate(90deg); + } + + .has-top-content .site-top-content, + .has-top-content .main-navigation + .site-top-content { + text-align: left; + } + + .comment-navigation .nav-previous, + .posts-navigation .nav-previous, + .post-navigation .nav-previous { + float: right; + } + + .comment-navigation .nav-next, + .posts-navigation .nav-next, + .post-navigation .nav-next { + float: left; + text-align: left; + } + + .comment-list .children { + margin-left: 0; + margin-right: 30px; + } + + .comment-author { + float: right; + } + + .comment-metadata { + float: left; + } + + /* Portfolio */ + body.post-type-archive-jetpack-portfolio #primary, + body.tax-jetpack-portfolio-type #primary, + body.tax-jetpack-portfolio-tag #primary, + body.page-template-portfolio-page #primary { + float: none; + } + + .post-type-archive-jetpack-portfolio .entry-header, + .tax-jetpack-portfolio-type .entry-header, + .tax-jetpack-portfolio-tag .entry-header, + .page-template-portfolio-page .entry-header, + .portfolio-content, + .page-template-portfolio-page .entry-content, + .project-terms, + .portfolio-projects .project-archive-content .entry-header, + .portfolio-projects .project-archive-content .entry-meta, + .portfolio-projects .project-archive-content .entry-footer { + text-align: center; + } + + .portfolio-projects article { + float: right; + } + + /* Footer */ + .site-footer .widget-column { + float: right; + margin-left: 5%; + margin-right: 0; + } + + .site-footer .widget-column:last-child { + margin-left: 0; + } +} diff --git a/lodestar/screenshot.png b/lodestar/screenshot.png new file mode 100644 index 000000000..b3e3a6ab6 Binary files /dev/null and b/lodestar/screenshot.png differ diff --git a/lodestar/search.php b/lodestar/search.php new file mode 100644 index 000000000..09ad7be15 --- /dev/null +++ b/lodestar/search.php @@ -0,0 +1,47 @@ + +
+
+
+ + + + + + +
+
+ +
+ + + diff --git a/lodestar/single-jetpack-portfolio.php b/lodestar/single-jetpack-portfolio.php new file mode 100644 index 000000000..9e567fe77 --- /dev/null +++ b/lodestar/single-jetpack-portfolio.php @@ -0,0 +1,30 @@ + + +
+
+ + '' . esc_html__( 'Previous Project', 'lodestar' ) . ' %title', + 'next_text' => '' . esc_html__( 'Next Project', 'lodestar' ) . ' %title', + ) ); + + comments_template(); + + endwhile; // end of the loop. ?> + +
+ +
+ + +
+
+
+ + '' . esc_html__( 'Previous Post', 'lodestar' ) . ' %title', + 'next_text' => '' . esc_html__( 'Next Post', 'lodestar' ) . ' %title', + ) ); + + // If comments are open or we have at least one comment, load up the comment template. + if ( comments_open() || get_comments_number() ) : + comments_template(); + endif; + + endwhile; // End of the loop. + ?> +
+
+ +
+>> TABLE OF CONTENTS: +---------------------------------------------------------------- +# Normalize +# Accessibility +# Alignments +# Clearings +# Typography +# Forms +# Buttons +# Formatting +# Lists +# Tables +# Navigation +# Links +# Layout + ## Posts + ## Pages +# Comments +# Widgets +# Infinite scroll +# Media + ## Galleries +--------------------------------------------------------------*/ +/*-------------------------------------------------------------- +# Normalize +--------------------------------------------------------------*/ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active, +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +mark { + background: #ff0; + color: #000; +} + +small { + font-size: 80%; +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +hr { + box-sizing: content-box; + height: 0; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + border-radius: 0; + color: inherit; + font: inherit; + margin: 0; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +input { + line-height: normal; +} + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; + padding: 0; +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + -webkit-appearance: none; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +legend { + border: 0; + padding: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + border: 1px solid #ddd; + padding: 0.5em; +} + +th { + text-align: left; +} + +/*-------------------------------------------------------------- +# Accessibility +--------------------------------------------------------------*/ +/* Text meant only for screen readers. */ +.screen-reader-text { + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; + height: 1px; + width: 1px; + overflow: hidden; +} +.screen-reader-text:focus { + background-color: #f1f1f1; + border-radius: 3px; + box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); + clip: auto !important; + color: #21759b; + display: block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + height: auto; + left: 5px; + line-height: normal; + padding: 15px 23px 14px; + text-decoration: none; + top: 5px; + width: auto; + word-wrap: normal !important; + z-index: 100000; + /* Above WP toolbar. */ +} + +/* Do not show the outline on the skip link target. */ +#content[tabindex="-1"]:focus { + outline: 0; +} + +/*-------------------------------------------------------------- +# Alignments +--------------------------------------------------------------*/ +.alignleft { + display: inline; + float: left; + margin-right: 1.5em; +} + +.alignright { + display: inline; + float: right; + margin-left: 1.5em; +} + +.aligncenter { + clear: both; + display: block; + margin-left: auto; + margin-right: auto; +} + +/*-------------------------------------------------------------- +# Clearings +--------------------------------------------------------------*/ +.clear::before, +.clear::after, +.entry-content::before, +.entry-content::after, +.comment-content::before, +.comment-content::after, +.site-header::before, +.site-header::after, +.site-content::before, +.site-content::after, +.site-footer::before, +.site-footer::after, +.nav-links::before, +.nav-links::after, +.comment-author::before, +.comment-author::after, +.widget::before, +.widget::after, +.entry-author::before, +.entry-author::after, +.comment-meta::before, +.comment-meta::after, +.testimonial-about::before, +.testimonial-about::after, +.portfolio-wrapper::before, +.portfolio-wrapper::after { + content: ""; + display: table; + table-layout: fixed; +} + +.clear::after, +.entry-content::after, +.comment-content::after, +.site-header::after, +.site-content::after, +.site-footer::after, +.nav-links::after, +.comment-author::after, +.widget::after, +.entry-author::after, +.comment-meta::after, +.testimonial-about::after, +.portfolio-wrapper::after { + clear: both; +} + +/*-------------------------------------------------------------- +# Typography +--------------------------------------------------------------*/ +body, +button, +input, +select, +textarea { + color: #333; + font-family: "Karla", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 16px; + font-size: 1rem; + line-height: 1.5; +} + +h1, h2, h3, h4, h5, h6 { + clear: both; + font-family: "Work Sans", "Helvetica Neue", helvetica, arial, sans-serif; + font-weight: 800; + letter-spacing: 0.1em; + line-height: 1.25; + margin: 0 0 0.75em; + padding: 0.75em 0 0 0; + text-transform: uppercase; +} + +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child, +h6:first-child { + padding-top: 0; +} + +h1 { + font-size: 30px; + font-size: 1.875rem; +} + +h2 { + font-size: 26px; + font-size: 1.625rem; +} + +h3 { + font-size: 22px; + font-size: 1.375rem; +} + +h4 { + font-size: 18px; + font-size: 1.125rem; +} + +h5 { + font-size: 16px; + font-size: 1rem; +} + +h6 { + font-size: 14px; + font-size: 0.875rem; +} + +p { + margin: 0 0 1.5em; + padding: 0; +} + +dfn, cite, em, i { + font-style: italic; +} + +blockquote { + border-left: 4px solid #ddd; + margin: 0 2em; + padding: 0 0 0 1.5em; +} + +address { + margin: 0 0 1.5em; +} + +pre { + background: #eee; + font-family: "Courier 10 Pitch", Courier, monospace; + font-size: 15px; + font-size: 0.9375rem; + line-height: 1.6; + margin-bottom: 1.6em; + max-width: 100%; + overflow: auto; + padding: 1.6em; +} + +code, kbd, tt, var { + font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; + font-size: 15px; + font-size: 0.9375rem; +} + +abbr, acronym { + border-bottom: 1px dotted #666; + cursor: help; +} + +mark, ins { + background: #fff9c0; + text-decoration: none; +} + +big { + font-size: 125%; +} + +blockquote, q { + quotes: "" ""; +} +blockquote::before, +blockquote::after, +q::before, +q::after { + content: ""; +} + +:focus { + outline: none; +} + +/* Genericons */ + +.menu-toggle::before, +.menu-item-has-children > a::after, +.page_item_has_children > a::after, +.bypostauthor::before { + font-family: Genericons; + font-size: 1em; + font-style: normal; + font-weight: normal; + line-height: 1; + text-decoration: none; + vertical-align: text-bottom; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: auto; +} + +/*-------------------------------------------------------------- +# Forms +--------------------------------------------------------------*/ +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"], +textarea { + color: #666; + border: 1px solid #bbb; +} + +input[type="text"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="password"]:focus, +input[type="search"]:focus, +input[type="number"]:focus, +input[type="tel"]:focus, +input[type="range"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="week"]:focus, +input[type="time"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="color"]:focus, +textarea:focus { + color: #111; + border-color: #333; +} + +select { + border: 1px solid #bbb; +} + +input[type="text"], +input[type="email"], +input[type="url"], +input[type="password"], +input[type="search"], +input[type="number"], +input[type="tel"], +input[type="range"], +input[type="date"], +input[type="month"], +input[type="week"], +input[type="time"], +input[type="datetime"], +input[type="datetime-local"], +input[type="color"] { + padding: 4px; +} + +textarea { + padding-left: 3px; + width: 100%; +} + + +/*-------------------------------------------------------------- +# Forms +--------------------------------------------------------------*/ +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +#infinite-handle span button, +#infinite-handle span button:hover, +#infinite-handle span button:focus { + border: 0; + border-radius: 0; + background: #29292a; + box-shadow: none; + color: #fff; + font-size: 14px; + font-size: 0.875rem; + letter-spacing: 0.05em; + line-height: 1; + padding: 1em 1.5em; + text-shadow: none; + text-transform: uppercase; + transition: background 0.2s; +} + +button:hover, +button:focus, +input[type="button"]:hover, +input[type="button"]:focus, +input[type="reset"]:hover, +input[type="reset"]:focus, +input[type="submit"]:hover, +input[type="submit"]:focus, +#infinite-handle span button:hover, +#infinite-handle span button:focus { + background: #555; + cursor: pointer; +} + +/*-------------------------------------------------------------- +# Formattings +--------------------------------------------------------------*/ +hr { + background-color: #ccc; + border: 0; + height: 1px; + margin-bottom: 1.5em; +} + +/*-------------------------------------------------------------- +# Lists +--------------------------------------------------------------*/ +ul, +ol { + margin: 0 0 1.5em 3em; + padding: 0; +} + +ul { + list-style: disc; +} + +ol { + list-style: decimal; +} + +li > ul, +li > ol { + margin-bottom: 0; + margin-left: 1.5em; +} + +dt { + font-weight: bold; +} + +dd { + margin: 0 1.5em 1.5em; +} + +/*-------------------------------------------------------------- +# Tables +--------------------------------------------------------------*/ +table { + margin: 0 0 1.5em; + width: 100%; +} + +/*-------------------------------------------------------------- +# Navigation +--------------------------------------------------------------*/ + +.comment-navigation, +.posts-navigation, +.post-navigation { + margin: 0 0 1.5em; + overflow: hidden; +} + +/*-------------------------------------------------------------- +# Links +--------------------------------------------------------------*/ +a, +a:visited { + color: #999; + text-decoration: none; +} + +a:hover, +a:focus, +a:active { + color: #333; +} + +a:focus { + outline: thin dotted; +} + +a:hover, +a:active { + outline: 0; +} + +/* Hover effects */ + +.entry-content a, +.entry-content a:visited, +.entry-summary a, +.entry-summary a:visited, +.edit-link a, +.edit-link a:visited, +.widget a, +.widget a:visited, +.entry-meta a, +.entry-meta a:visited, +.entry-footer a, +.entry-footer a:visited, +.site-footer a, +.site-footer a:visited, +.entry-title a, +.entry-title a:visited, +.post-navigation a, +.post-navigation a:visited, +.posts-navigation a, +.posts-navigation a:visited, +.comment-navigation a, +.comment-navigation a:visited, +.widget_authors a strong, +.widget_authors a:visited strong, +.project-terms a, +.project-terms a:visited, +.author-bio a, +.author-bio a:visited { + border-bottom: 2px solid transparent; + transition: border-bottom-color 0.2s; +} + +.entry-content a:focus, +.entry-content a:hover, +.entry-summary a:focus, +.entry-summary a:hover, +.edit-link a:focus, +.edit-link a:hover, +.widget a:focus, +.widget a:hover, +.entry-meta a:focus, +.entry-meta a:hover, +.entry-footer a:focus, +.entry-footer a:hover, +.site-footer a:focus, +.site-footer a:hover, +.entry-title a:focus, +.entry-title a:hover, +.post-navigation a:focus, +.post-navigation a:hover, +.posts-navigation a:focus, +.posts-navigation a:hover, +.comment-navigation a:focus, +.comment-navigation a:hover, +.widget_authors a:focus strong, +.widget_authors a:hover strong, +.project-terms a:focus, +.project-terms a:hover, +.author-bio a:focus, +.author-bio a:hover { + border-bottom-color: currentColor; +} + +.widget ul li a:focus, +.widget ul li a:hover, +.jp-relatedposts-post a:focus, +.jp-relatedposts-post a:hover { + border-bottom-color: transparent; +} + +.entry-content a img, +.widget a img { + background: #fff; + box-shadow: 0 0 0 6px #fff; +} + +.site-footer .widget-area a img { + box-shadow: 0 0 0 6px #eee; +} + +.gallery-item a { + border: 0; +} + +/*-------------------------------------------------------------- +# Featured Image hover +--------------------------------------------------------------*/ + +.post-thumbnail { + margin-bottom: 1em; +} + +.post-thumbnail a img { + transition: opacity 0.2s; +} + +.post-thumbnail a:hover img, +.post-thumbnail a:focus img { + opacity: 0.7; +} + +/*-------------------------------------------------------------- +# Layout +--------------------------------------------------------------*/ +html { + box-sizing: border-box; +} + +*, +*::before, +*::after { + /* Inherit box-sizing to make it easier to change the property for components that leverage other behavior; see http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */ + box-sizing: inherit; +} + +body { + background: #fff; + /* Fallback for when there is no custom background color defined. */ +} + +#page { + position: relative; + -ms-word-wrap: break-word; + word-wrap: break-word; +} + +.wrap { + margin-left: auto; + margin-right: auto; + max-width: 1200px; + max-width: calc( 1200px - 1em ); + padding-left: 2em; + padding-right: 2em; +} + +.wrap::after { + clear: both; + content: ""; + display: block; +} + +/*-------------------------------------------------------------- +# Header +--------------------------------------------------------------*/ + +#masthead .wrap { + position: relative; +} + +.site-header { + background-color: #333; +} + +/* Header top */ +.header-top { + background-color: #29292a; + color: #fff; + letter-spacing: 0.05em; + text-align: center; + text-transform: uppercase; +} + +.header-top .wrap { + padding: 0; +} + +.header-top a, +.header-top a:visited { + color: #fff; + -webkit-transition: color 0.2s; + transition: color 0.2s; +} + +.header-top a:hover, +.header-top a:focus { + color: rgba(255,255,255,0.7); +} + +.site-top-content { + line-height: 1.5; + padding: 0.75em 1.5em; +} + +.main-navigation + .site-top-content { + padding-top: 0; +} + +.site-top-content span.site-top-content-2 { + color: #999; + display: block; +} + +/* Site branding */ +.site-branding { + color: #fff; + text-align: center; +} + +.site-branding a { + color: #fff; + text-decoration: none; + -webkit-transition: opacity 0.2s; + transition: opacity 0.2s; +} + +.site-branding a:hover, +.site-branding a:focus { + opacity: 0.7; +} + +.site-title { + font-family: "Work Sans", "Helvetica Neue", helvetica, arial, sans-serif; + font-size: 30px; + font-size: 1.875rem; + font-weight: 800; + letter-spacing: 0.08em; + margin: 0; + padding: 0; + text-transform: uppercase; +} + +.site-description { + font-size: 18px; + font-size: 1.125rem; + margin-bottom: 0; +} + +.site-description, +.site-description a { + color: #ccc; +} + +.site-logo-link img { + max-height: 100px; + width: auto; +} + +.custom-header-image { + background-position: center center; + background-size: cover; + padding: 10% 0; + position: relative; +} + +.no-header-image .custom-header-image { + padding: 5% 0; +} + +body:not(.no-header-image) .custom-header-image::before, +.lodestar-front-page .custom-header-image::before { + background: rgba(0,0,0,0.5); + bottom: 0; + content: ""; + left: 0; + position: absolute; + right: 0; + top: 0; +} + + +/*-------------------------------------------------------------- +# Main Navigation +--------------------------------------------------------------*/ + +.header-top .wrap::after { + display: none; +} + +.main-navigation { + clear: both; + display: block; +} + +.main-navigation ul { + background: #111; + display: none; + list-style: none; + margin: 0; + padding: 0 1.5em; + text-align: left; +} + +.main-navigation ul.nav-menu { + margin-bottom: 1em; + padding: 0 1.5em; +} + +.main-navigation ul ul { + padding: 0 0 0 1.5em; +} + +.main-navigation ul ul a { + letter-spacing: 0; + padding: 0.4em 0; + position: relative; + text-transform: none; +} + +.main-navigation a { + display: block; + padding: 0.75em 0; + text-decoration: none; +} + +/* Small menu. */ +.menu-toggle { + background-color: transparent; + border: 1px solid rgba(255,255,255,0.2); + box-shadow: none; + color: #fff; + display: inline-block; + font-size: 16px; + line-height: 1.5; + margin: 1em 0; + padding: 0.5em 1.0em; + text-shadow: none; +} + +.main-navigation.toggled ul { + display: block; +} + +.menu-toggle:hover, +.menu-toggle:focus { + background-color: transparent; + box-shadow: none; +} + +.menu-toggle::before { + content: "\f419"; + margin-right: 0.5em; + position: relative; + top: -2px; +} + +.toggled .menu-toggle::before { + content: "\f406"; +} + + +/*-------------------------------------------------------------- +# Front Page +--------------------------------------------------------------*/ + +.lodestar-front-page .site-content { + padding: 0; +} + +.lodestar-panel { + overflow: hidden; + position: relative; +} + +.panel-image { + background-position: center center; + background-size: cover; + position: relative; +} + +.panel-image::before { + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.3+100 */ + background: -moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.3) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.3) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.3) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#4d000000',GradientType=0 ); /* IE6-9 */ + bottom: 0; + content: ""; + left: 0; + right: 0; + position: absolute; + top: 100px; +} + +.lodestar-front-page article:not(.has-post-thumbnail):not(.lodestar-intro):not(.jetpack-portfolio):not(.jetpack-testimonial) { + border-top: 1px solid #ddd; +} + +.panel-content { + position: relative; +} + +.panel-content .wrap { + padding-bottom: 1.5em; + padding-top: 2em; +} + +.panel-content .entry-title { + color: #ccc; + text-align: center; +} + +/* One Column */ + +.one-column .panel-content .wrap { + background-color: #fff; + /* max-width: 905px; */ + max-width: 1000px; +} + +.child-pages { + margin-left: auto; + margin-right: auto; + max-width: 500px; + text-align: center; +} + +.child-page { + margin-bottom: 3em; +} + +/* Portfolio */ + +.lodestar-panel .project-archive-content { + text-align: center; +} + +.lodestar-panel .portfolio-projects { + margin-left: -10px; + margin-right: -10px; + padding-top: 2em; +} + +/* Testimonial */ + +.lodestar-panel .testimonials { + padding-top: 2em; +} + +.lodestar-panel .jetpack-testimonial { + padding-bottom: 0; +} + +body .lodestar-panel .jetpack-testimonial .entry-header { + padding-top: 1.0em; +} + +body:not(.logged-in) .lodestar-panel .jetpack-testimonial .entry-header { + padding-top: 2.0em; +} + +.lodestar-panel .jetpack-testimonial .entry-header h2 { + color: #333; +} + +.lodestar-panel .jetpack-testimonial .entry-content { + border: 0; + font-size: 1.0em; + padding: 0; +} + +.lodestar-panel .jetpack-testimonial .edit-link { + text-align: left; +} + +.lodestar-panel .testimonial-about { + margin: 0; +} + +/* Recent Posts */ + +.lodestar-panel .recent-posts { + padding-top: 2em; +} + +.lodestar-front-page .lodestar-panel .recent-posts .post { + border-top: 0 !important; + padding-bottom: 2em; +} + +.lodestar-panel .recent-posts .entry-header { + margin-bottom: 1em; +} + +.panel-content .wrap .recent-posts .post h2 { + font-size: 20px; + font-size: 1.25rem; + text-align: left; +} + +.lodestar-panel .recent-posts .edit-link { + text-align: left; +} + +/* Panel edit link */ + +.lodestar-panel .edit-link { + display: block; + font-size: 85%; + letter-spacing: 0.08em; + margin: 0.3em 0 0; + text-align: center; + text-transform: uppercase; +} + +/* First panel */ + +.lodestar-intro { + margin-bottom: 0; + padding: 1.5em 0; +} + +.lodestar-intro .entry-content { + color: #555; + font-size: 20px; + font-size: 1.25rem; + text-align: center; +} + +.lodestar-intro .entry-content *:last-child { + margin-bottom: 0; +} + +.lodestar-intro .edit-link { + display: block; + font-size: 85%; + letter-spacing: 0.08em; + margin-top: 2em; + text-align: center; + text-transform: uppercase; +} + +/*-------------------------------------------------------------- +## Regular Content +--------------------------------------------------------------*/ + +.site-content { + padding: 2.5em 0 0; +} + +/*-------------------------------------------------------------- +## Posts +--------------------------------------------------------------*/ + +/* Post Landing Page */ + +.sticky { + display: block; +} + +.entry-title a { + color: #333; + text-decoration: none; + transition: color 0.2s; +} + +.entry-title a:hover, +.entry-title a:focus { + color: #666; +} + +.entry-meta { + color: #aaa; +} + +.byline, +.updated:not(.published) { + display: none; +} + +.single .byline, +.group-blog .byline { + display: inline; +} + +.date-hidden .byline-prefix, +.date-hidden.author-hidden .cat-prefix, +.blog .sticky .byline-prefix, +.blog.author-hidden .sticky .cat-prefix { + text-transform: capitalize; +} + +.blog .sticky .posted-on { + display: none; +} + +/* Entry Header */ + +.entry-header { + margin-bottom: 2.5em; +} + +.entry-header .entry-title { + margin-bottom: 0.25em; +} + +/* Entry content */ + +.entry-content h1, +.entry-content h2 { + color: #ccc; +} + +.entry-content h3, +.entry-content h4 { + color: #333; +} + +.entry-content h5, +.entry-content h6 { + color: #666; +} + +/* Entry footer */ +.entry-footer .cat-links, +.entry-footer .tags-links, +.entry-footer .comments-link, +.entry-footer .edit-link { + margin-right: 2em; +} + +.entry-footer span:last-child { + margin-right: 0; +} + +/* Blog landing, search, archives */ + +.blog .post, +.archive:not(.woocommerce-active) .post, +.search .post, +.search .page, +.archive .jetpack-portfolio, +.search .jetpack-portfolio, +.lodestar-panel .jetpack-portfolio { + padding-bottom: 2em; +} + +body:not(.lodestar-front-page) .entry-header, +.lodestar-panel .jetpack-portfolio .entry-header, +body:not(.lodestar-front-page) .entry-footer, +.lodestar-panel .jetpack-portfolio .entry-footer { + padding: 1em 0; +} + +body:not(.lodestar-front-page) .entry-header, +.lodestar-panel .jetpack-portfolio .entry-header, +body:not(.lodestar-front-page) .entry-content, +.lodestar-panel .jetpack-portfolio .entry-content, +body:not(.lodestar-front-page) .entry-footer, +.lodestar-panel .jetpack-portfolio .entry-footer, +body:not(.lodestar-front-page) .post-navigation, +body:not(.lodestar-front-page) #comments { + margin: auto; +} + +body:not(.lodestar-front-page) .entry-header, +.lodestar-panel .jetpack-portfolio .entry-header { + padding-top: 0; +} + + +/* Single Posts */ + +.post-navigation .nav-links { + border-bottom: 1px solid #ccc; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 1em 0; +} + +.nav-subtitle { + display: block; + font-size: 90%; + font-weight: bold; + font-weight: 800; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +.post-navigation .nav-next { + margin-top: 1.5em; +} + +/* Author Bio */ + +.entry-author { + border-top: 1px solid #ccc; + margin: 2em 0 0; + padding: 2em 0 0; +} + +.entry-author .author-avatar { + float: left; + margin-right: 1em; +} + +.entry-author .avatar-container { + border-radius: 30px; + display: block; + height: 60px; + overflow: hidden; + width: 60px; +} + +.entry-author h2, +.entry-author h3 { + display: inline; + float: none; + font-size: 16px; + font-size: 1rem; + margin: 0; + padding: 0; +} + +.entry-author .author-heading, +.entry-author .author-bio { + float: right; + width: calc(100% - 80px); +} + +.entry-author .author-link::before { + content: ""; + display: block; +} + +/*-------------------------------------------------------------- +## Pages +--------------------------------------------------------------*/ +.page-header { + padding-bottom: 2em; +} + +.page-links { + clear: both; + margin: 0 0 1.5em; +} + +.page-links span { + margin: 0 0.25em; +} + +/* 404 page */ + +.error404 .page-content .search-form, +.search .page-content .search-form { + margin-bottom: 3em; +} + +/*-------------------------------------------------------------- +## Jetpack Testimonial +--------------------------------------------------------------*/ + +.jetpack-testimonial { + padding-bottom: 4em; +} + +.jetpack-testimonial .post-thumbnail { + border-radius: 50px; + display: block; + float: left; + height: 80px; + margin: 0 1em 0 0; + overflow: hidden; + width: 80px; +} + +.testimonial-about { + margin-left: 30px; + margin-top: -70px; +} + +.testimonial-about .entry-header { + float: left; + min-height: 80px; + vertical-align: middle; +} + +body .jetpack-testimonial .entry-header { + padding-top: 0.5em; +} + +body:not(.logged-in) .jetpack-testimonial .entry-header { + padding-top: 1.5em; +} + +.jetpack-testimonial .entry-header h2 { + font-size: 1em; +} + +.jetpack-testimonial .entry-content { + border: 2px solid #eee; + font-size: 1.2em; + padding: 30px 30px 70px; +} + +.jetpack-testimonial .entry-content p:last-child { + margin-bottom: 0.75em +} + +/*-------------------------------------------------------------- +## Jetpack Portfolio +--------------------------------------------------------------*/ + +.portfolio-content .page-content { + margin-bottom: 2.0em; +} + +.project-terms { + margin-bottom: 1.5em; +} + +.project-terms ul, +.project-terms ul li { + display: inline; + list-style: none; + margin: 0; + padding: 0; +} + +.project-terms a { + display: inline-block; + margin: 0 0.3em; +} + +.project-terms a.current-type { + color: #333; +} + +.portfolio-wrapper { + padding-bottom: 2em; + position: relative; +} + +/*-------------------------------------------------------------- +# Comments +--------------------------------------------------------------*/ + +#comments { + padding-top: 2em; +} + +.comments-title { + font-size: 24px; + font-size: 1.5rem; +} + +.comment-list, +.comment-list .children { + list-style: none; + margin: 0; + padding: 0; +} + +.comment-body { + margin-bottom: 3em; + padding-left: 100px; +} + +.children { + padding-left: 40px; +} + +.comment-content p:last-child { + margin-bottom: 0; +} + +.comment-content a { + word-wrap: break-word; +} + +.bypostauthor { + position: relative; +} + +.bypostauthor::before { + background: #333; + border-radius: 30px; + color: #fff; + content: "\f408"; + display: block; + height: 22px; + left: 0; + line-height: 21px; + position: absolute; + text-align: center; + top: 0; + width: 22px; + z-index: 2; +} + +.children .bypostauthor::before { + left: 20px; +} + +.comment-author { + position: relative; +} + +.comment-author .avatar-container { + border-radius: 70px; + display: block; + float: left; + height: 80px; + left: -100px; + overflow: hidden; + position: absolute; + width: 80px; +} + +.children .comment-author .avatar-container { + height: 60px; + left: -80px; + width: 60px; +} + +.no-comments, +.comment-awaiting-moderation { + font-style: italic; +} + +/*-------------------------------------------------------------- +# Widgets +--------------------------------------------------------------*/ + +.widget { + padding-bottom: 3em; +} + +#secondary .widget, +#colophon .widget { + font-size: 90%; +} + +h2.widget-title { + font-size: 18px; + font-size: 1.125rem; +} + +.widget-title a { + color: inherit; +} + +/* widget forms */ +.widget input:not([type="button"], [type="submit"], [type="reset"]), +.widget select, +.widget textarea { + width: 100%; +} + + +/* widget lists */ +.widget ul { + list-style: none; + margin: 0; +} + +.widget ul li { + border-bottom: 1px solid #ddd; + border-top: 1px solid #ddd; + padding: 0.5em 0; +} + +.widget ul li + li { + margin-top: -1px; +} + +.widget ul li ul { + padding: 0; + position: relative; +} + +.widget ul li li { + border: 0; + padding: 6px 0 6px 1.5rem; +} + +/* Widget lists of links */ + +.widget_top-posts ul li ul, +.widget_rss_links ul li ul, +.widget-grofile ul.grofile-links li ul, +.widget_pages ul li ul, +.widget_meta ul li ul { + bottom: 0; +} + +.widget_nav_menu ul li li, +.widget_top-posts ul li, +.widget_top-posts ul li li, +.widget_rss_links ul li, +.widget_rss_links ul li li, +.widget-grofile ul.grofile-links li, +.widget-grofile ul.grofile-links li li { + padding-bottom: 0; +} + +/* Widget markup */ + +.widget .post-date, +.widget .rss-date { + font-size: .81em; +} + +/* Text Widget */ + +.widget_text { + -ms-word-wrap: break-word; + word-wrap: break-word; +} + +/* Archives, Categories, Menu, Pages, Recent Comments, Recent Posts */ + +.widget .rss-date { + display: block; +} + +/* Contact Info Widget */ + +.widget_contact_info .contact-map { + margin-bottom: 0.5em; +} + +/* Goodreads */ + +.widget_goodreads div[class^="gr_custom_container"] { + background: transparent; + border: 0; + padding: 0; +} + +.widget_goodreads div[class^="gr_custom_each_container"] { + border-bottom: 0; +} + +.widget_goodreads div[class^="gr_custom_each_container"] a { + color: inherit; +} + +.widget_goodreads div[class^="gr_custom_author"] { + font-size: 12px; + font-size: 0.75rem; + letter-spacing: 0.05em; + text-transform: uppercase; +} + +/* Gravatar */ + +.widget-grofile h4 { + font-size: 16px; + font-size: 1rem; + margin-bottom: 0; +} + +/* Recent Comments */ + +.widget_recent_comments table, +.widget_recent_comments th, +.widget_recent_comments td { + border: 0; +} + +/* Recent Posts widget */ + +.widget_recent_entries .post-date { + display: block; +} + +/* RSS Widget */ + +.widget_rss ul li { + padding: 1em 0; +} + +/* Search Widget */ + +.search-form { + position: relative; +} + +.search-form input[type="search"] { + display: block; + padding: 8px; + width: 100%; +} + +.search-form .search-submit { + position: absolute; + right: 0; + top: 0; +} + +/* Social Icons widget */ + +.widget_wpcom_social_media_icons_widget ul li { + border: 0; +} + +.widget_wpcom_social_media_icons_widget ul li a { + -webkit-transition: opacity 0.3s; + transition: opacity 0.3s; +} + +.widget_wpcom_social_media_icons_widget ul li a:hover, +.widget_wpcom_social_media_icons_widget ul li a:focus { + opacity: 0.7; +} + +/* Tag and Category Cloud widgets */ + +.tagcloud, +.widget_tag_cloud, +.wp_widget_tag_cloud { + line-height: 1.5; +} + +.widget .tagcloud a, +.widget .tagcloud a:visited, +.widget.widget_tag_cloud a, +.widget.widget_tag_cloud a:visited, +.wp_widget_tag_cloud a, +.wp_widget_tag_cloud a:visited { + border: 1px solid #ddd; + display: inline-block; + float: left; + font-size: 1rem !important; /* !important to overwrite inline styles */ + margin: 4px 4px 0 0 !important; + padding: 4px 10px 5px !important; + position: relative; + -webkit-transition: border-color 0.2s; + transition: border-color 0.2s; + width: auto; + -ms-word-wrap: break-word; + word-wrap: break-word; + z-index: 0; +} + +.widget .tagcloud a:hover, +.widget .tagcloud a:focus, +.widget.widget_tag_cloud a:hover, +.widget.widget_tag_cloud a:focus, +.wp_widget_tag_cloud a:hover, +.wp_widget_tag_cloud a:focus { + border-color: #ccc; + text-decoration: none; +} + +/* Calendar widget */ + +.widget_calendar th, +.widget_calendar td { + text-align: center; +} + +.widget_calendar tfoot td { + border: 0; +} + +/*-------------------------------------------------------------- +# Footer +--------------------------------------------------------------*/ + +.footer-image { + background-position: center center; + background-size: cover; + padding-top: 50%; + position: relative; +} + +.lodestar-customizer .footer-image:not(.has-footer-image) { + padding-top: 0; +} + +.footer-image::before { + position: absolute; + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#000000+0,000000+100&0+0,0.25+100 */ + background: -moz-linear-gradient(top, rgba(0,0,0,0) 0%, rgba(0,0,0,0.25) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(0,0,0,0) 0%,rgba(0,0,0,0.25) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(0,0,0,0) 0%,rgba(0,0,0,0.25) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00000000', endColorstr='#40000000',GradientType=0 ); /* IE6-9 */ + content: ""; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +/* Social nav */ + +.jetpack-social-navigation { + background: #fff; + border-top: 1px solid #eee; + padding: 20px 0; + text-align: center; +} + +.site-footer .jetpack-social-navigation ul { + margin-bottom: 0; +} + +.site-footer .jetpack-social-navigation a { + background: #ccc; + border-radius: 40px; + color: #fff; + display: inline-block; + height: 35px; + line-height: 35px; + margin: 0 5px; + position: relative; + transition: background 0.2s; + width: 35px; +} + +.site-footer .jetpack-social-navigation a:hover, +.site-footer .jetpack-social-navigation a:focus { + background: #bbb; +} + +.site-footer .jetpack-social-navigation .icon { + height: 16px; + left: 50%; + margin-left: -8px; + margin-top: -8px; + position: absolute; + top: 50%; + width: 16px; +} + + +/* Footer widgets */ + +.site-footer .widget-area { + background-color: #eee; + padding-bottom: 2em; + padding-top: 4em; +} + +/* Site info */ + +.site-info { + background-color: #222; + color: #fff; + letter-spacing: 0.05em; + text-align: center; + text-transform: uppercase; +} + +.site-info .wrap { + padding-bottom: 1.5em; + padding-top: 1.5em; +} + +.site-info a, +.site-info:visited { + color: #fff; + text-decoration: none; +} + +.site-info .wrap .sep { + margin: 0; + display: block; + visibility: hidden; + height: 0; + width: 100%; +} + +/*-------------------------------------------------------------- +# Infinite scroll +--------------------------------------------------------------*/ +#infinite-handle { + clear: both; + padding: 0 0 4em; + text-align: center; +} + +.portfolio-projects #infinite-handle { + padding: 2em 0; +} + +#infinite-handle span { + background: transparent; + border-radius: 0; + font-size: inherit; + padding: 0; +} + +.infinite-loader { + clear: both; + padding: 2.5em 0 4em; +} + +.portfolio-projects .infinite-loader { + padding: 3em 0 2em; +} + +.infinite-loader .spinner { + left: 50% !important; /* !important to override inline styles */ + margin-left: -9px; + top: 0 !important; /* !important to override inline styles */ +} + +/* Globally hidden elements when Infinite Scroll is supported and in use. */ +.infinite-scroll .posts-navigation, +.infinite-scroll.neverending .site-footer { + /* Theme Footer (when set to scrolling) */ + display: none; +} + +/* When Infinite Scroll has reached its end we need to re-display elements that were hidden (via .neverending) before. */ +.infinity-end.neverending .site-footer { + display: block; +} + +#infinite-footer .container { + max-width: 100%; +} + +/*-------------------------------------------------------------- +# WP.com-specific +--------------------------------------------------------------*/ + +/* Post Flair */ + +.entry-content div.sharedaddy h3, +.entry-content div.sharedaddy h3.sd-title, +.entry-content div#jp-relatedposts h3.jp-relatedposts-headline { + color: #666; + font-family: "Karla", "Helvetica Neue", helvetica, arial, sans-serif; + font-weight: normal; + font-size: 14px; + font-size: 0.85rem; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.entry-content div#jp-relatedposts h3.jp-relatedposts-headline em { + font-weight: normal; +} + +.sd-rating + .sd-sharing-enabled { + padding-top: 1em; + margin: 1em 0; +} + +.jp-relatedposts-post-img { + margin-bottom: 0.5em; +} + +#wpstats { + display: none; +} + +/*-------------------------------------------------------------- +# Media +--------------------------------------------------------------*/ +img { + height: auto; /* Make sure images are scaled correctly. */ + max-width: 100%; /* Adhere to container width. */ +} + +.page-content .wp-smiley, +.entry-content .wp-smiley, +.comment-content .wp-smiley { + border: none; + margin-bottom: 0; + margin-top: 0; + padding: 0; +} + +/* Make sure embeds and iframes fit their containers. */ +embed, +iframe, +object { + margin-bottom: 1.5em; + max-width: 100%; +} + +.wp-caption { + margin-bottom: 1.5em; + max-width: 100%; +} + +.wp-caption img[class*="wp-image-"] { + display: block; + margin-left: auto; + margin-right: auto; +} + +.wp-caption .wp-caption-text { + margin: 0.8075em 0; +} + +.wp-caption-text { + text-align: center; +} + +/*-------------------------------------------------------------- +## Galleries +--------------------------------------------------------------*/ +.gallery { + margin-bottom: 1.5em; +} + +.gallery-item { + display: inline-block; + text-align: center; + vertical-align: top; + width: 100%; +} + +.gallery-columns-1 .gallery-item { + padding-bottom: 1em; +} + +.gallery-columns-2 .gallery-item { + max-width: 50%; + padding: 0 0.5em 1em; +} + +.gallery-columns-3 .gallery-item { + max-width: 33.33%; + padding: 0 0.5em 1em; +} + +.gallery-columns-4 .gallery-item { + max-width: 25%; + padding: 0 0.5em 1em; +} + +.gallery-columns-5 .gallery-item { + max-width: 20%; + padding: 0 0.5em 1em; +} + +.gallery-columns-6 .gallery-item { + max-width: 16.66%; + padding: 0 0.5em 1em; +} + +.gallery-columns-7 .gallery-item { + max-width: 14.28%; + padding: 0 0.25em 1em; +} + +.gallery-columns-8 .gallery-item { + max-width: 12.5%; + padding: 0 0.25em 1em; +} + +.gallery-columns-9 .gallery-item { + max-width: 11.11%; + padding: 0 0.25em 1em; +} + +.gallery-columns-2, +.gallery-columns-3, +.gallery-columns-4, +.gallery-columns-5, +.gallery-columns-6 { + margin-left: -0.5em; + margin-right: -0.5em; +} + +.gallery-columns-7, +.gallery-columns-8, +.gallery-columns-9 { + margin-left: -0.25em; + margin-right: -0.25em; +} + +.gallery-caption { + display: block; + font-size: 0.9; +} + + +/*-------------------------------------------------------------- +# Customizer +--------------------------------------------------------------*/ +/* Hide this until we're in the Customizer */ +.lodestar-panel-title { + display: none; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel { + /* Colour-code all panels (add 1 to account for #lodestar-hero, so 2 is actually panel 1)*/ +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel::after { + border: 2px dashed; + bottom: 1em; + content: ''; + display: block; + left: 1em; + position: absolute; + right: 1em; + top: 1em; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel .lodestar-panel-title { + color: #fff; + display: inline-block; + font-size: 14px; + font-size: 0.875rem; + font-weight: bold; + letter-spacing: 1px; + padding: 5px 10px; + position: absolute; + right: 3.2em; + text-transform: uppercase; + top: 3.2em; + transform: translate(3px, -3px); + z-index: 3; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(1) .lodestar-panel-title { + background: #a64b55; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(1)::after { + border-color: #a64b55; + color: #a64b55; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(2) .lodestar-panel-title { + background: #b569a2; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(2)::after { + border-color: #b569a2; + color: #b569a2; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(3) .lodestar-panel-title { + background: #8f68bd; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(3)::after { + border-color: #8f68bd; + color: #8f68bd; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(4) .lodestar-panel-title { + background: #575ebd; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel:nth-of-type(4)::after { + border-color: #575ebd; + color: #575ebd; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel.footer-image .lodestar-panel-title { + background: #55a1bd; +} + +.lodestar-customizer.lodestar-front-page .lodestar-panel.footer-image::after { + border-color: #55a1bd; + color: #55a1bd; +} + +/* Add a highlight class to improve Customizer behaviour */ +@-webkit-keyframes flash { + 0%, + 20%, + 40%, + 60%, + 80%, + 100% { + opacity: 1; + } + + 10%, + 30%, + 50%, + 70%, + 90% { + opacity: 0; + } +} + +@keyframes flash { + 0%, + 20%, + 40%, + 60%, + 80%, + 100% { + opacity: 1; + } + + 10%, + 30%, + 50%, + 70%, + 90% { + opacity: 0; + } +} + +.label-placeholder { + clip: rect(1px, 1px, 1px, 1px); +} + +.lodestar-front-page.lodestar-customizer #primary article.panel-placeholder { + border: 0; +} + +.lodestar-customizer .label-placeholder.lodestar-highlight { + clip: auto; + display: block; + height: 112px; +} + +.lodestar-highlight::after { + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-name: flash; + animation-name: flash; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +/*-------------------------------------------------------------- +## Media Queries +--------------------------------------------------------------*/ + +@media screen and (min-width: 30em) { + .site-top-content span.site-top-content-2 { + display: inline; + margin-left: 1.5em; + } + + .custom-header-image { + padding: 20%; + } +} + +@media screen and (min-width: 60em) { + + /* Typography */ + h1 { + font-size: 34px; + font-size: 2.125rem; + } + + h2 { + font-size: 28px; + font-size: 1.75rem; + } + + h3 { + font-size: 24px; + font-size: 1.5rem; + } + + h4 { + font-size: 20px; + font-size: 1.25rem; + } + + h5 { + font-size: 16px; + font-size: 1rem; + } + + h6 { + font-size: 14px; + font-size: 0.875rem; + } + + /* Layout */ + + body:not(.lodestar-front-page) #primary { + margin: auto; + max-width: 700px; + width: 64%; + } + + .has-sidebar #primary { + float: left; + } + + .has-sidebar #secondary { + float: right; + width: 30%; + } + + .error404 #primary { + float: none; + } + + /* Site branding */ + .header-top .wrap { + padding: 1em; + } + + .site-header-fixed.header-top .wrap, + .site-header-hidden.header-top .wrap { + padding-bottom: 0.25em; + padding-top: 0.25em; + } + + .custom-header-image { + height: 750px; + height: 75vh; + height: calc(75vh - 85px); + margin-top: 85px; + } + + .no-header-image .custom-header-image { + min-height: 20vh; + } + + .site-branding { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + } + + .site-branding .wrap { + margin-left: 0; + margin-right: 0; + } + + .site-title { + font-size: 60px; + font-size: 3.75rem; + } + + .site-description { + font-size: 24px; + font-size: 1.5rem; + } + + .site-logo-link img { + max-height: 200px; + } + + /* Header */ + .header-top { + left: 0; + position: absolute; + top: 0; + width: 100%; + z-index: 3; + transition: transform 0.2s; + } + + .site-header-fixed.header-top, + .site-header-hidden.header-top { + position: fixed; + top: 0; + width: 100%; + z-index: 1999; + } + + .site-header-fixed.header-top { + -webkit-animation: header-down 0.2s ease-in; + animation: header-down 0.2s ease-in; + -webkit-transform: translate(0); + transform: translate(0); + } + + .site-header-hidden.header-top { + -webkit-animation: header-up 0.5s ease-in; + animation: header-up 0.5s ease-in; + -webkit-transform: translate(-100%); + transform: translate(-100%); + } + + .admin-bar .site-header-fixed.header-top { + top: 32px; + } + + @-webkit-keyframes header-down { + from { + -webkit-transform: translate(0, -100%); + } + + to { + -webkit-transform: translate(0); + } + } + + @keyframes header-down { + from { + transform: translate(0, -100%); + } + + to { + transform: translate(0); + } + } + + @-webkit-keyframes header-up { + from { + -webkit-transform: translate(0); + } + + to { + -webkit-transform: translate(0, -100%); + } + } + + @keyframes header-up { + from { + transform: translate(0); + } + + to { + transform: translate(0, -100%); + } + } + + /* Front Page */ + + .lodestar-front-page .custom-header { + margin-top: 0 !important; /* Override styles added with JavaScript */ + } + + .lodestar-front-page .custom-header-image { + height: 1200px; + height: 100vh; + height: calc( 100vh - 85px ); + max-height: 100%; + } + + .lodestar-intro { + padding: 4em 0; + } + + .lodestar-intro .entry-content { + font-size: 30px; + font-size: 1.875rem; + } + + .panel-content .wrap { + padding-bottom: 6.5em; + padding-top: 6.5em; + } + + .panel-image { + height: 100vh; + max-height: 1200px; + } + + /* One Column */ + .one-column .wrap { + padding-left: 1em; + padding-right: 1em; + } + .one-column .panel-content .entry-content { + padding-left: 15%; + padding-right: 15%; + } + + .one-column .panel-content .wrap h1, + .one-column .panel-content .wrap h2, + .one-column .panel-content .wrap h3, + .one-column .panel-content .wrap h4, + .one-column .panel-content .wrap h5, + .one-column .panel-content .wrap h6 { + padding-top: 1.5em; + text-align: center; + } + + .one-column .panel-content .wrap h1:first-child, + .one-column .panel-content .wrap h2:first-child, + .one-column .panel-content .wrap h3:first-child, + .one-column .panel-content .wrap h4:first-child, + .one-column .panel-content .wrap h5:first-child, + .one-column .panel-content .wrap h6:first-child { + padding-top: 0; + } + + .one-column.has-post-thumbnail .panel-content .wrap { + margin-top: -6.5em; + } + + /* Two Column */ + .two-column .panel-content .entry-content { + -webkit-column-count: 2; + -moz-column-count: 2; + column-count: 2; + -webkit-column-gap: 2em; + -moz-column-gap: 2em; + column-gap: 2em; + } + + /* Testimonials on front page */ + .one-column .panel-content .testimonials .entry-content { + padding-left: 0; + padding-right: 0; + } + + .panel-content .testimonials .jetpack-testimonial { + float: left; + width: 47.5%; + } + + .panel-content .testimonials .jetpack-testimonial:first-child { + margin-right: 5%; + } + + .two-column .panel-content .jetpack-testimonial .entry-content { + -webkit-column-count: 1; + -moz-column-count: 1; + column-count: 1; + -webkit-column-gap: 0; + -moz-column-gap: 0; + column-gap: 0; + } + + /* Blog Posts on front page */ + .one-column .panel-content .recent-posts .entry-content { + padding-left: 0; + padding-right: 0; + } + + .lodestar-panel .panel-content .recent-posts .post { + float: left; + padding-bottom: inherit; + width: 47.5%; + } + + .panel-content .recent-posts .entry-title { + text-align: left; + } + + .panel-content .recent-posts .post:first-child { + margin-right: 5%; + } + + .two-column .panel-content .post .entry-content { + -webkit-column-count: 1; + -moz-column-count: 1; + column-count: 1; + -webkit-column-gap: 0; + -moz-column-gap: 0; + column-gap: 0; + } + + /* Main Navigation */ + .menu-toggle { + display: none; + } + + .main-navigation { + width: auto; + } + + .main-navigation ul { + background: transparent; + display: block; + padding: 0; + } + + .main-navigation ul.nav-menu { + margin-bottom: 0; + padding: 0; + text-align: center; + } + + .has-top-content .main-navigation ul.nav-menu { + text-align: left; + } + + .main-navigation li { + display: inline-block; + position: relative; + } + + .main-navigation li li { + display: block; + } + + .main-navigation a { + padding: 1em 1.25em; + } + + .site-header-fixed.header-top .main-navigation a, + .site-header-hidden.header-top .main-navigation a { + padding-bottom: 0.75em; + padding-top: 0.75em; + } + + .main-navigation a:hover, + .main-navigation a:focus { + color: #fff; + } + + .main-navigation li:hover, + .main-navigation li:focus, + .main-navigation a:hover, + .main-navigation a:focus { + background: #151515; + } + + .main-navigation ul ul { + padding: 0.5em 0; + position: absolute; + top: 100%; + left: -999em; + z-index: 99999; + } + + .main-navigation ul ul ul { + left: -999em; + margin-top: -0.5em; + top: 0; + } + + .main-navigation ul ul, + .main-navigation ul ul ul ul, + .main-navigation ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul a:hover, + .main-navigation ul ul ul a:focus, + .main-navigation ul ul ul li:hover, + .main-navigation ul ul ul li:focus, + .main-navigation ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul li:focus { + background: #151515; + } + + .main-navigation ul ul ul, + .main-navigation ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul ul ul ul ul ul ul ul ul ul, + .main-navigation ul ul a:hover, + .main-navigation ul ul a:focus, + .main-navigation ul ul li:hover, + .main-navigation ul ul li:focus, + .main-navigation ul ul ul ul a:hover, + .main-navigation ul ul ul ul a:focus, + .main-navigation ul ul ul ul li:hover, + .main-navigation ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul li:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul a:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul a:focus, + .main-navigation ul ul ul ul ul ul ul ul ul ul li:hover, + .main-navigation ul ul ul ul ul ul ul ul ul ul li:focus { + background: #29292a; + } + + .main-navigation ul li.current_page_item > a, + .main-navigation ul li.current-menu-item > a, + .main-navigation ul li.current_page_ancestor > a { + background: #151515; + } + + .main-navigation ul ul li:hover > ul, + .main-navigation ul ul li.focus > ul { + left: 100%; + } + + .main-navigation ul ul a { + padding: 0.75em 1.25em; + width: 250px; + } + + .main-navigation ul li:hover > ul, + .main-navigation ul li.focus > ul { + left: auto; + } + + .main-navigation .menu-item-has-children > a::after, + .main-navigation .page_item_has_children > a::after { + content: "\f431"; + display: inline; + left: 2px; + position: relative; + top: -2px; + } + + .main-navigation ul ul .menu-item-has-children > a::after, + .main-navigation ul ul .page_item_has_children > a::after { + margin-top: -10px; + left: auto; + position: absolute; + right: 1.0em; + top: 50%; + -webkit-transform: rotate(-90deg); /* Chrome, Safari, Opera */ + -ms-transform: rotate(-90deg); /* IE 9 */ + transform: rotate(-90deg); + } + + .header-top .wrap { + display: table; + width: 100%; + } + + .site-top-content, + .main-navigation { + display: table-cell; + } + + .site-top-content { + display: none; + } + + .has-top-content .site-top-content { + display: table-cell; + } + + .has-top-content .main-navigation { + width: 65%; + } + + .has-top-content .site-top-content, + .has-top-content .main-navigation + .site-top-content { + width: 35%; + padding: 1em 0 1em 2em; + text-align: right; + } + + .site-header-fixed .site-top-content, + .site-header-hidden .site-top-content, + .site-header-fixed .main-navigation + .site-top-content, + .site-header-hidden .main-navigation + .site-top-content { + padding-bottom: 1em; + padding-top: 1em; + } + + /* Posts */ + .site-content { + padding: 4.5em 0 0; + } + + .comment-navigation .nav-previous, + .posts-navigation .nav-previous, + .post-navigation .nav-previous { + float: left; + width: 50%; + } + + .comment-navigation .nav-next, + .posts-navigation .nav-next, + .post-navigation .nav-next { + float: right; + text-align: right; + width: 50%; + } + + .nav-next, + .post-navigation .nav-next { + margin-top: 0; + } + + .comment-list .children { + margin-left: 30px; + } + + .comment-meta { + border-bottom: 1px solid #ddd; + padding-bottom: 0.5em; + margin-bottom: 0.5em; + } + + .comment-author { + float: left; + } + + .comment-metadata { + float: right; + } + + .comment-metadata .edit-link::before, + .pingback .edit-link::before { + content: "\2022"; + display: inline-block; + margin: 0 0.5em; + } + + /* Blog, archive, search */ + + .blog .post, + .archive:not(.woocommerce-active) .post, + .search .post, + .search .page { + padding-bottom: 5em; + } + + /* Portfolio */ + + body.post-type-archive-jetpack-portfolio #primary, + body.tax-jetpack-portfolio-type #primary, + body.tax-jetpack-portfolio-tag #primary, + body.page-template-portfolio-page:not(.lodestar-front-page) #primary { + float: none; + max-width: 1200px; + width: auto; + } + + .post-type-archive-jetpack-portfolio .entry-header, + .tax-jetpack-portfolio-type .entry-header, + .tax-jetpack-portfolio-tag .entry-header, + .page-template-portfolio-page:not(.lodestar-front-page) .entry-header, + .portfolio-content, + .page-template-portfolio-page:not(.lodestar-front-page) .entry-content, + .project-terms { + text-align: center; + } + + .portfolio-projects article { + background: #111; + float: left; + height: 0; + margin: 0 10px 20px; + overflow: hidden; + padding-top: 28.6%; + position: relative; + width: 48%; + width: calc( 50% - 20px ); + } + + .portfolio-projects article.hide { + display: none; + } + + .portfolio-wrapper { + margin: 0 -10px; + } + + .portfolio-projects .post-thumbnail { + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + } + + .portfolio-projects .project-archive-content, + .portfolio-projects .project-archive-content .entry-meta, + .portfolio-projects .project-archive-content a { + color: #bbb; + } + + .portfolio-projects .entry-title a, + .portfolio-projects .entry-title a:hover, + .portfolio-projects .entry-title a:focus, + .portfolio-projects .project-archive-content a:hover, + .portfolio-projects .project-archive-content a:focus { + color: #eee; + } + + .portfolio-projects .project-archive-content { + bottom: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 1.5em; + position: absolute; + top: 0; + vertical-align: middle; + width: 100%; + } + + .portfolio-projects article.has-post-thumbnail .project-archive-content { + opacity: 0; + } + + .portfolio-projects .project-archive-content .entry-header, + .portfolio-projects .project-archive-content .entry-meta, + .portfolio-projects .project-archive-content .entry-footer { + margin-bottom: 0; + padding: 0 0 0.5em; + text-align: center; + } + + .portfolio-projects .post-thumbnail a:hover img, + .portfolio-projects .post-thumbnail a:focus img, + .portfolio-projects article:hover .project-archive-content { + opacity: 1.0; + } + + .portfolio-projects article .post-thumbnail { + background: #333; + transition: opacity 0.2s; + } + + .portfolio-projects article:hover .post-thumbnail { + opacity: 0.15; + } + + /* Isotope animations */ + .isotope, + .isotope .isotope-item { + -webkit-transition-duration: 0.8s; + -moz-transition-duration: 0.8s; + -ms-transition-duration: 0.8s; + -o-transition-duration: 0.8s; + transition-duration: 0.8s; + } + + .isotope { + -webkit-transition-property: height, width; + -moz-transition-property: height, width; + -ms-transition-property: height, width; + -o-transition-property: height, width; + transition-property: height, width; + } + + .isotope .isotope-item { + -webkit-transition-property: -webkit-transform, opacity; + -moz-transition-property: -moz-transform, opacity; + -ms-transition-property: -ms-transform, opacity; + -o-transition-property: -o-transform, opacity; + transition-property: transform, opacity; + } + + /* Footer */ + .footer-image { + height: 100vh; + padding: 0; + } + + html:not(.no-background-fixed) .footer { + background-attachment: fixed; + } + + .lodestar-customizer .footer-image:not(.has-footer-image) { + height: 0; + } + + .site-footer .widget-column { + float: left; + margin-right: 5%; + width: 30%; + } + + .site-footer .widget-column:last-child { + margin-right: 0; + } + + .site-info .wrap { + padding-bottom: 2.5em; + padding-top: 2.5em; + } + + .site-info .wrap .sep { + margin: 0 0.5em; + display: inline; + visibility: visible; + height: auto; + width: auto; + } +} + +@media screen and ( min-width: 65em ) { + html:not(.no-background-fixed) .custom-header-image, + html:not(.no-background-fixed) .lodestar-front-page .custom-header-image, + html:not(.no-background-fixed) .panel-image { + background-attachment: fixed; + } +} + +@media screen and ( min-width: 70em ) { + /* Front Page panels */ + .one-column .panel-content .portfolio-projects, + .one-column .panel-content .testimonials, + .one-column .panel-content .recent-posts { + margin-left: -76px; + margin-right: -76px; + } +} + +@media screen and ( max-width: 59.999em ) { + .custom-header, + .custom-header-image { + margin-top: 0 !important; /* !important to override styles added by JavaScript */ + } +} diff --git a/lodestar/taxonomy-jetpack-portfolio-tag.php b/lodestar/taxonomy-jetpack-portfolio-tag.php new file mode 100644 index 000000000..c6b5bb11d --- /dev/null +++ b/lodestar/taxonomy-jetpack-portfolio-tag.php @@ -0,0 +1,25 @@ + + +
+
+ + + +
+
+ + +
+
+
+ + + +
+
+
+ + +
+
+
+ + + +
+
+
+ + + +
+
+
+ + + + + + 'jetpack-testimonial', + 'order' => 'ASC', + 'orderby' => 'order', + 'posts_per_page' => 24, + 'no_found_rows' => true, + ) ); + ?> + + have_posts() ) : ?> +
+ + have_posts() ) : $testimonial_query -> the_post(); + get_template_part( 'components/features/testimonials/content', 'testimonials' ); + endwhile; + ?> + +
+ + + + + + + + + + + +
+
+ +
+ a { + display: block; } + .widget.woocommerce ul.product_list_widget li img { + max-width: 2.617924em; + float: left; } + .widget.woocommerce ul.product_list_widget li .remove { + float: right; + color: #ffffff; + background: red; + border-radius: 100%; + height: 1em; + width: 1em; + line-height: 1em; + text-align: center; + font-weight: bold; + margin: 1rem; } + +/** + * WooCommerce Cart + */ +.widget_shopping_cart p.woocommerce-mini-cart__total { + text-align: center; } + +.widget_shopping_cart .woocommerce-mini-cart__buttons { + text-align: center; } + .widget_shopping_cart .woocommerce-mini-cart__buttons .button.checkout { + margin-right: .55rem; } + +/** + * WooCommerce Search + */ +.woocommerce-product-search input[type="search"] { + margin-bottom: 1em; } + +/** + * WooCommerce Product Categories + */ +.widget_product_categories ul { + border-bottom: 1px solid #f3f3f3; } + .widget_product_categories ul li { + border-top: 1px solid #f3f3f3; + padding: 0.75em 0; } + +.widget_product_categories .children { + border-bottom: 0; + padding-right: 1.5em; + margin-bottom: -0.703125em; + margin-right: 0; + margin-left: 0; + margin-top: 0.703125em; } + +/** + * WooCommerce Average Rating + */ +.widget_rating_filter ul li:before, .widget_rating_filter ul li:after { + content: ""; + display: table; } + +.widget_rating_filter ul li:after { + clear: both; } + +.widget_rating_filter ul li .star-rating { + float: right; + margin-left: .5em; } + +/** + * WooCommerce Price Filter + */ +.widget_price_filter .price_slider { + margin-bottom: 1.5em; } + +.widget_price_filter .price_slider_amount { + text-align: left; + line-height: 2.4em; } + .widget_price_filter .price_slider_amount .button { + float: right; } + +.widget_price_filter .ui-slider { + position: relative; + text-align: right; } + +.widget_price_filter .ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1em; + height: 1em; + cursor: ew-resize; + outline: none; + background: royalblue; + box-sizing: border-box; + margin-top: -.25em; + opacity: 1; + border-radius: 100%; + margin-right: -1px; } + .widget_price_filter .ui-slider .ui-slider-handle:hover, .widget_price_filter .ui-slider .ui-slider-handle.ui-state-active { + box-shadow: 0 0 0 0.25em rgba(0, 0, 0, 0.1); } + +.widget_price_filter .ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + display: block; + border: 0; + background: royalblue; } + +.widget_price_filter .price_slider_wrapper .ui-widget-content { + background: rgba(0, 0, 0, 0.1); } + +.widget_price_filter .ui-slider-horizontal { + height: .5em; } + +.widget_price_filter .ui-slider-horizontal .ui-slider-range { + height: 100%; } + +@media screen and (min-width: 768px) { + .widget.woocommerce ul li { + padding-bottom: 0.703125em; + padding-top: 0.703125em; } + .widget_product_categories ul li { + padding-bottom: 0.703125em; + padding-top: 0.703125em; } } + +/** + * General WooCommerce components + */ +/** + * Header cart + */ +.site-header-cart { + position: relative; + margin: 1.5em 0 0; + padding: 0; + font-size: 1rem; + list-style: none; + text-align: left; + display: none; } + .site-header-cart:before, .site-header-cart:after { + content: ""; + display: table; } + .site-header-cart:after { + clear: both; } + .site-header-cart > li:first-child { + margin: 0 0.75em 0 0; } + .site-header-cart .cart-contents { + padding: 0.25em 0; + color: #2c313f; + font-weight: bold; + text-decoration: none; } + .site-header-cart .cart-contents .count { + margin-right: .25rem; + font-size: .85rem; + font-weight: normal; + color: #7a7c84; } + .site-header-cart .cart-contents:before { + content: "\f447"; + display: inline-block; + font-family: Genericons; + background: #3e69dc; + color: #fff; + border-radius: 100%; + width: 2.2rem; + height: 2.2rem; + margin-left: .5rem; + text-align: center; + line-height: 2.2; } + .site-header-cart .widget_shopping_cart { + display: none; } + .site-header-cart .product_list_widget { + margin: 0; + padding: 0; } + +/** + * Breadcrumbs + */ +.woocommerce-breadcrumb { + margin: 0 0 1rem; + padding: 0; + font-size: 1rem; } + .woocommerce-breadcrumb a { + color: #3e69dc; } + .woocommerce-breadcrumb a:hover { + color: #2c313f; } + +/** + * Pagination + */ +.woocommerce-pagination { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.3847; + margin: 0 0 3.5rem; } + .woocommerce-pagination ul.page-numbers { + margin: 0; + list-style: none; } + .woocommerce-pagination ul.page-numbers li { + display: inline-block; + border-radius: 50%; + text-align: center; + overflow: hidden; + float: right; + width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + margin: 0 0 0.25rem 0.25rem; } + .woocommerce-pagination ul.page-numbers li a { + display: block; + background: #f3f3f3; } + .woocommerce-pagination ul.page-numbers li a:hover { + background: transparent; } + +/** + * Sorting + */ +.woocommerce-result-count { + float: right; + margin: 0 0 .75em; } + +.woocommerce-ordering { + float: left; + margin: 0 0 1.5em; + width: 100%; } + .woocommerce-ordering select { + margin: 0.375em 0; } + +/** + * Infinite Scroll + */ +.woocommerce-page.infinite-scroll .hentry { + margin-bottom: 0; } + +.woocommerce-page.infinite-scroll #infinite-handle { + padding-top: 1em; } + +.woocommerce-page.infinite-scroll .infinite-wrap { + padding-top: 0; } + +.woocommerce-page.infinite-scroll .woocommerce-pagination { + display: none; } + +/** + * Onsale badge + */ +.onsale { + position: absolute; + left: auto; + top: 0; + right: 0; + padding: 0.375em 0.75em; + font-size: 1em; + background: #3e69dc; + color: #fff; + z-index: 9999; } + +/** + * Star rating + */ +.star-rating { + overflow: hidden; + position: relative; + height: 1.618em; + line-height: 1.618; + font-size: 1em; + width: 5.3em; + font-family: 'star'; + font-weight: 400; } + .star-rating:before { + content: "\53\53\53\53\53"; + opacity: .25; + float: right; + top: 0; + right: 0; + position: absolute; } + .star-rating span { + overflow: hidden; + float: right; + top: 0; + right: 0; + position: absolute; + padding-top: 1.5em; } + .star-rating span:before { + content: "\53\53\53\53\53"; + top: 0; + position: absolute; + right: 0; + color: royalblue; } + +p.stars a { + position: relative; + height: 1em; + width: 1em; + text-indent: -999em; + display: inline-block; + text-decoration: none; + margin-left: 1px; + font-weight: 400; } + p.stars a:before { + display: block; + position: absolute; + top: 0; + right: 0; + width: 1em; + height: 1em; + line-height: 1; + font-family: "star"; + content: "\53"; + color: #404040; + text-indent: 0; + opacity: .25; } + p.stars a:hover ~ a:before { + content: "\53"; + color: #404040; + opacity: .25; } + +p.stars:hover a:before { + content: "\53"; + color: royalblue; + opacity: 1; } + +p.stars.selected a.active:before { + content: "\53"; + color: royalblue; + opacity: 1; } + +p.stars.selected a.active ~ a:before { + content: "\53"; + color: #404040; + opacity: .25; } + +p.stars.selected a:not(.active):before { + content: "\53"; + color: royalblue; + opacity: 1; } + +/** + * Tabs + */ +.woocommerce-tabs ul.tabs { + list-style: none; + margin: 0; + padding: 0; + text-align: right; } + .woocommerce-tabs ul.tabs li { + display: block; + margin: 0; + position: relative; } + .woocommerce-tabs ul.tabs li a { + padding: 1em 0; + display: block; } + +.woocommerce-tabs .panel h2:first-of-type { + margin-bottom: 1em; + font-size: 1em; } + +/** + * Password strength meter + */ +.woocommerce-password-strength { + text-align: left; } + .woocommerce-password-strength.strong { + color: #8fae1b; } + .woocommerce-password-strength.short { + color: #b81c23; } + .woocommerce-password-strength.bad { + color: #b81c23; } + .woocommerce-password-strength.good { + color: #3e69dc; } + +/** + * Forms + */ +.form-row.woocommerce-validated input.input-text { + box-shadow: inset -2px 0 0 #8fae1b; } + +.form-row.woocommerce-invalid input.input-text { + box-shadow: inset -2px 0 0 #b81c23; } + +.required { + color: red; + text-decoration: none; } + .required[title] { + border-bottom: none; } + +.quantity .qty { + width: 3.631em; + text-align: center; } + +/** + * Notices + */ +.woocommerce-message, +.woocommerce-info, +.woocommerce-error, +.woocommerce-noreviews, +p.no-comments { + clear: both; + position: relative; + background: transparent; + border: 2px solid #8fae1b; + color: inherit; + margin-right: 0; + margin-bottom: 1.5em; + padding: 1.5em 3.5em 1.5em 2em; + list-style: none; } + .woocommerce-message:before, .woocommerce-message:after, + .woocommerce-info:before, + .woocommerce-info:after, + .woocommerce-error:before, + .woocommerce-error:after, + .woocommerce-noreviews:before, + .woocommerce-noreviews:after, + p.no-comments:before, + p.no-comments:after { + content: ""; + display: table; } + .woocommerce-message:after, + .woocommerce-info:after, + .woocommerce-error:after, + .woocommerce-noreviews:after, + p.no-comments:after { + clear: both; } + .woocommerce-message .button, + .woocommerce-info .button, + .woocommerce-error .button, + .woocommerce-noreviews .button, + p.no-comments .button { + float: left; + padding: 0.1667em 0.6668em; + margin-right: 1em; } + .woocommerce-message:before, + .woocommerce-info:before, + .woocommerce-error:before, + .woocommerce-noreviews:before, + p.no-comments:before { + content: '\f418'; + font-family: Genericons; + background: #8fae1b; + color: #fff; + border-radius: 100%; + line-height: 1.5; + width: 1.5em; + height: 1.5em; + position: absolute; + text-align: center; + right: 1.8em; + font-size: 1rem; + top: 50%; + transform: translateY(-50%); + letter-spacing: 1px; } + +.woocommerce-info, +.woocommerce-noreviews, +p.no-comments { + border-color: #3e69dc; } + .woocommerce-info:before, + .woocommerce-noreviews:before, + p.no-comments:before { + content: '\f456'; + background-color: #3e69dc; } + +.woocommerce-error { + border-color: #b81c23; } + .woocommerce-error:before { + content: '\f405'; + background-color: #b81c23; } + +.demo_store { + position: fixed; + right: 0; + bottom: 0; + left: 0; + margin: 0; + padding: 1em; + background-color: #3e69dc; + color: #fff; + z-index: 9999; } + .demo_store a { + color: rgba(255, 255, 255, 0.75); } + .demo_store a:hover { + color: inherit; } + .demo_store .woocommerce-store-notice__dismiss-link { + float: left; } + .demo_store .woocommerce-store-notice__dismiss-link:before { + content: "\f405"; + display: inline-block; + font-family: Genericons; + vertical-align: middle; } + +/** + * Buttons + */ +button.disabled, button:disabled, +input[type="button"].disabled, +input[type="button"]:disabled, +input[type="reset"].disabled, +input[type="reset"]:disabled, +input[type="submit"].disabled, +input[type="submit"]:disabled, +.button.disabled, +.button:disabled, +.added_to_cart.disabled, +.added_to_cart:disabled { + opacity: 0.5; + cursor: not-allowed; } + button.disabled:hover, button:disabled:hover, + input[type="button"].disabled:hover, + input[type="button"]:disabled:hover, + input[type="reset"].disabled:hover, + input[type="reset"]:disabled:hover, + input[type="submit"].disabled:hover, + input[type="submit"]:disabled:hover, + .button.disabled:hover, + .button:disabled:hover, + .added_to_cart.disabled:hover, + .added_to_cart:disabled:hover { + opacity: 0.5; } + +/** + * Price + */ +span.price, +p.price { + display: block; + color: #3e69dc; + margin-bottom: 0.75em; } + span.price del, + p.price del { + color: inherit; + opacity: .5; + display: inline-block; } + span.price ins, + p.price ins { + padding: 0; + background: 100% 0; + color: #3e69dc; + font-weight: 700; } + +/** + * Login form + */ +.woocommerce-form-login input[name="rememberme"] { + margin-right: 0.65em; + margin-left: 0.25em; } + +@media screen and (min-width: 600px) { + /** + * Pagination + */ + .woocommerce-pagination { + padding-top: 1.5rem; } + /** + * Sorting + */ + .woocommerce-result-count { + margin-bottom: 1.5em; + padding: 0.375em 0; } + .woocommerce-ordering { + width: auto; } } + +@media screen and (min-width: 896px) { + /** + * Rearrange header when mini cart is active + */ + .woocommerce-active .site-branding, + .woocommerce-active .site-header-cart { + flex-grow: 1; } + .woocommerce-active .site-menu { + flex-grow: 2; } + .woocommerce-active .main-navigation .primary-menu { + display: block; + text-align: center; } + .woocommerce-active .main-navigation .primary-menu > li { + display: inline; } + .woocommerce-active .main-navigation .primary-menu > li > a { + display: inline-block; } + /** + * Center Shop content when there's no sidebar + */ + body.post-type-archive:not(.no-sidebar) .content-area { + margin: 0 auto; + padding-left: 0; } + /** + * Header cart + */ + .site-header-cart { + font-size: 1rem; + margin-top: 1.5em; + list-style: none; + text-align: left; + display: block; } + .site-header-cart > li:first-child { + margin: 0 0.75em 0 0; } + .site-header-cart .cart-contents { + padding: 0.25em 0; + color: #2c313f; + font-weight: bold; } + .site-header-cart .cart-contents .count { + margin-right: .25rem; + font-size: .85rem; + font-weight: normal; + color: #7a7c84; } + .site-header-cart .cart-contents:before { + content: "\f447"; + display: inline-block; + font-family: Genericons; + background: #3e69dc; + color: #fff; + border-radius: 100%; + width: 2.2rem; + height: 2.2rem; + margin-left: .5rem; + text-align: center; + line-height: 2.2; } + .site-header-cart .widget_shopping_cart { + position: absolute; + top: 100%; + width: 300px; + z-index: 999999; + left: 999em; + display: block; + box-shadow: 0 3px 3px rgba(0, 0, 0, 0.2); + margin: 0; + padding: 0; + background: #fff; + border-radius: .35rem; + text-align: right; } + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__empty-message { + margin: 1em; } + .site-header-cart .widget_shopping_cart ul.product_list_widget { + list-style: none; + border: 0; } + .site-header-cart .widget_shopping_cart ul.product_list_widget li { + padding: 1em; + border: 0; } + .site-header-cart .widget_shopping_cart ul.product_list_widget li img { + float: right; + margin: .35rem 0 0 1rem; } + .site-header-cart .widget_shopping_cart ul.product_list_widget li .remove { + float: left; + margin: .5rem .35rem 0 0; } + .site-header-cart .widget_shopping_cart ul.product_list_widget li .quantity { + display: block; } + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__total { + margin: 0; + padding: 1em; } + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons { + margin: 0 0 1em; + padding: 0 1em; } + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button { + display: block; + font-size: .9rem; + margin-bottom: .5rem; } + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button.checkout { + margin-right: 0; + margin-bottom: 0; } + .site-header-cart:hover .widget_shopping_cart, .site-header-cart.focus .widget_shopping_cart { + left: 0; + display: block; } + /** + * Pagination + */ + .woocommerce-pagination { + font-size: 16px; + font-size: 1rem; + line-height: 1.40625; + margin-bottom: 1.5625em; } + .woocommerce-pagination ul.page-numbers li { + height: 1.875em; + line-height: 1.875em; + margin-bottom: 0.3125em; + margin-left: 0.3125em; + width: 1.875em; } + /** + * Related products + */ + .related ul.products li.product, + .upsells ul.products li.product { + width: 48.1%; } } diff --git a/lodestar/woocommerce.css b/lodestar/woocommerce.css new file mode 100644 index 000000000..2c77e2c8c --- /dev/null +++ b/lodestar/woocommerce.css @@ -0,0 +1,1802 @@ +/* +WooCommerce styles override +*/ + +/** + * Fonts + */ +@font-face { + font-family: 'star'; + src: url("../../plugins/woocommerce/assets/fonts/star.eot"); + src: url("../../plugins/woocommerce/assets/fonts/star.eot?#iefix") format("embedded-opentype"), url("../../plugins/woocommerce/assets/fonts/star.woff") format("woff"), url("../../plugins/woocommerce/assets/fonts/star.ttf") format("truetype"), url("../../plugins/woocommerce/assets/fonts/star.svg#star") format("svg"); + font-weight: normal; + font-style: normal; +} + +/** + * Shop tables + */ + +/** + * Responsive table + */ +table.shop_table_responsive thead { + display: none; +} + +table.shop_table_responsive tbody th { + display: none; +} + +table.shop_table_responsive tr td { + display: block; + text-align: right; + clear: both; +} + +table.shop_table_responsive tr td:not(.product-thumbnail):before { + content: attr(data-title) ":"; + float: left; +} + +table.shop_table_responsive tr td.product-remove:before { + display: none; +} + +table.shop_table_responsive tr td.actions:before, table.shop_table_responsive tr td.download-actions:before { + display: none; +} + +table.shop_table_responsive tr td.download-actions .button { + display: block; + text-align: center; +} + +/** + * Shop table + */ +table.shop_table { + border: 1px solid #f3f3f3; + border-width: 1px 0 0 1px; + border-radius: 0; + margin: 0 0 1.5em; + table-layout: auto; + text-align: left; + width: 100%; + border-spacing: 0; +} + +table.shop_table th { + background: #f3f3f3; +} + +/** + * Cart table + */ +table.cart .product-remove a { + display: block; + height: 1em; + width: 1em; + margin: 0 auto; + font-size: 1.5em; + line-height: .9; + color: #29292a; + text-align: center; + border-radius: 100%; + text-decoration: none; + font-weight: 700; + border: 0; + box-shadow: none; +} + +table.cart .product-remove a:hover { + background: #29292a; + color: #ffffff; +} + +table.cart .product-thumbnail { + min-width: 32px; +} + +table.cart .product-thumbnail img { + width: 32px; +} + +table.cart .product-name a { + color: #29292a; +} + +table.cart .actions { + text-align: left; +} + +table.cart .coupon { + display: inline-block; + margin-bottom: .75em; +} + +table.cart .coupon label { + display: none; +} + +table.cart .coupon input[type="text"] { + display: inline-block; + padding: 8px; + width: auto; +} + +table.cart .coupon input[type="submit"] { + vertical-align: top; +} + +.cart-collaterals { + padding: 0 0 1.5em; +} + +.cart-collaterals .wc-proceed-to-checkout { + text-align: right; +} + +/** + * Attributes table + */ +table.shop_attributes tr:nth-child(even) td, table.shop_attributes tr:nth-child(even) th { + background: rgba(0, 0, 0, 0.025); +} + +table.shop_attributes th { + width: 150px; +} + +table.shop_attributes td p { + margin: 0; +} + +@media screen and (min-width:896px) { + table.shop_table_responsive thead { + display: table-header-group; + } + + table.shop_table_responsive tbody th { + display: table-cell; + } + + table.shop_table_responsive tr th, table.shop_table_responsive tr td { + text-align: left; + } + + table.shop_table_responsive tr td { + display: table-cell; + } + + table.shop_table_responsive tr td:before { + display: none; + } + + table.cart .actions { + text-align: right; + } + + table.cart .coupon { + float: left; + display: block; + margin-bottom: 0; + } + + table.cart .coupon input { + margin-bottom: 0; + } + +} + +/** + * Products + */ + +/** + * Products + */ + +.archive.woocommerce-active:not(.infinite-scroll) .post { + padding-bottom: 2em; +} + +ul.products { + margin: 0; + padding: 0; +} + +ul.products:before, ul.products:after { + content: ""; + display: table; +} + +ul.products:after { + clear: both; +} + +ul.products li.product { + list-style: none; + position: relative; + margin-bottom: 2em; +} + +ul.products li.product .woocommerce-loop-product__title { + font-size: 1rem; +} + +ul.products li.product img { + display: block; +} + +ul.products li.product .button { + display: block; +} + +div[class^="columns-"] { + clear: both; +} + +@media screen and (min-width:896px) { + .archive.woocommerce-active:not(.infinite-scroll) .post { + padding-bottom: 5em; + } + + ul.products li.product { + float: left; + width: 30.7966666667%; + margin-right: 3.8%; + } + + ul.products li.product.first { + clear: both; + } + + ul.products li.product.last { + margin-right: 0; + } + + .columns-1 ul.products li.product { + float: none; + width: 100%; + } + + .columns-2 ul.products li.product { + width: 48.1%; + } + + .columns-3 ul.products li.product { + width: 30.7966666667%; + } + + .columns-4 ul.products li.product { + width: 22.15%; + } + + .columns-5 ul.products li.product { + width: 16.96%; + } + + .columns-6 ul.products li.product { + width: 13.4933333333%; + } + +} + +/** + * Product loop + */ + +/** + * Archive title header + */ +.woocommerce-products-header .woocommerce-products-header__title { + font-size: 49px; + font-size: 3.0625rem; + line-height: 1.2245; +} + +/** + * Loop products + */ +ul.products:before, ul.products:after { + content: ""; + display: table; +} + +ul.products:after { + clear: both; +} + +ul.products li.product { + position: relative; +} + +ul.products li.product img { + margin: 0 0 1em; +} + +ul.products li.product .woocommerce-loop-category__title, +ul.products li.product .woocommerce-loop-product__title { + padding: .5em 0; + margin: 0; + font-size: 1em; +} + +ul.products li.product .star-rating { + margin-bottom: .5em; +} + +ul.products li.product span.price del { + display: block; +} + +ul.products li.product .button { + display: inline-block; +} + +ul.products li.product .button.loading:after, ul.products li.product .button.added:after { + font-family: Genericons; + margin-left: .53em; + vertical-align: bottom; +} + +ul.products li.product .button.loading { + opacity: .25; +} + +ul.products li.product .button.loading:after { + content: '\f445'; +} + +ul.products li.product .button.added:after { + content: '\f418'; +} + +ul.products li.product .added_to_cart { + display: block; + padding-top: 0.75em; +} + +.wc-forward:after, +.woocommerce-Button--next:after { + display: inline-block; + font: normal normal normal 16px/1 Genericons; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: "\f432"; + margin-left: 0.5em; + transform: rotate(90deg); + vertical-align: middle; +} + +/** + * Single product + */ + +/** + * Single Product + */ +.single-product div.product { + position: relative; +} + +.single-product div.product:before, .single-product div.product:after { + content: ""; + display: table; +} + +.single-product div.product:after { + clear: both; +} + +.single-product div.product .woocommerce-product-gallery { + position: relative; +} + +.single-product div.product .woocommerce-product-gallery img { + display: block; +} + +.single-product div.product .woocommerce-product-gallery .woocommerce-product-gallery__trigger { + position: absolute; + right: 0; + display: block; + height: 2em; + width: 2em; + margin: 1rem; + text-align: center; + z-index: 2; +} + +.single-product div.product .woocommerce-product-gallery .woocommerce-product-gallery__trigger:before { + content: "\f402"; + display: block; + font-family: Genericons; + line-height: 2; + background: #29292a; + color: #fff; + border-radius: 100%; +} + +.single-product div.product .woocommerce-product-gallery .woocommerce-product-gallery__trigger img { + display: none !important; +} + +.single-product div.product .woocommerce-product-gallery .flex-viewport { + margin-bottom: 1em; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs { + margin: 0; + padding: 0; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs:before, +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs:after { + content: ""; + display: table; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs:after { + clear: both; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs li { + list-style: none; + cursor: pointer; + float: left; + margin-bottom: 3.8%; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs li img { + opacity: .5; +} + + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs li img.flex-active { + opacity: 1; +} + +.single-product div.product .woocommerce-product-gallery .flex-control-thumbs li:hover img { + opacity: 1; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-2 .flex-control-thumbs li { + width: 48%; + margin-right: 4%; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-2 .flex-control-thumbs li:nth-child(2n) { + margin-right: 0; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-2 .flex-control-thumbs li:nth-child(2n+1) { + clear: both; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-3 .flex-control-thumbs li { + width: 30%; + margin-right: 5%; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-3 .flex-control-thumbs li:nth-child(3n) { + margin-right: 0; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-3 .flex-control-thumbs li:nth-child(3n+1) { + clear: both; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-4 .flex-control-thumbs li { + width: 22.15%; + margin-right: 3.8%; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-4 .flex-control-thumbs li:nth-child(4n) { + margin-right: 0; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-4 .flex-control-thumbs li:nth-child(4n+1) { + clear: both; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-5 .flex-control-thumbs li { + width: 16.96%; + margin-right: 3.8%; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-5 .flex-control-thumbs li:nth-child(5n) { + margin-right: 0; +} + +.single-product div.product .woocommerce-product-gallery.woocommerce-product-gallery--columns-5 .flex-control-thumbs li:nth-child(5n+1) { + clear: both; +} + +.woocommerce-product-gallery__wrapper { + margin: 0; +} + +.single-product div.product p.price { + margin-bottom: 1.875rem; +} + +.single-product div.product .woocommerce-product-rating { + margin-bottom: 1.5rem; +} + +.single-product div.product .woocommerce-product-rating .star-rating, +.single-product div.product .woocommerce-product-rating .woocommerce-review-link { + display: inline-block; + vertical-align: middle; +} + +.single-product div.product .woocommerce-product-rating .star-rating { + margin-right: .35em; +} + +.single-product div.product form.cart { + margin-bottom: 1.5em; +} + +.single-product div.product form.cart div.quantity { + float: left; + margin-right: .5em; +} + +.single-product div.product form.cart .variations { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; +} + +.single-product div.product form.cart .variations td { + border: 0; + vertical-align: top; +} + +.single-product div.product form.cart .variations td.label { + padding-bottom: 0.375em; + padding-right: 1.5em; + padding-top: 0.375em; +} + +.single-product div.product form.cart .variations label { + font-weight: 700; + padding: 0; +} + +.single-product div.product form.cart .variations .reset_variations { + border: 0; + font-size: 16px; + font-size: 1rem; + line-height: 1.40625; + margin-left: 0.75em; + padding: 0.234375em 0; + box-shadow: none; +} + +.single-product div.product form.cart .variations .reset_variations:hover { + border-bottom: 0; +} + +.single-product div.product form.cart table.group_table { + table-layout: inherit; +} + +.single-product div.product form.cart table.group_table div.quantity { + margin-right: 0; +} + +.single-product div.product .product_meta { + margin-bottom: 1.5em; +} + +.single-product div.product .product_meta span:not(.sku) { + font-size: 16px; + font-size: 1rem; + line-height: 1.40625; + margin-right: .5em; +} + +.single-product div.product .woocommerce-tabs ul.tabs { + padding-left: 1.5em; + padding-left: calc(1.5em - 5px); +} + +.single-product div.product .woocommerce-tabs ul.tabs li { + display: inline-block; + border: 1px solid #ddd; +} + +.single-product div.product .woocommerce-tabs ul.tabs li a { + padding: 0.375em 0.75em; + font-weight: 700; + color: inherit; +} + +.single-product div.product .woocommerce-tabs ul.tabs li.active { + border-bottom-color: #fff; +} + +.single-product div.product .woocommerce-tabs .woocommerce-Tabs-panel { + border: 1px solid #ddd; + margin: -1px 0 1.5em; + padding: 1.5em 1.5em 0; +} + +.single-product div.product .related, .single-product div.product .upsells { + padding-top: 3em; +} + +.stock:empty:before { + display: none; +} + +.stock.in-stock { + color: #8fae1b; +} + +.stock.out-of-stock { + color: #b81c23; +} + +/** + * Reviews + */ +#reviews #comments ol.commentlist { + margin-left: 0; + margin-bottom: 2em; + list-style: none; +} + +#reviews #comments ol.commentlist:before, #reviews #comments ol.commentlist:after { + content: ""; + display: table; +} + +#reviews #comments ol.commentlist:after { + clear: both; +} + +#reviews #comments ol.commentlist li { + position: relative; + margin-bottom: 1.5em; +} + +#reviews #comments ol.commentlist li:before, #reviews #comments ol.commentlist li:after { + content: ""; + display: table; +} + +#reviews #comments ol.commentlist li:after { + clear: both; +} + +#reviews #comments ol.commentlist li:last-child { + margin-bottom: 0; +} + +#reviews #comments ol.commentlist li img.avatar { + float: left; + position: absolute; + top: 0; + left: 0; + padding: 3px; + width: 50px; + border: 1px solid #f3f3f3; + border-radius: 4px; +} + +#reviews #comments ol.commentlist li .meta { + margin-bottom: 1em; +} + +#reviews #comments ol.commentlist li .comment-text { + margin: 0 0 0 70px; + border: 1px solid #f3f3f3; + border-radius: 4px; + padding: 1em 1em 0; +} + +#reviews #comments ol.commentlist li .star-rating { + float: right; +} + +#review_form #respond .comment-reply-title { + display: block; + margin-bottom: 1.25em; + font-size: 1.25em; +} + +#review_form p.stars { + margin-bottom: 1em; +} + +#review_form p.stars a { + border-bottom: none; +} + +.woocommerce-noreviews { + background: none; +} + +.comment-form-rating label { + display: block; + margin-bottom: .15em; +} + +@media screen and (min-width:600px) { + .single-product div.product .woocommerce-tabs { + padding-top: 1.5em; + } + +} + +@media screen and (min-width:1020px) { + .single-product div.product .woocommerce-tabs { + padding-top: 2.5em; + } + +} + +/** + * My account + */ +.woocommerce-account .woocommerce-MyAccount-navigation { + margin: 0 0 1.75em; + font-size: 14px; + font-size: .875em; +} + +.woocommerce-account .woocommerce-MyAccount-navigation ul { + margin: 0; + padding: 0; + list-style: none; +} + +.woocommerce-account .woocommerce-MyAccount-navigation ul li { + display: inline-block; + margin: 0; + padding: 0.5em 0.755em 0.5em 0; +} + +.woocommerce-account .woocommerce-MyAccount-navigation ul li a { + line-height: 1; + font-size: 0.875rem; + padding: 0.5em 0.755em; +} + +.woocommerce-account .woocommerce-MyAccount-navigation ul li.is-active a { + background: #29292a; + border: 0; + box-shadow: none; + color: #fff; + text-decoration: none; + text-shadow: none; +} + +.woocommerce-account .addresses .woocommerce-Address-title h3 { + float: left; +} + +.woocommerce-account .addresses .woocommerce-Address-title .edit { + float: right; +} + +.woocommerce-account .addresses address { + clear: both; +} + +.woocommerce-account .edit-account fieldset p:last-of-type { + margin-bottom: 0; +} + +.woocommerce-account .edit-account .button { + margin-top: 1.5em; +} + +.woocommerce-account .woocommerce-order-details .order-again .button:after { + content: "\f420"; + display: inline-block; + font-family: Genericons; + vertical-align: bottom; + margin-left: .5rem; +} + +/** + * Checkout + */ +.woocommerce-form__label-for-checkbox .woocommerce-form__input-checkbox { + margin-right: .25em; +} + +.woocommerce-form__label-for-checkbox span { + font-size: 1rem; +} + +.woocommerce-checkout-payment { + margin-bottom: 1.5em; +} + +.woocommerce-checkout-payment ul.payment_methods { + list-style: none; + padding: 1.5em; + margin: 0; + border-style: solid; + border-color: #f3f3f3; + border-width: 1px 1px 0 1px; +} + +.woocommerce-checkout-payment ul.payment_methods li input { + margin: 0 1em 0 0; +} + +.woocommerce-checkout-payment ul.payment_methods li label { + vertical-align: middle; +} + +.woocommerce-checkout-payment ul.payment_methods li label img { + margin-top: -5px; + margin-left: .5em; + margin-right: .5em; + vertical-align: middle; + max-width: 180px; +} + +.woocommerce-checkout-payment ul.payment_methods li.payment_method_paypal .about_paypal { + font-size: .85em; +} + +.woocommerce-checkout-payment .payment_box { + background: #f3f3f3; + font-size: 16px; + font-size: 1rem; + line-height: 1.40625; + margin: 0.703125rem 0; + padding: 0.703125rem; +} + +.woocommerce-checkout-payment .payment_box p:last-child { + margin-bottom: 0; +} + +.woocommerce-checkout-payment .form-row { + padding: 1.5em; + border: 1px solid #f3f3f3; +} + +.woocommerce-checkout-payment .form-row:before, .woocommerce-checkout-payment .form-row:after { + content: ""; + display: table; +} + +.woocommerce-checkout-payment .form-row:after { + clear: both; +} + +.woocommerce-checkout-payment .form-row #place_order { + float: right; +} + +.woocommerce-shipping-fields h3 { + font-size: 1rem; + font-weight: normal; + text-transform: none; +} + +ul#shipping_method { + margin-left: 0; + list-style: none; +} + +@media screen and (min-width:600px) { + .col2-set .form-row-first { + float: left; + margin-right: 3.8%; + } + + .col2-set .form-row-last { + float: right; + margin-right: 0; + } + + .col2-set .form-row-first, .col2-set .form-row-last { + width: 48.1%; + } + + .woocommerce-form__label-for-checkbox span { + vertical-align: middle; + } +} + +/** + * WooCommerce widgets + */ + +/** + * WooCommerce Widgets + */ +.widget.woocommerce ul { + list-style: none; + margin-left: 0; +} + +.widget.woocommerce ul.product_list_widget { +} + +.widget.woocommerce ul.product_list_widget:before, .widget.woocommerce ul.product_list_widget:after { + content: ""; + display: table; +} + +.widget.woocommerce ul.product_list_widget:after { + clear: both; +} + +.widget.woocommerce ul.product_list_widget li { + padding: 0.75em 0; +} + +.widget.woocommerce ul.product_list_widget li > a { + display: block; +} + +.widget-area .widget.woocommerce ul.product_list_widget li > a.remove { + display: block; + font-size: 1.5em; + line-height: 1; + color: #333; + border-radius: 100%; + text-decoration: none; + font-weight: 700; + box-shadow: none; + opacity: .5; + text-align: center; + margin: .65rem .75rem 1rem 0; + height: 1em; + width: 1em; + float: left; +} + +.widget.woocommerce ul.product_list_widget li img { + max-width: 2.617924em; + float: right; +} + +/** + * WooCommerce Cart + */ +.widget_shopping_cart p.woocommerce-mini-cart__total { + margin-top: 1.5em; + text-align: center; +} + +.widget_shopping_cart .woocommerce-mini-cart__buttons { + text-align: center; +} + +.widget_shopping_cart .woocommerce-mini-cart__buttons a { + display: inline-block; +} + +.widget_shopping_cart .woocommerce-mini-cart__buttons .button.checkout { + margin-left: .55rem; +} + +/** + * WooCommerce Search + */ +.woocommerce-product-search input[type="search"] { + margin-bottom: 1em; +} + +/** + * WooCommerce Product Categories + */ +.widget_product_categories ul li { + padding: 0.75em 0; +} + +.widget_product_categories ul li li { + border-top: 1px solid #ddd; +} + +.widget_product_categories .children { + border-bottom: 0; + margin-bottom: -0.703125em; + margin-left: 0; + margin-right: 0; + margin-top: 0.703125em; +} + +/** + * WooCommerce Average Rating + */ +.widget_rating_filter ul li:before, .widget_rating_filter ul li:after { + content: ""; + display: table; +} + +.widget_rating_filter ul li:after { + clear: both; +} + +.widget_rating_filter ul li .star-rating { + float: left; + margin-right: .5em; +} + +/** + * WooCommerce Active Filters + */ +.widget_layered_nav_filters ul li a:before { + background-color: #29292a; + border-radius: 50%; + color: #fff; + content: "\f405"; + display: inline-block; + font-family: Genericons; + font-weight: bold; + line-height: 1.55; + padding: 0 .25em; + margin-right: .5em; + vertical-align: middle; +} + +/** + * WooCommerce Price Filter + */ +.widget_price_filter .price_slider { + margin-bottom: 1.5em; +} + +.widget_price_filter .price_slider_amount { + text-align: right; + line-height: 2.4em; +} + +.widget_price_filter .price_slider_amount .button { + float: left; +} + +.widget_price_filter .ui-slider { + position: relative; + text-align: left; +} + +.widget_price_filter .ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1em; + height: 1em; + cursor: ew-resize; + outline: none; + background: #29292a; + box-sizing: border-box; + margin-top: -.25em; + opacity: 1; + border-radius: 100%; + margin-left: -1px; +} + +.widget_price_filter .ui-slider .ui-slider-handle:hover, .widget_price_filter .ui-slider .ui-slider-handle.ui-state-active { + box-shadow: 0 0 0 0.25em rgba(0, 0, 0, 0.1); +} + +.widget_price_filter .ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + display: block; + border: 0; + background: #29292a; +} + +.widget_price_filter .price_slider_wrapper .ui-widget-content { + background: rgba(0, 0, 0, 0.1); +} + +.widget_price_filter .ui-slider-horizontal { + height: .5em; +} + +.widget_price_filter .ui-slider-horizontal .ui-slider-range { + height: 100%; +} + +@media screen and (min-width:768px) { + .widget.woocommerce ul li { + padding-bottom: 0.703125em; + padding-top: 0.703125em; + } + + .widget_product_categories ul li { + padding-bottom: 0.703125em; + padding-top: 0.703125em; + } + +} + +/** + * General WooCommerce components + */ + +.woocommerce-active .entry-content h1, +.woocommerce-active .entry-content h2 { + color: #333; +} + +/** + * Header cart + */ +.site-header-cart { + margin: 0; + position: relative; + padding: 1em 0; +} + +.site-header-cart { + font-size: 1rem; + list-style: none; + text-align: center; +} + +.site-header-cart .cart-contents { + padding: 1em 0; + font-weight: bold; +} + +.site-header-cart .cart-contents .count { + margin-left: .25rem; + font-size: .85rem; + font-weight: normal; + color: #999; +} + +.site-header-cart .cart-contents:before { + content: "\f447"; + display: inline-block; + font-family: Genericons; + vertical-align: bottom; +} + +.site-header-cart .widget_shopping_cart { + display: none; +} + +/** + * Breadcrumbs + */ +.woocommerce-breadcrumb { + margin: 0 0 1rem; + padding: 0; + font-size: 1rem; +} + +/** + * Pagination + */ +.woocommerce-pagination { + font-size: 13px; + font-size: 0.8125rem; + line-height: 1.3847; + margin: 0 0 3.5rem; +} + +.woocommerce-pagination ul.page-numbers { + margin: 0; + list-style: none; +} + +.woocommerce-pagination ul.page-numbers li { + display: inline-block; + border-radius: 50%; + text-align: center; + overflow: hidden; + float: left; + width: 1.5rem; + height: 1.5rem; + line-height: 1.5rem; + margin: 0 0.25rem 0.25rem 0; +} + +.woocommerce-pagination ul.page-numbers li a { + display: block; + background: #f3f3f3; +} + +.woocommerce-pagination ul.page-numbers li a:hover { + background: transparent; +} + +/** + * Sorting + */ +.woocommerce-result-count { + float: left; + margin: 0 0 .75em; +} + +.woocommerce-ordering { + float: right; + margin: 0 0 1.5em; + width: 100%; +} + +.woocommerce-ordering select { + margin: 0.375em 0; +} + +/** + * Infinite Scroll + */ +.woocommerce-page.infinite-scroll .hentry { + margin-bottom: 0; +} + +.woocommerce-page.infinite-scroll #infinite-handle { + padding-top: 1em; +} + +.woocommerce-page.infinite-scroll .infinite-wrap { + padding-top: 0; +} + +.woocommerce-page.infinite-scroll .woocommerce-pagination { + display: none; +} + +/** + * Onsale badge + */ +.onsale { + position: absolute; + right: auto; + top: 0; + left: 0; + padding: 0.375em 0.75em; + font-size: 1em; + background: #29292a; + color: #fff; + z-index: 1; +} + +/** + * Star rating + */ +.star-rating { + overflow: hidden; + position: relative; + height: 1.618em; + line-height: 1.2; + font-size: 1em; + width: 5.3em; + font-family: 'star'; + font-weight: 400; +} + +.star-rating:before { + content: "\53\53\53\53\53"; + opacity: .25; + float: left; + top: 0; + left: 0; + position: absolute; +} + +.star-rating span { + overflow: hidden; + float: left; + top: 0; + left: 0; + position: absolute; + padding-top: 1.5em; +} + +.star-rating span:before { + content: "\53\53\53\53\53"; + top: 0; + position: absolute; + left: 0; + color: #29292a; +} + +p.stars a { + position: relative; + height: 1em; + width: 1em; + text-indent: -999em; + display: inline-block; + text-decoration: none; + margin-right: 1px; + font-weight: 400; +} + +p.stars a:before { + display: block; + position: absolute; + top: 0; + left: 0; + width: 1em; + height: 1em; + line-height: 1; + font-family: "star"; + content: "\53"; + color: #404040; + text-indent: 0; + opacity: .25; +} + +p.stars a:hover ~ a:before { + content: "\53"; + color: #404040; + opacity: .25; +} + +p.stars:hover a:before { + content: "\53"; + color: #29292a; + opacity: 1; +} + +p.stars.selected a.active:before { + content: "\53"; + color: #29292a; + opacity: 1; +} + +p.stars.selected a.active ~ a:before { + content: "\53"; + color: #404040; + opacity: .25; +} + +p.stars.selected a:not(.active):before { + content: "\53"; + color: #29292a; + opacity: 1; +} + +/** + * Tabs + */ +.woocommerce-tabs ul.tabs { + list-style: none; + margin: 0; + padding: 0; + text-align: left; +} + +.woocommerce-tabs ul.tabs li { + display: block; + margin: 0; + position: relative; +} + +.woocommerce-tabs ul.tabs li a { + padding: 1em 0; + display: block; +} + +.woocommerce-tabs .panel h2:first-of-type { + margin-bottom: 1em; + font-size: 1em; +} + +/** + * Forms + */ +.form-row.woocommerce-validated input.input-text { + box-shadow: inset 2px 0 0 #8fae1b; +} + +.form-row.woocommerce-invalid input.input-text { + box-shadow: inset 2px 0 0 #b81c23; +} + +.required { + color: red; + text-decoration: none; +} + +.required[title] { + border-bottom: none; +} + +.quantity .qty { + line-height: 2; + width: 3.631em; + text-align: center; +} + +/** + * Notices + */ +.woocommerce-message, .woocommerce-info, .woocommerce-error, .woocommerce-noreviews, p.no-comments { + position: relative; + clear: both; + margin-bottom: 1.75em; + margin-left: 0; + padding: 1em 2em 1em 4em; + list-style: none; + color: inherit; + border: 2px solid #8fae1b; + background: transparent; +} + +.woocommerce-message:before, .woocommerce-message:after, .woocommerce-info:before, .woocommerce-info:after, .woocommerce-error:before, .woocommerce-error:after, .woocommerce-noreviews:before, .woocommerce-noreviews:after, p.no-comments:before, p.no-comments:after { + display: table; + content: ''; +} + +.woocommerce-message:after, .woocommerce-info:after, .woocommerce-error:after, .woocommerce-noreviews:after, p.no-comments:after { + clear: both; +} + +.woocommerce-message .button, .woocommerce-info .button, .woocommerce-error .button, .woocommerce-noreviews .button, p.no-comments .button { + float: right; + margin-left: 1em; + padding: .1667em .6668em; +} + +.woocommerce-message:before, .woocommerce-info:before, .woocommerce-error:before, .woocommerce-noreviews:before, p.no-comments:before { + font-family: Genericons; + font-size: 16px; + line-height: 1.65; + display: inline-block; + position: absolute; + top: 48%; + left: 1.8em; + width: 1.5em; + height: 1.5em; + content: '\f418'; + transform: translateY(-50%); + text-align: center; + color: #fff; + border-radius: 100%; + background: #8fae1b; +} + +.woocommerce-info, .woocommerce-noreviews, p.no-comments { + border-color: #000; +} + +.woocommerce-info:before, .woocommerce-noreviews:before, p.no-comments:before { + content: '\f456'; + background-color: #000; + line-height: 1.5; +} + +.woocommerce-error { + border-color: #b81c23; +} + +.woocommerce-error:before { + content: '\f405'; + background-color: #b81c23; +} + +.demo_store { + position: fixed; + left: 0; + bottom: 0; + right: 0; + margin: 0; + padding: 1em; + background-color: #29292a; + color: #fff; + z-index: 9999; +} + +.demo_store a { + color: rgba(255, 255, 255, 0.75); +} + +.demo_store a:hover { + color: inherit; +} + +.demo_store .woocommerce-store-notice__dismiss-link { + float: right; +} + +.demo_store .woocommerce-store-notice__dismiss-link:before { + content: "\f405"; + display: inline-block; + font-family: Genericons; + vertical-align: middle; +} + +.woocommerce-page .content-area input[type="text"], .woocommerce-page .content-area input[type="email"], .woocommerce-page .content-area input[type="url"], .woocommerce-page .content-area input[type="password"], .woocommerce-page .content-area input[type="search"], .woocommerce-page .content-area input[type="tel"], .woocommerce-page .content-area textarea, .woocommerce-product-search input[type="search"] { + border: 1px solid #ddd; + box-shadow: none; + display: block; + padding: 8px .6em; +} + +.woocommerce-page .content-area input[type="text"]:focus, .woocommerce-page .content-area input[type="email"]:focus, .woocommerce-page .content-area input[type="url"]:focus, .woocommerce-page .content-area input[type="password"]:focus, .woocommerce-page .content-area input[type="search"]:focus, .woocommerce-page .content-area input[type="tel"]:focus, .woocommerce-page .content-area textarea:focus, .woocommerce-page .content-area input[type="text"]:active, .woocommerce-page .content-area input[type="email"]:active, .woocommerce-page .content-area input[type="url"]:active, .woocommerce-page .content-area input[type="password"]:active, .woocommerce-page .content-area input[type="search"]:active, .woocommerce-page .content-area input[type="tel"]:active, .woocommerce-page .content-area textarea:active, .woocommerce-product-search input[type="search"]:active, .woocommerce-product-search input[type="search"]:focus { + border-color: #000; +} + +.woocommerce-address-fields input[type="text"], .woocommerce-address-fields input[type="email"], .woocommerce-address-fields input[type="url"], .woocommerce-address-fields input[type="password"], .woocommerce-address-fields input[type="search"], .woocommerce-address-fields input[type="tel"], .woocommerce-address-fields textarea, .woocommerce-billing-fields input[type="text"], .woocommerce-billing-fields input[type="email"], .woocommerce-billing-fields input[type="url"], .woocommerce-billing-fields input[type="password"], .woocommerce-billing-fields input[type="search"], .woocommerce-billing-fields input[type="tel"], .woocommerce-billing-fields textarea, .woocommerce-shipping-fields input[type="text"], .woocommerce-shipping-fields input[type="email"], .woocommerce-shipping-fields input[type="url"], .woocommerce-shipping-fields input[type="password"], .woocommerce-shipping-fields input[type="search"], .woocommerce-shipping-fields input[type="tel"], .woocommerce-shipping-fields textarea { + width: 100%; +} + +.checkout_coupon p { + clear: none; + float: left; + width: 28%; +} + +.form-row.woocommerce-validated input.input-text { + box-shadow: inset 2px 0 0 #8fae1b; +} + +.form-row.woocommerce-invalid input.input-text { + box-shadow: inset 2px 0 0 #b81c23; +} + +.required { + text-decoration: none; + color: red; +} + +.required[title] { + border-bottom: none; +} + +.quantity .qty { + width: 3.631em; + padding: .24em 0; + text-align: center; +} + +.woocommerce-product-search { + position: relative; +} + +.woocommerce-product-search input[type="search"] { + display: block; + padding: 8px; + width: 100%; +} + +.woocommerce-product-search input[type="submit"] { + position: absolute; + right: 0; + top: 0; +} + +/** + * Buttons + */ +button.disabled, button:disabled, input[type="button"].disabled, input[type="button"]:disabled, input[type="reset"].disabled, input[type="reset"]:disabled, input[type="submit"].disabled, input[type="submit"]:disabled, .button.disabled, .button:disabled, .added_to_cart.disabled, .added_to_cart:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +button.disabled:hover, button:disabled:hover, input[type="button"].disabled:hover, input[type="button"]:disabled:hover, input[type="reset"].disabled:hover, input[type="reset"]:disabled:hover, input[type="submit"].disabled:hover, input[type="submit"]:disabled:hover, .button.disabled:hover, .button:disabled:hover, .added_to_cart.disabled:hover, .added_to_cart:disabled:hover { + opacity: 0.5; +} + +.woocommerce-Button, .woocommerce-Button:visited, .woocommerce-Button:hover, .woocommerce-page .button, .woocommerce-page .button:visited, .site-header-cart .button, .site-header-cart .button:visited { + background: #29292a; + border: 0; + box-shadow: none; + color: #fff; + display: inline-block; + letter-spacing: 0.05em; + line-height: 1; + font-size: 0.875rem; + padding: 1em 1.5em; + text-decoration: none; + text-shadow: none; + text-transform: uppercase; +} + +.woocommerce-Button:hover, .woocommerce-Button:active, .woocommerce-page .button:hover, .woocommerce-page .button:active, .site-header-cart .button:hover, .site-header-cart .button:active { + background: #555; +} + +/** + * Price + */ +span.price, p.price { + display: block; + color: #29292a; + margin-bottom: 0.75em; +} + +span.price del, p.price del { + color: inherit; + opacity: .5; + display: inline-block; +} + +span.price ins, p.price ins { + padding: 0; + background: 0 0; + color: #29292a; + font-weight: 700; +} + +/** + * Login form + */ +.woocommerce-form-login input[name="rememberme"] { + margin-left: 0.65em; + margin-right: 0.25em; +} + +@media screen and (min-width:600px) { + + /** + * Pagination + */ + .woocommerce-pagination { + padding-top: 1.5rem; + } + + /** + * Sorting + */ + .woocommerce-result-count { + margin-bottom: 1.5em; + padding: 0.375em 0; + } + + .woocommerce-ordering { + width: auto; + } + +} + +@media screen and (min-width:60em) { + + /** + * Rearrange header when mini cart is active + */ + .woocommerce-active .main-navigation .primary-menu { + display: block; + text-align: center; + } + + .woocommerce-active .main-navigation .primary-menu > li { + display: inline; + } + + .woocommerce-active .main-navigation .primary-menu > li > a { + display: inline-block; + } + + /** + * Center Shop content when there's no sidebar + */ + body.post-type-archive:not(.no-sidebar) .content-area { + margin: 0 auto; + padding-right: 0; + } + + /** + * Header cart + */ + .main-navigation + .site-top-content + .site-header-cart { + width: 200px; + } + + .site-header-cart { + text-align: right; + } + + .site-header-cart .widget_shopping_cart { + position: absolute; + top: 100%; + width: 300px; + z-index: 999999; + right: 999em; + margin: 0; + padding: 0; + background: #151515; + text-align: left; + } + + .site-header-cart:hover .widget_shopping_cart, .site-header-cart.focus .widget_shopping_cart { + right: 0; + display: block; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__empty-message { + text-transform: none; + margin: 1em; + } + + .site-header-cart .widget_shopping_cart ul.product_list_widget { + list-style: none; + border: 0; + } + + .site-header-cart .widget_shopping_cart ul.product_list_widget li { + padding: 1em; + border-top: 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); + } + + .site-header-cart .widget_shopping_cart ul.product_list_widget li img { + margin: .5em 1em 0 0; + } + + .site-header-cart .widget_shopping_cart ul.product_list_widget li .remove { + float: left; + margin: .5em .5em 0 0; + } + + .site-header-cart .widget_shopping_cart ul.product_list_widget li .quantity { + display: block; + margin-left: 1.1em; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__total { + margin: 0; + padding: 1em; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons { + margin: 0 0 1em; + padding: 0 1em; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button { + background: #555; + color: #fff; + display: block; + font-size: .9rem; + margin-bottom: .5rem; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button:hover { + background: #666; + color: #fff; + } + + .site-header-cart .widget_shopping_cart .woocommerce-mini-cart__buttons .button.checkout { + margin-left: 0; + margin-bottom: 0; + } + + .site-header-cart:hover .widget_shopping_cart, .site-header-cart.focus .widget_shopping_cart { + right: 0; + display: block; + } + + /** + * Pagination + */ + .woocommerce-pagination { + font-size: 16px; + font-size: 1rem; + line-height: 1.40625; + margin-bottom: 1.5625em; + } + + .woocommerce-pagination ul.page-numbers li { + height: 1.875em; + line-height: 1.875em; + margin-bottom: 0.3125em; + margin-right: 0.3125em; + width: 1.875em; + } + + /** + * Related products + */ + .related ul.products li.product, .upsells ul.products li.product { + width: 30%; + margin-right: 5% + } + +} + +.related ul.products li.product:nth-of-type(3n), .upsells ul.products li.product:nth-of-type(3n) { + margin-right: 0; +}