diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..12eeaea Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore index 45c1505..247e2b5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ -_site -.sass-cache -.jekyll-metadata +_site/ +.sass-cache/ +.jekyll-cache/ \ No newline at end of file diff --git a/.vscode/cSpell.json b/.vscode/cSpell.json deleted file mode 100644 index ad5f04d..0000000 --- a/.vscode/cSpell.json +++ /dev/null @@ -1,15 +0,0 @@ -// cSpell Settings -{ - // Version of the setting file. Always 0.1 - "version": "0.1", - // language - current active spelling language - "language": "en", - // words - list of words to be always considered correct - "words": [], - // flagWords - list of words to be always considered incorrect - // This is useful for offensive words and common spelling errors. - // For example "hte" should be "the" - "flagWords": [ - "hte" - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 125572f..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "cSpell.enabled": true, - "cSpell.enabledLanguageIds": [ - "c", - "cpp", - "csharp", - "go", - "javascript", - "javascriptreact", - "json", - "latex", - "markdown", - "php", - "plaintext", - "python", - "text", - "typescript", - "typescriptreact", - "yml" - ] -} \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 0000000..78efb7c --- /dev/null +++ b/404.html @@ -0,0 +1,23 @@ +--- +layout: default +title: Page Not Found +description: Sorry – the page your looking for doesn't exist. +featured_image: /images/demo/about.jpg +--- + +
+ +
+
+
+ +
+ +

Page not found.

+

Sorry – the page your looking for doesn't exist.

+

Perhaps you typed the URL incorrectly, or it may have moved.

+

Back To Home

+ +
+ +
\ No newline at end of file diff --git a/CNAME b/CNAME deleted file mode 100644 index 62994c4..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -gavindraper.com \ No newline at end of file diff --git a/Gemfile b/Gemfile index c97366f..644e340 100644 --- a/Gemfile +++ b/Gemfile @@ -1,32 +1,8 @@ -source "https://rubygems.org" -ruby RUBY_VERSION +source 'https://rubygems.org' -# Hello! This is where you manage which Jekyll version is used to run. -# When you want to use a different version, change it below, save the -# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: -# -# bundle exec jekyll serve -# -# This will help ensure the proper Jekyll version is running. -# Happy Jekylling! -gem "jekyll", ">= 3.6.3" +gem 'jekyll', '3.8.5' -gem "jekyll-redirect-from" -# This is the default theme for new Jekyll sites. You may change this to anything you like. -gem "minima", "~> 2.0" - -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -# gem "github-pages", group: :jekyll_plugins - -gem "jekyll-paginate" - -# If you have any plugins, put them here! group :jekyll_plugins do - gem "jekyll-feed", "~> 0.6" -end - -# Windows does not include zoneinfo files, so bundle the tzinfo-data gem -gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] - -gem "jekyll-plantuml" + gem 'jekyll-paginate' + gem 'jekyll-sitemap' +end \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index bf73224..b38dd71 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,15 +1,15 @@ GEM remote: https://rubygems.org/ specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) colorator (1.1.0) - concurrent-ruby (1.1.4) + concurrent-ruby (1.1.6) em-websocket (0.5.1) eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) eventmachine (1.2.7) - ffi (1.9.25) + ffi (1.12.2) forwardable-extended (2.6.0) http_parser.rb (0.6.0) i18n (0.9.5) @@ -27,36 +27,28 @@ GEM pathutil (~> 0.9) rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-feed (0.11.0) - jekyll (~> 3.3) jekyll-paginate (1.1.0) - jekyll-plantuml (1.3.3) - jekyll (> 2.0) - jekyll-redirect-from (0.14.0) - jekyll (~> 3.3) jekyll-sass-converter (1.5.2) sass (~> 3.4) - jekyll-watch (2.1.2) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-watch (2.2.1) listen (~> 3.0) kramdown (1.17.0) - liquid (4.0.1) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) + liquid (4.0.3) + listen (3.2.1) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) - minima (2.1.1) - jekyll (~> 3.3) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (3.0.3) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + public_suffix (4.0.5) + rb-fsevent (0.10.4) + rb-inotify (0.10.1) ffi (~> 1.0) - rouge (3.3.0) - ruby_dep (1.5.0) - safe_yaml (1.0.4) - sass (3.7.2) + rouge (3.19.0) + safe_yaml (1.0.5) + sass (3.7.4) sass-listen (~> 4.0.0) sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) @@ -66,16 +58,9 @@ PLATFORMS ruby DEPENDENCIES - jekyll (>= 3.6.3) - jekyll-feed (~> 0.6) + jekyll (= 3.8.5) jekyll-paginate - jekyll-plantuml - jekyll-redirect-from - minima (~> 2.0) - tzinfo-data - -RUBY VERSION - ruby 2.5.1p57 + jekyll-sitemap BUNDLED WITH - 1.16.1 + 2.1.4 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e69de29..0000000 diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index e8c3c2d..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Parker Moore - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Projects/index.html b/Projects/index.html new file mode 100644 index 0000000..b9570a0 --- /dev/null +++ b/Projects/index.html @@ -0,0 +1,52 @@ +--- +layout: default +title: Projects +description: personal websites. Personal is the perfect theme for developers, designers and other creatives. +featured_image: /images/hero-images/clean-desk.jpg +--- + +
+ +
+
+
+ +
+ +

Projects That Were Going To Change The World

+

Mostly unfinished, mostly broken, might find the odd gem ;)

+ + {% include socials.html %} + +
+ +
+ +
+ +
+ + {% for project in site.projects reversed %} + +
+ +
+
+
+
+ +
+
+

{{ project.title }}

+

{{ project.subtitle }}

+

{{ project.description }}

+
+
+ +
+ + {% endfor %} + +
+ +
\ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index b66b6a1..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# gavindraper.com Blog # -See a mistake? Send me a pull request :) diff --git a/_LICENSE.md b/_LICENSE.md new file mode 100644 index 0000000..8261d80 --- /dev/null +++ b/_LICENSE.md @@ -0,0 +1,45 @@ +# Personal by JekyllThemes.io – License + +This license grants you, the purchaser, an ongoing, non-exclusive, worldwide license to make use of the theme. Read the rest of this license for the details that apply to your use of the theme. + +--- + +## Using the theme + +You are licensed to use the theme to create one single End Product for yourself or for one client (a “single application”), and the End Product can be distributed for Free. + +The End Product is a customised implementation of the theme. For example: the end product is the final website customised with your content. + +--- + +## What you CAN do with the theme + +You can create one End Product for a client, and you can transfer that single End Product to your client for any fee. This license is then transferred to your client. + +You can make any number of copies of the single End Product, as long as the End Product is distributed for Free. + +You can modify or manipulate the theme. You can combine the theme with other works and make a derivative work from it. The resulting works are subject to the terms of this license. + +--- + +## What you CAN'T do with the theme + +You can’t Sell the End Product, except to one client. (If you or your client want to Sell the End Product, you will need an Extended License – send an email to hello@jekyllthemes.io to discuss this with us.) + +You can’t re-distribute the theme as stock, in a tool or template, or with source files. You can’t do this with the theme either on its own or bundled with others, and even if you modify the theme. You can’t re-distribute or make available the theme as-is or with superficial modifications. These things are not allowed even if the re-distribution is for Free. + +For example: You can’t purchase the theme, convert it to a WordPress theme and sell or give it to more than one client. You can’t license the theme and then make it available as-is on your website for your users to download. + +You can’t use the theme in any application allowing an end user to customise a digital or physical product to their specific needs, such as an “on demand”, “made to order” or “build it yourself” application. You can use the theme in this way only if you purchase a separate license for each final product incorporating the theme that is created using the application. + +--- + +## Other license terms + +Some components of the theme are sourced by the author from elsewhere and different license terms may apply to the component, such as someone else’s license or an open source or creative commons license. The other license will apply to that component instead of this license. This license will apply to the rest of the theme. + +You can only use the theme for lawful purposes. + +This license can be terminated if you breach it. If that happens, you must stop making copies of or distributing the End Product until you remove the theme from it. + +JekyllThemes.io retains ownership of the theme, but grants you the license on these terms. \ No newline at end of file diff --git a/_README.md b/_README.md new file mode 100644 index 0000000..442ddc6 --- /dev/null +++ b/_README.md @@ -0,0 +1,166 @@ +# Personal by JekyllThemes.io – Instructions + +If you have any questions or feedback about the theme, don't hesitate to reach out to hello@jekyllthemes.io for 1-to-1 support direct from the developers. + +--- + +## Getting started + +Copy the theme files to your website directory. + +To run the theme locally, navigate to the theme directory in your terminal and run `bundle install` to install the theme's dependencies. Then run `jekyll serve` to start the Jekyll server. + +--- + +## Jekyll basics + +If you're not familiar with how Jekyll works, check out [jekyllrb.com](https://jekyllrb.com/) for all the details, +or read up on just the basics of [front matter](https://jekyllrb.com/docs/frontmatter/), [writing posts](https://jekyllrb.com/docs/posts/), and [creating pages](https://jekyllrb.com/docs/pages/). + +--- + +## Customizing the theme + +Personal comes packed with lots of options to let you customize the theme. + +--- + +### The `_config.yml` file + +The main things you might need to change here are: + +`site: Personal Jekyll Theme` – change this to your website's name + +`url:` – the full URL that your site will be hosted at, e.g. https://your-domain.com + +`baseurl:` – add a base URL here if you will be publishing the site inside a folder, e.g. https://your-domain.com/project/ – or if you're hosting it as a 'project page' on GitHub Pages. Example: `baseurl: /project` + +When using baseurl, you should reference images in your post/project Frontmatter **without** the baseurl, e.g. `/images/image.jpg` but images inside the Markdown content **should include** the baseurl snippet, e.g. `{{site.baseurl}}/images/image.jpg` + +`paginate: 6` – change this to set the number of blog posts on each page + +You can also change more advanced things here like the path names, collections etc. You do not need to change any of these to achieve the same look as the demo, so best to leave everything else unless you are confident. + +--- + +### The `settings.yml` file + +You'll find this inside the `_data` folder – this is where you can set all of the theme options. + +**Basic settings** + +`site_title` – change this to your website's title. This shows up in the browser's title bar, and in the header and footer. +`favicon_image` – change this to the location of your favicon image, which shows up in the browser's title bar. + +**Header settings** + +`logo_image` – if you'd like to use a logo instead of plain text title in your header, enter the link to it here. +`logo_width` – set the width (in pixels) that your logo should appear at. This is useful for adding retina display support – for example if your original image is 400px wide, you could set this value to `200` to display a retina-ready image. + +**Menu settings** + +This allows you to set the links inside your menu. Add each one as a list item with a `title` and `url`. When hosting on GitHub Pages, make sure you leave a trailing `/` at the end of links to category pages (e.g. `/blog/` or `/projects/`). + +**Footer settings** + +`footer_tagline` – sets the text that dispays underneath the site title/logo in the footer. + +**Hero settings** + +`overlay_opacity` – this sets the opacity of the overlay when you hover over grid items (portfolio and blog posts). Use a decimal value here, e.g. `0.8` will give you 80% opacity on hover. + +**Post settings** + +`grid_spacing` – this sets the amount of spacing (in pixels) between each image in an image grid layout. + +**Contact settings** + +The theme comes with a pre-made contact form that you can use with [Formspree](https://formspree.io/create/jekyllthemes), which is free for up to 50 submissions per month. They also have two great paid plans that offer advanced features. Use the link above to set up your account and then paste the 'endpoint' integration code into the theme settings: + +`form_action` – this is the form endpoint attribute that you get from FormSpree, for example `https://formspree.io/abcdefgh` +`confirmation_url` – by default the user is shown a default Formspree thank you page. If you have a premium plan, you can use this setting to provide an alternative URL for that page, for example `/thanks` – we have included a basic thank you page with the theme. +`email_subject` – choose the subject of the email you receive from Formspree. +`send_button_text` – change the text used on the form submit button. + +Hint: you can add the contact form to any page of your site using the include – `{% include contact-form.html %}` – for example if you wanted to have the contact form on your About page. + +**Social settings** + +Here you can add links to your profiles on social networks, and they'll be shown in the footer. Simply add your URL next to the ones you want to show. + +**Color settings** + +Here you can set all the different colors used by the theme. Try them out and find the color pallette that works for you! + +**Font settings** + +`font_embed` – add an embed code from an external font service. This allows you to use services like Google Fonts or Typekit. +`title_font` – set the CSS name for the font used on titles. +`body_font` – set the CSS anme for the font used for body text. +`regular_weight` – set the font weight for regular styled text. +`bold_weight` – set the font weight for bold styled text. + +Below these options, you'll see options for each typographical element used in the theme. For each, you can set the following options: + +`small_size` – the size (in pixels) used for this element on small size screens like mobile phones. +`medium_size` – the size (in pixels) used for this element on medium size screens like tablets. +`large_size` – the size (in pixels) used for this element on largers screens like laptops and desktops. +`weight` – the font weight for this element. +`letter_spacing` – the letter spacing (in ems) for this element. +`line_height` – the line-height (in decimals) for this element. + +**Advanced options** + +`ajax_loading` – use `true` to enable Ajax loading throughout your site. Use `false` to disable it and load pages normally – this can be helpful if you're adding plugins or other javascript to your pages. +`analytics_code` – use this option to add your Google Analytics code. +`custom_styles` – use this option to add custom CSS styles to the theme. +`header_js` – use this option to insert javascript into the header of the page. +`footer_js` – use this option to insert javascript at the end of the page. + +--- + +### Images + +Inside the `/images/` folder you'll find a few images included with the theme. + +The images in the `/demo/` subfolder are used in the demo project, post and page – you delete those if you don't need them. + +`favicon.png` – you should replace this with the favicon image you'd like to use for your website. + +`social.jpg` – this image is used by default as the meta image on the Home and Blog pages. This shows up on social shares of your page, for example Facebook or Twitter – so you should change it to a relevant image, or change the image URL in that page's Front Matter (see below). + +--- + +## Main pages + +The theme comes with some pages set up ready for your content. + +### The home page – `/index.html` + +This is your website home page. You can edit some details in the Front Matter at the top of the page: + +`title` – this sets the page title, which shows up in the browser's title bar and on search engine results, social shares etc. +`description` – this sets the page meta description, which shows up on search engine results, social shares etc. +`featured_image` – this sets the header image for the page, as well as the meta image, which shows up on social shares. + +Below the Front Matter is the code for the page. You should edit this to set your title and intro text. Hint - the main

tag respects line breaks on tablet size screens and larger. This is useful if you want to prevent typographic widows. + +### The blog page – `/blog/index.html` + +This is the blog listing page, which shows all your blog posts. You can edit the same things as on the home page to customise it for your website. + +--- + +## Projects, posts and pages + +These control the main content of your website, and are found inside the `_projects`, `_posts` and `_pages` folders. + +Take a look at the demo content inside each folder for full descriptions on what you can do inside these, and to use as a template for your own content. + +--- + +## Any questions? + +If you have any questions or feedback about the theme, don't hesitate to reach out to hello@jekyllthemes.io for 1-to-1 support direct from the developers! + +🤘 \ No newline at end of file diff --git a/_config.yml b/_config.yml index 49a0c3c..761f912 100644 --- a/_config.yml +++ b/_config.yml @@ -1,42 +1,52 @@ -# Welcome to Jekyll! -# -# This config file is meant for settings that affect your whole blog, values -# which you are expected to set up once and rarely edit after that. If you find -# yourself editing this file very often, consider using Jekyll's data files -# feature for the data you need to update frequently. -# -# For technical reasons, this file is *NOT* reloaded automatically when you use -# 'bundle exec jekyll serve'. If you change this file, please restart the server process. - -# Site settings -# These are used to personalize your new site. If you look in the HTML files, -# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on. -# You can create any custom variable you would like, and they will be accessible -# in the templates via {{ site.myvariable }}. -title: Gavin Draper - SQL Server Blog and Related Ramblings -name: Gavin Draper - SQL Server Blog and Related Ramblings -description: > # this means to ignore newlines until "baseurl:" - Father, Developer, DBA, Extreme Sports Enthusiast -baseurl: "" # the subpath of your site, e.g. /blog -url: "https://gavindraper.com" # the base hostname & protocol for your site, e.g. http://example.com -twitter_username: gavdraper -github_username: gavdraper -linkedin_username: gavdraper -permalink: /:year/:month/:day/:title/ -highlighter: rouge -include: ['tags'] -paginate: 3 -# Build settings +site: Gavin Draper + +url: "https://gavindraper.com" +baseurl: + +collections: + pages: + output: true + permalink: /:name + posts: + output: true + permalink: /:year/:month/:day/:title/ + projects: + output: true + permalink: /project/:slug + +defaults: + - scope: + path: "" + values: + layout: "default" + - scope: + path: "" + type: "pages" + values: + layout: "page" + - scope: + path: "" + type: "posts" + values: + layout: "post" + - scope: + path: "" + type: "projects" + values: + layout: "project" + markdown: kramdown + +kramdown: + input: GFM + syntax_highlighter: rouge + +sass: + style: compressed + plugins: - - jekyll-feed - - jekyll-redirect-from - jekyll-paginate -exclude: - - Gemfile - - Gemfile.lock -# Disqus Comments -disqus: - # Leave shortname blank to disable comments site-wide. - # Disable comments for any post by adding `comments: false` to that post's YAML Front Matter. - shortname: gavindraper \ No newline at end of file + - jekyll-sitemap + +paginate: 6 +paginate_path: "/page:num/" diff --git a/_data/settings.yml b/_data/settings.yml new file mode 100644 index 0000000..3b61569 --- /dev/null +++ b/_data/settings.yml @@ -0,0 +1,158 @@ +basic_settings: + site_title: Gavin Draper + favicon_image: /images/favicon.ico + +header_settings: + logo_image: + logo_width: 200 + +menu_settings: + menu_items: + - title: "Blog" + url: "/" + - title: "Projects" + url: "/projects/" + - title: "About" + url: "/about" + - title: "Contact" + url: "/contact" + +footer_settings: + footer_tagline: Gavin Draper's Blog + +hero_settings: + overlay_opacity: 0.8 + +post_settings: + grid_spacing: 10 + +contact_settings: + form_action: "https://formspree.io/mdowkvog" + confirmation_url: "/thanks" + email_subject: "Contact form submission" + send_button_text: "Send Message" + +social_settings: + facebook_url: "" + twitter_url: "" + instagram_url: "" + snapchat_url: "" + youtube_url: "" + google-plus_url: "" + vimeo_url: "" + pinterest_url: "" + medium_url: "" + quora_url: "" + amazon_url: "" + apple_url: "" + android_url: "" + tumblr_url: "" + dribbble_url: "" + behance_url: "" + deviantart_url: "" + github_url: "" + reddit_url: "" + flickr_url: "" + etsy_url: "" + kickstarter_url: "" + soundcloud_url: "" + spotify_url: "" + bandcamp_url: "" + linkedin_url: "" + +color_settings: + background_color: "#ffffff" + background_alt_color: "#f4f5f6" + text_dark_color: "#2A2F36" + text_medium_color: "#6C7A89" + text_light_color: "#ABB7B7" + accent_color: "#3498db" + border_color: "#dddddd" + hero_background_color: "#132930" + hero_text_color: "#ffffff" + error_color: "#D64541" + +font_settings: + font_embed: '' + title_font: '"Muli", sans-serif' + body_font: '"Muli", sans-serif' + regular_weight: 400 + bold_weight: 600 + site_title: + small_size: 25 + medium_size: 30 + large_size: 35 + weight: 700 + letter_spacing: -0.02 + menu: + small_size: 30 + medium_size: 15 + large_size: 17 + weight: 600 + letter_spacing: 0 + h1: + small_size: 35 + medium_size: 45 + large_size: 60 + weight: 700 + letter_spacing: -0.03 + line_height: 1.2 + h2: + small_size: 22 + medium_size: 30 + large_size: 35 + weight: 700 + letter_spacing: -0.02 + line_height: 1.2 + h3: + small_size: 22 + medium_size: 25 + large_size: 30 + weight: 600 + letter_spacing: -0.02 + line_height: 1.3 + h4: + small_size: 17 + medium_size: 22 + large_size: 22 + weight: 700 + letter_spacing: 0 + line_height: 1.6 + h5: + small_size: 17 + medium_size: 20 + large_size: 20 + weight: 700 + letter_spacing: 0 + line_height: 1.6 + h6: + small_size: 17 + medium_size: 20 + large_size: 20 + weight: 700 + letter_spacing: 0 + line_height: 1.6 + p: + small_size: 18 + medium_size: 20 + large_size: 22 + weight: 400 + letter_spacing: 0 + line_height: 1.6 + blockquote: + small_size: 25 + medium_size: 35 + large_size: 45 + weight: 300 + letter_spacing: -0.02 + line_height: 1.6 + buttons: + weight: 600 + letter_spacing: 0 + +advanced_settings: + ajax_loading: true + analytics_code: "" + custom_styles: "" + header_js: "" + footer_js: "" diff --git a/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md b/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md deleted file mode 100644 index 4daa757..0000000 --- a/_drafts/2018-05-31-SQL-Server-Move-Data-Between-Filegroups.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -layout: post -title: SQL Server Moving Data Between Filegroups -date: '2018-05-17 13:34:01' ---- -In thie post I'm going to cover a number of different ways to move data between filegroups aloeing you to split the database accross multiple drives and locations if needed. \ No newline at end of file diff --git a/_drafts/2018-08-22-SQL-Server-Compression-Impact.md b/_drafts/2018-08-22-SQL-Server-Compression-Impact.md deleted file mode 100644 index 28ec133..0000000 --- a/_drafts/2018-08-22-SQL-Server-Compression-Impact.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -layout: post -title: SQL Server Impacts of Compression -date: '2018-08-17 13:34:01' ---- -I recently had an issue where a server's CPU load was running a lot higher than usual, after studying a profile for while it quickly highlighted the offending queries. What wasn't obvious was why some of these simple queries were using so much CPU, the only thing they had in common is that they were temporal queries using the AS OF syntax to go across the main and history table. After a little head scratching I realized all the history tables were compressed at the page level, it turns out history tables by default are compressed. After rebuilding the table to turn of compression the CPU load dropped right back down. Problem solved. - -This got me thinking though, I've never worked on a system where I've needed to compress tables so had never really looked at what compression does to query performance and their plans. I'm going to delve into this in this post. - -All examples in this post are based on a data dump of Stack Overflow from 2010 mainly because it's a nice size and well distributed test bed. - -First let's take a baseline against the non compressed posts table... - -{% highlight sql %} -SELECT TOP 5 - Users.DisplayName, - COUNT(*) -FROM - Posts - INNER JOIN Users ON Users.Id = Posts.OwnerUserId -GROUP BY - Posts.OwnerUserId,Users.DisplayName -ORDER BY COUNT(*) DESC -OPTION (MAXDOP 1) -{% endhighlight %} - -It's a straight forward query that gets the top 5 users with the highest post count. I've added MAXDOP 1 here to stop the process going parallel, the reason for this is our before and after test will have different costs which may cause SQL Server to make one parallel which will make it hard to compare like for like. - -Before I ran these 2 queries I turned on STATISITCS IO and TIME and got the following results... - -> Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. - -> Table 'Workfile'. Scan count 5, logical reads 2912, physical reads 339, read-ahead reads 2573, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. - -> Table 'Posts'. Scan count 1, logical reads 801623, physical reads 1, read-ahead reads 801168, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. - -> CPU time = 8515 ms, elapsed time = 18315 ms. - -The query plan looked like this... - -As you can see the SELECT had an estimated subtree cost of 652. - -Now lets compress the clustered index on the posts table... - -{% highlight sql %} -ALTER TABLE Posts REBUILD WITH (DATA_COMPRESSION = PAGE) -{% endhighlight %} - -The table size has gone from.. - -If we now run the posts query again the query plan now looks like this... - -Before running both these queries I turned on STATISTICS IO and STATISTICS TIME to get info on reads and CPU load, the before and after looks like this... - -It's quite clear having seen this that... \ No newline at end of file diff --git a/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md b/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md deleted file mode 100644 index 98f9e90..0000000 --- a/_drafts/2018-09-04-SQL-Server-Kick-Ass-Backup-Plans.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -layout: post -title: Kicking Ass With Backup Jobs -date: '2018-09-03 09:34:01' ---- -SQL Maintenance plans have been around for a long time and are commonly used for tasks like backups, CHECKDB, index rebuilds, statistics rebuilds and other cleanup work. The UI for building them is clunky and often slow, it's a bit of a pain to move them between servers and the tasks in them are not the most flexable. So what's the alternative? - -## Ola Hallengren's DatabaseBackup ## -Ola Hallengren has a number of scripts one of which is DatabaseBackup (https://ola.hallengren.com/sql-server-backup.html). If you want to follow along you will need to install Ola's scripts from the previous link. Let's look at some examples of using this and see why it's more flexible... - -Full backup of all user databases with checksum and remove backups older than 3 days... - -{% highlight sql %} -EXECUTE dbo.DatabaseBackup - @Databases = 'USER_DATABASES', - @BackupType = 'FULL', - @CheckSum = 'Y', - @CleanupTime = 72, - @Directory = 'D:\DBBackups', -{% endhighlight %} - -The above script will create a directory structure inside the directory you give it that looks something like this... - - D:\DBBackups\ServerName\DatabaseName\Full\DBName+DateTime.bak - -Another smart thing this script can do is if you are running in full recovery it can change backup type between log and full depending on weather a full backup already exists... - -{% highlight sql %} -EXECUTE dbo.DatabaseBackup - @Databases = 'USER_DATABASES', - @Directory = 'D:\DBBackups', - @BackupType = 'LOG', - @ChangeBackupType = 'Y' -{% endhighlight %} - -The above script uses @ChangeBackupType to switch between full and log. It will first check if a full backup exists, if it doesnt it will make a full backup, if it does it will make a log backup, these files will go to... - - D:\DBBackups\ServerName\DatabaseName\Log\DBName+DateTime.log - D:\DBBackups\ServerName\DatabaseName\Full\DBName+DateTime.bak - -Depending on RPO/RTO requirements I typically take all my full backups with Ola's Database backup script from an agent job. - -You could quite easily schedule the above to also manage your log backups and that would work well however Brent Ozar's team have fairly recently release sp_AllNightLog. - -## Brent Ozar Unlimited's sp_AllNightLog ## -sp_AllNightLog builds ontop of Ola's DatabaseBackup script to really help automate managing database log backups and even restoring them. On my primary I've been using this to setup jobs that will automatically backup my log files for any database I create that is in full recovery. As part of this process sp_AllNightLog created an agent job that polls for new databases and automatically adds them to it's list of databases to backup the logs for. - -Like I said before behind the scenes sp_AllNightLog is making calls to Ola's DatabaseBackup, as part of this some of the options in DatabaseBackup are not available to be set from sp_AllNightLog, I made a small change to sp_AllNightLog that allows me to pass the CleanUpTime from sp_AllNightLog into DatabaseBackup essentially setting a retention policy on my log backups. - -The change looks like this... - -TODO INSERT CHANGE HERE - -One thing to note here is that at the time over writing sp_AllNightLog requires some changes to Ola's scripts for the ChangeBackupType switch to work so if you want to use that feature you need to update Ola's scripts on your server with the ones here https://github.com/BrentOzarULTD/sql-server-maintenance-solution - -Setup Step By Step -If you want new databases to be uatomatically backed up then you need to enable xp_cmdshell on your SQL Server so sp_AllNightLog can monitor directories... - -{% highlight sql %} -EXEC sp_configure 'show advanced options',1 -GO -RECONFIGURE -GO - -EXEC sp_configure 'xp_cmdshell', 1 -GO -RECONFIGURE -GO -{% endhighlight %} \ No newline at end of file diff --git a/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md b/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md deleted file mode 100644 index c3814f8..0000000 --- a/_drafts/2019-01-27-Initial-Steps-To-Tune-A-Query.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -title: Initial Steps To Tuning A Query -date: '2019-01-08 06:34:01' ---- -There are a million and one possible reasons your query is running slow, however I've found that I follow the same initial steps for every query I optimize and have found it's not until I've gone through this list of steps that things veer off the path and go in other directions. As this is a process I repeat often and find it solves a lot of low hanging fruit in query tuning fairly quickly I though I'd post it here... - - diff --git a/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md b/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md deleted file mode 100644 index f2f4a6e..0000000 --- a/_drafts/2019-12-10-SQL-Server-What-Is-Column-Store.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: post -title: Indexing In Memory OLTP Tables -date: '2018-12-10 09:34:01' ---- -Indexing on In Memory OLTP tables is a little different from your traditional on disk rowstore tables... - -In Memory Differences... -- There is no clustered index -- There is a new hash index ideal for single record lookups -- The non clustered index still exists but it;s structure is quite different. - -Lets got over each of these points - -## No Clustered Index ## - -## New Hash Index ## - -## Non Clustered Index ## \ No newline at end of file diff --git a/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md b/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md deleted file mode 100644 index a8f62aa..0000000 --- a/_drafts/2020-12-07-SQL-Server-Predicate-Pushdown.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: post -title: Make Predicate Pushdown Your Best Friend -date: '2018-12-10 09:34:01' ---- diff --git a/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md b/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md deleted file mode 100644 index a8f62aa..0000000 --- a/_drafts/2021-12-07-SQL-Server-ReplayingLoad-On-Different-Versions.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: post -title: Make Predicate Pushdown Your Best Friend -date: '2018-12-10 09:34:01' ---- diff --git a/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md b/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md deleted file mode 100644 index 7bc72df..0000000 --- a/_drafts/2022-12-07-SQL-Server-Agregating-Without-Loss-Of-Data.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -layout: post -title: SQL Server Agregation With No Data Loss -date: '2018-12-10 09:34:01' ---- -Let's imagine we have the following table of posts for a generic forum... - -{% highlight sql %} -CREATE TABLE posts -( - Id INT IDENTITY PRIMARY KEY, - Votes INT, - Body NVARCHAR(MAX) -) -{% endhighlight %} - -With that data we now want to to return the Votes, Body along with the sum of all votes and count of all posts for comparisson. This can't be done with a group by as in order to get the body and id we'd need to group by it and as soon as we do that any count or sum will only be on that group and not on the overall dataset. - -One thing you can do in order to get aggregations and with no loss of data is use APPLY as I detailed in my APPLYBLOGPOST. For example... - -{% highlight sql %} -SELECT TOP 100 - aggr.PostCount, - aggr.VoteSum, - Id, - Votes, - Body -FROM - posts - CROSS APPLY (SELECT COUNT(*) PostCount, SUM(Votes) VoteSum FROM posts) aggr -ORDER BY id -{% endhighlight %} - -I've populated my posts table with 5 million records and the above query did the following... - -TODO : Query Plan -TODO : Stats - -Since SQL Server 2005 we've have frameless window function, that is a function that runs per row with no bounds. Use this we can rewrite the above query as... \ No newline at end of file diff --git a/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md b/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md deleted file mode 100644 index 5f71484..0000000 --- a/_drafts/2023-12-07-SQL-Server-The-Life-Of-A-Delete-Statement.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -layout: post -title: Deleting Lots Of Data? Go Home SQL Server You're Doing It Wrong! -date: '2019-01-08 06:34:01' ---- -After recently spending some time trying to optimize queries doing some fairly large scale deletes I discovered things don't work quite as optimally as I'd expected when deleting from multiple indexes. Before I go into too much detail a couple of things to understand first... - -## Before We Start : Indexes In Indexes ## - -* If a table has no clustered indexes then each record in the NonClustered indexes points back to the data in the table (HEAP) with its Row Identifier (RID) this is an identifier that points to the file, page and slot in page of the underlying row. -* If a table does have a Clustered index then the NonClustered indexes do not use the RID to point back to data in the clustered index, they instead use the fields in the clustered index. This is a little surprising to learn at first as for this to work it means that every NonClustered index you have also has the clustered index fields included in it in order to get back to the underlying rows in the table. - -Lets demo the above points with a quick sample... - -{% highlight sql %} -CREATE TABLE NonClusteredOnly -( - Id INT IDENTITY, - Name NVARCHAR(100), - INDEX ndx_nonclusteredonly_name NONCLUSTERED(Name) -) - -CREATE TABLE ClusteredOnly -( - Id INT IDENTITY PRIMARY KEY, - Name NVARCHAR(100) -) - -CREATE TABLE ClusteredAndNonClustered -( - Id INT IDENTITY PRIMARY KEY, - Name NVARCHAR(100), - INDEX ndx_clusteredandnonclustered_name NONCLUSTERED(Name) -) - -INSERT INTO NonClusteredOnly (Name) -SELECT specific_name -FROM msdb.information_schema.routines -WHERE routine_type = 'PROCEDURE' - -INSERT INTO ClusteredOnly (Name) -SELECT specific_name -FROM msdb.information_schema.routines -WHERE routine_type = 'PROCEDURE' - -INSERT INTO ClusteredAndNonClustered (Name) -SELECT specific_name -FROM msdb.information_schema.routines -WHERE routine_type = 'PROCEDURE' -{% endhighlight %} - -After running that you'll have 3 tables and about 500 records in each depeneding on which version of SQL Server you're running. - -Let's first look at what happens if we filter on the name column for select all columns from ClusteredOnly... - -{% highlight sql %} -SELECT id,[Name] FROM ClusteredOnly -WHERE [Name] LIKE 'sp_verify_job%' -{% endhighlight %} - -![Clustered Only Plan]({{site.url}}/content/images/2019-Theres-An-Index-In-My-Index\clustered-only-plan.PNG) - -As you probably expected we have no index that can help with our predicate so it does a full scan on the clustered index. - -Now let's run that same query on our table with only a single NonClustered index... - -{% highlight sql %} -SELECT id,[Name] FROM NonClusteredOnly -WHERE [Name] LIKE 'sp_verify_job%' -{% endhighlight %} - -![NonClustered Only Plan]({{site.url}}/content/images/2019-Theres-An-Index-In-My-Index\nonclustered-only-plan.PNG) - -In this case we're using the NonClustered index to seek on our predicate but because that index doesnt have ID in it and our query wants the ID field it then uses the RID (Record Identifier) to go back to the heap and get that data in that field. - -It gets more interesting when we run that same query on our table with a Clustered index on ID and NonClustered on Name, the obvious thing you'd expect to see is probably seek on the NonClustered then a lookup to the Clusted index to get the ID field but... - -{% highlight sql %} -SELECT id,[Name] FROM ClusteredAndNonClustered -WHERE [Name] LIKE 'sp_verify_job%' -{% endhighlight %} - -![NonClustered and Clustered Plan]({{site.url}}/content/images/2019-Theres-An-Index-In-My-Index\clustered-and-nonclustered-plan.PNG) - -## Setting Up a Sandbox ## - -### Delete No Index ### -### Delete Clustered Index ### -### Delete Non Clustered Index ### -### Delete Clustered and One Non Clustered Index ### -### Delete Clusterd and Multiple Non Clustered Indexes ### \ No newline at end of file diff --git a/_includes/.DS_Store b/_includes/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/_includes/.DS_Store differ diff --git a/_includes/adsense-vertical.html b/_includes/adsense-vertical.html deleted file mode 100644 index bf7c901..0000000 --- a/_includes/adsense-vertical.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/_includes/adsense.html b/_includes/adsense.html deleted file mode 100644 index a3b290f..0000000 --- a/_includes/adsense.html +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/_includes/analytics.html b/_includes/analytics.html deleted file mode 100644 index 60ca816..0000000 --- a/_includes/analytics.html +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/_includes/contact-form.html b/_includes/contact-form.html new file mode 100644 index 0000000..8c1ba77 --- /dev/null +++ b/_includes/contact-form.html @@ -0,0 +1,30 @@ +
+ +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + + +
+ +
+ +
+ +
\ No newline at end of file diff --git a/_includes/demo-post.md b/_includes/demo-post.md new file mode 100644 index 0000000..ffa4668 --- /dev/null +++ b/_includes/demo-post.md @@ -0,0 +1,99 @@ +## Demo content + +This page is a demo that shows everything you can do inside portfolio and blog posts. + +We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way. + +![](/images/demo/work-01.jpg) + +**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). + +You can create lists: + +* Simple bulleted lists +* Like this one +* Are cool + +And: + +1. Numbered lists +2. Like this other one +3. Are great too + +You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content: + +> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.” + +The theme also supports markdown tables: + +| Item | Author | Supports tables? | Price | +|----------------------|---------------|------------------|-------| +| Duet Jekyll Theme | Jekyll Themes | Yes | $49 | +| Index Jekyll Theme | Jekyll Themes | Yes | $49 | +| Journal Jekyll Theme | Jekyll Themes | Yes | $49 | + +And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3]. + +[^1]: Beautiful modern, minimal theme design. +[^2]: Powerful features to show off your work. +[^3]: Maintained and supported by the theme developer. + +You can throw in some horizontal rules too: + +--- + +### Image galleries + +Here's a really neat custom feature we added – galleries: + + + +Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout: + +```html + +``` + +*See what we did there? Code and syntax highlighting is built-in too!* + +Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page. + +--- + +### Image carousels + +Here's another gallery with only one column, which creates a carousel slide-show instead. + +A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images. + + + +### What about videos? + +Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly: + + + +--- + +## Pretty cool, huh? + +We've packed this theme with powerful features to show off your work. + +Why not put them to use on your new website? + +Get This Theme \ No newline at end of file diff --git a/_includes/disqus_comments.html b/_includes/disqus_comments.html deleted file mode 100644 index a14cdba..0000000 --- a/_includes/disqus_comments.html +++ /dev/null @@ -1,20 +0,0 @@ -{% if page.comments != false and jekyll.environment == "production" %} - -
- - -{% endif %} diff --git a/_includes/footer.html b/_includes/footer.html index d5aad37..896a505 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,52 +1,15 @@ - \ No newline at end of file diff --git a/_includes/google-analytics.html b/_includes/google-analytics.html deleted file mode 100644 index eb2a692..0000000 --- a/_includes/google-analytics.html +++ /dev/null @@ -1,11 +0,0 @@ - - diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 0060aba..0000000 --- a/_includes/head.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - {% if page.title %}{{ page.title | escape }} | Gavin Draper - SQL Server - Blog{% else %}{{ site.title | escape }}{% endif %} - - - - - - - - {% if jekyll.environment == 'production' and site.google_analytics %} - {% include google-analytics.html %} - {% endif %} - \ No newline at end of file diff --git a/_includes/header.html b/_includes/header.html index dc4d7fe..f185528 100644 --- a/_includes/header.html +++ b/_includes/header.html @@ -1,44 +1,32 @@ - \ No newline at end of file diff --git a/_includes/icon-github.html b/_includes/icon-github.html deleted file mode 100644 index e501a16..0000000 --- a/_includes/icon-github.html +++ /dev/null @@ -1 +0,0 @@ -{% include icon-github.svg %}{{ include.username }} diff --git a/_includes/icon-github.svg b/_includes/icon-github.svg deleted file mode 100644 index e6c5f6d..0000000 --- a/_includes/icon-github.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_includes/icon-linkedin.html b/_includes/icon-linkedin.html deleted file mode 100644 index 4cd2721..0000000 --- a/_includes/icon-linkedin.html +++ /dev/null @@ -1,4 +0,0 @@ - - {% include icon-linkedin.svg %} - {{ include.username }} - \ No newline at end of file diff --git a/_includes/icon-linkedin.svg b/_includes/icon-linkedin.svg deleted file mode 100644 index 0a92659..0000000 --- a/_includes/icon-linkedin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/_includes/icon-twitter.html b/_includes/icon-twitter.html deleted file mode 100644 index e623dbd..0000000 --- a/_includes/icon-twitter.html +++ /dev/null @@ -1 +0,0 @@ -{{ include.username }} diff --git a/_includes/icon-twitter.svg b/_includes/icon-twitter.svg deleted file mode 100644 index efc0ecf..0000000 --- a/_includes/icon-twitter.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/_includes/socials.html b/_includes/socials.html new file mode 100644 index 0000000..64ea896 --- /dev/null +++ b/_includes/socials.html @@ -0,0 +1,11 @@ + \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html index ad827a5..f0d4991 100644 --- a/_layouts/default.html +++ b/_layouts/default.html @@ -1,62 +1,106 @@ - - - -{% include head.html %} - - - - {% include header.html %} - -
-
- -
- {{ content }} -
- -
-
- - {% include footer.html %} {% include analytics.html %} + + + + + + + + + + + + + + + + {% if page.url == "/" %}{{ site.data.settings.basic_settings.site_title }} – {{ page.title }}{% else %}{{ page.title }} – {{ site.data.settings.basic_settings.site_title }}{% endif %} + + + + + + + + + + + + + + {% if site.data.settings.font_settings.font_embed %} + + {{ site.data.settings.font_settings.font_embed }} + {% endif %} + + + + + + + + + + + {% if site.data.settings.advanced_settings.custom_styles %} + + + {% endif %} + + {% if site.data.settings.advanced_settings.analytics_code %} + + {{ site.data.settings.advanced_settings.analytics_code }} + {% endif %} + + {% if site.data.settings.advanced_settings.header_js %} + + {{ site.data.settings.advanced_settings.header_js }} + {% endif %} + + + + + + + + {% include header.html %} + + +
+ +
+ + +
+ +
+ + {{ content }} + +
+ +
+ + + {% include footer.html %} + + + + + + + {% if site.data.settings.advanced_settings.footer_js %} + + {{ site.data.settings.advanced_settings.footer_js }} + {% endif %} + + - + \ No newline at end of file diff --git a/_layouts/home.html b/_layouts/home.html deleted file mode 100644 index b2f18eb..0000000 --- a/_layouts/home.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -layout: default ---- - -
- - {{ content }} - -{% for post in paginator.posts %} - - -

{{ post.title }}

-

- - {{ post.date | date: "%b %-d, %Y" }} - -

-
- {{ post.content }} -
-{% endfor %} -
- - - -

subscribe via RSS

- -
diff --git a/_layouts/page.html b/_layouts/page.html index 01e4b2a..919cae6 100644 --- a/_layouts/page.html +++ b/_layouts/page.html @@ -1,14 +1,32 @@ --- layout: default --- -
-
-

{{ page.title | escape }}

-
+
-
- {{ content }} -
+
+
+
-
+
+ +

{{ page.title }}

+

{{ page.subtitle }}

+ +
+ + + +
+ +
+ +
+ + {{ page.content }} + +
+ +
+ +
\ No newline at end of file diff --git a/_layouts/post.html b/_layouts/post.html index 6bbf441..1a65a8d 100644 --- a/_layouts/post.html +++ b/_layouts/post.html @@ -1,39 +1,32 @@ --- layout: default --- -
-
-

{{ page.title | escape }}

- -
- -
- {{ content }} -
- - - {% for tag in page.tags %} - {{ tag }} - {% endfor %} - - - - - - - {% if site.disqus.shortname %} - {% include disqus_comments.html %} - {% endif %} -
+ +
+ +
+
+
+ +
+ +

{{ page.title }}

+

{{ page.date | date_to_long_string }}

+ +
+ +
+ +
+ +
+ +
+ + {{ page.content }} + +
+ +
+ +
\ No newline at end of file diff --git a/_layouts/project.html b/_layouts/project.html new file mode 100644 index 0000000..919cae6 --- /dev/null +++ b/_layouts/project.html @@ -0,0 +1,32 @@ +--- +layout: default +--- + +
+ +
+
+
+ +
+ +

{{ page.title }}

+

{{ page.subtitle }}

+ +
+ +
+ +
+ +
+ +
+ + {{ page.content }} + +
+ +
+ +
\ No newline at end of file diff --git a/_layouts/tagpage.html b/_layouts/tagpage.html deleted file mode 100644 index bed9695..0000000 --- a/_layouts/tagpage.html +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: default ---- -

{{ page.tag | capitalize }}

- - diff --git a/_pages/.DS_Store b/_pages/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/_pages/.DS_Store differ diff --git a/_pages/about.md b/_pages/about.md new file mode 100644 index 0000000..75f8ff5 --- /dev/null +++ b/_pages/about.md @@ -0,0 +1,11 @@ +--- +title: About me +subtitle: +description: +featured_image: /images/hero-images/night-programming-outdoor.jpg +--- + + +Software Developer/Dev DBA. Often hyper, often talking rubbish. Pick and choose what to take away from this blog... + +Want to get in touch? Hit up the contact me page. \ No newline at end of file diff --git a/_pages/contact.md b/_pages/contact.md new file mode 100644 index 0000000..36e3c90 --- /dev/null +++ b/_pages/contact.md @@ -0,0 +1,9 @@ +--- +title: Contact +subtitle: +description: +featured_image: /images/hero-images/mailbox.jpg +--- + +{% include contact-form.html %} + diff --git a/_pages/thanks.md b/_pages/thanks.md new file mode 100644 index 0000000..6307f67 --- /dev/null +++ b/_pages/thanks.md @@ -0,0 +1,10 @@ +--- +title: Thank you +subtitle: Your message was sent successfully. +description: A sleek, modern Jekyll theme for personal websites. +featured_image: /images/demo/contact.jpg +--- + +![](/images/demo/about.jpg) + +Please note, this contact form is for demo purposes only and is not monitored. Please contact us [via our website](https://jekyllthemes.io) if you need support. \ No newline at end of file diff --git a/_posts/.DS_Store b/_posts/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/_posts/.DS_Store differ diff --git a/_posts/2019-01-30-SQL-Server-Backup-Restore-To-Azure.md b/_posts/2019-01-30-SQL-Server-Backup-Restore-To-Azure.md index 884d302..f8fd986 100644 --- a/_posts/2019-01-30-SQL-Server-Backup-Restore-To-Azure.md +++ b/_posts/2019-01-30-SQL-Server-Backup-Restore-To-Azure.md @@ -3,6 +3,7 @@ layout: post title: Backing Up and Restoring Your On-Premise Databases To and From the Cloud date: '2019-01-30 05:21:44' tags: cloud azure backup-and-restore +featured_image: '/images/hero-images/typewriter.jpg' --- I've been meaning to start a series of posts on "Dipping your toes into the cloud" for a while now, there are a number of things you can do to slowly take advantage of the cloud without having to re-architect your whole on-premise setup. This post will serve as part one of that series. diff --git a/_posts/2019-01-31-SQL-Server_Log-Shipping-How-Far-Behind-Is-Your-Secondary.md b/_posts/2019-01-31-SQL-Server_Log-Shipping-How-Far-Behind-Is-Your-Secondary.md index 51cc401..a7b9ce5 100644 --- a/_posts/2019-01-31-SQL-Server_Log-Shipping-How-Far-Behind-Is-Your-Secondary.md +++ b/_posts/2019-01-31-SQL-Server_Log-Shipping-How-Far-Behind-Is-Your-Secondary.md @@ -3,6 +3,7 @@ layout: post title: How To Check How Far Behind Your SQL Server Log Shipping Secondary Is date: '2019-01-31 07:56:13' tags: backup-and-restore hadr +featured_image: '/images/hero-images/typewriter.jpg' --- Log shipping is one of the simplest and most bulletproof methods to get SQL Server to replicate data to a different server/location. For the most part, you set it up and don't need to touch it again, it just works. Out of the box the agent jobs SQL Server sets up for this generates alerts when a backup/restore hasn't run for a period of time notifying you that there is a problem. diff --git a/_posts/2019-02-11-SQL-Server-Backup-Stats.md b/_posts/2019-02-11-SQL-Server-Backup-Stats.md index d35108f..4b8dc91 100644 --- a/_posts/2019-02-11-SQL-Server-Backup-Stats.md +++ b/_posts/2019-02-11-SQL-Server-Backup-Stats.md @@ -3,6 +3,7 @@ layout: post title: SQL Server Script To Check Your Backup RPO Status date: '2019-02-13 08:31:22' tags: backup-and-restore hadr +featured_image: '/images/hero-images/typewriter.jpg' --- I recently wanted a script to tell me that for every database on a given server diff --git a/_posts/2019-02-18-SQL-Server-What-Waits-Happened-In-The-Last-X-Seconds.md b/_posts/2019-02-18-SQL-Server-What-Waits-Happened-In-The-Last-X-Seconds.md index ab4eb79..37d89b7 100644 --- a/_posts/2019-02-18-SQL-Server-What-Waits-Happened-In-The-Last-X-Seconds.md +++ b/_posts/2019-02-18-SQL-Server-What-Waits-Happened-In-The-Last-X-Seconds.md @@ -3,6 +3,7 @@ layout: post title: SQL Server, What Waits Happened In The Last X Seconds date: '2019-02-18 08:07:42' tags: performance-tuning profiling +featured_image: '/images/hero-images/typewriter.jpg' --- There are plenty of scripts out there that can show you the waits that are occurring on your server, however, a lot of them do a lot more than just that. I recently wanted a script that does just the absolute minimum for me to specify a time window and get that wait stats. diff --git a/_posts/2019-02-19-SQL-Server-Whats-In-My-Buffer-Cache.md b/_posts/2019-02-19-SQL-Server-Whats-In-My-Buffer-Cache.md index 5b5e45e..c7e0bb0 100644 --- a/_posts/2019-02-19-SQL-Server-Whats-In-My-Buffer-Cache.md +++ b/_posts/2019-02-19-SQL-Server-Whats-In-My-Buffer-Cache.md @@ -3,6 +3,7 @@ layout: post title: SQL Server, What's In My Buffer Cache? date: '2019-02-19 05:32:12' tags: performance-tuning profiling +featured_image: '/images/hero-images/typewriter.jpg' --- When SQL Server reads pages it stores them in an area of memory called the buffer cache, things like memory pressure can then cause items to get removed from the buffer cache. I wrote the below script to check what's in the cache at any given time, it's scoped to the database you are running it in... diff --git a/_posts/2019-02-20-LOB-Reads-Wonkyness.md b/_posts/2019-02-20-LOB-Reads-Wonkyness.md index 6a5147e..ca1e5f6 100644 --- a/_posts/2019-02-20-LOB-Reads-Wonkyness.md +++ b/_posts/2019-02-20-LOB-Reads-Wonkyness.md @@ -3,8 +3,9 @@ layout: post title: Odd Behavior With LOB/Overflow Data date: '2019-02-20 05:56:22' excerpt: 'In writing some sample demos around LOB and Row-Overflow data I found a couple of oddities in the way reads are reported in STATISTICS IO and query plans' +featured_image: '/images/hero-images/typewriter.jpg' --- -In writing some sample demos around LOB and Row-Overflow data I found a couple of oddities in the way reads are reported in STATISTICS IO and query plans, There is every chance I'm missing something obvious here and if that is the case then please let me know as I'd love to understand this more. +In writing some sample demos around LOB and Row-Overflow data I found a couple of oddities in the way reads are reported in STATISTICS IO and query plans, There is every chance I'm missing something obvious here and if that is the case then please let me know as I'd love to understand this more. The following is what I have observed on SQL Server 2017... diff --git a/_projects/.DS_Store b/_projects/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/_projects/.DS_Store differ diff --git a/_projects/2020-05-14-GroundsKeeper.md b/_projects/2020-05-14-GroundsKeeper.md new file mode 100644 index 0000000..8d11062 --- /dev/null +++ b/_projects/2020-05-14-GroundsKeeper.md @@ -0,0 +1,8 @@ +--- +title: 'GroundsKeeper' +subtitle: 'SQL Server Growth Monitor' +date: 2020-05-11 00:00:00 +description: Monitor your SQL Server objts to plan for growth over time. +featured_image: '/images/hero-images/harddrive.jpg' +--- +Info about this project will go here... \ No newline at end of file diff --git a/_projects/2020-05-14-JSTetris.md b/_projects/2020-05-14-JSTetris.md new file mode 100644 index 0000000..897e723 --- /dev/null +++ b/_projects/2020-05-14-JSTetris.md @@ -0,0 +1,8 @@ +--- +title: 'JSTetris' +subtitle: 'Tetris in JS, Need I Say More?' +date: 2020-05-10 00:00:00 +description: +featured_image: '/images/hero-images/blocks.jpg' +--- +Info about this project will go here... \ No newline at end of file diff --git a/_projects/2020-05-14-TableTopSocial.md b/_projects/2020-05-14-TableTopSocial.md new file mode 100644 index 0000000..1bfe5f6 --- /dev/null +++ b/_projects/2020-05-14-TableTopSocial.md @@ -0,0 +1,8 @@ +--- +title: 'TableTopSocial' +subtitle: 'Multiplayer Gaming In Blazor' +date: 2020-05-14 00:00:00 +description: Playing with client side blazor and SignalR to implement browser based multiplayer tabletop games +featured_image: '/images/hero-images/dice.jpg' +--- +Info about this project will go here... \ No newline at end of file diff --git a/_projects/2020-05-14-chaosload.md b/_projects/2020-05-14-chaosload.md new file mode 100644 index 0000000..90c0cc7 --- /dev/null +++ b/_projects/2020-05-14-chaosload.md @@ -0,0 +1,8 @@ +--- +title: 'ChaosLoad' +subtitle: 'Load Simulator' +date: 2020-05-12 00:00:00 +description: Script fakes workloads to run across SQL Server, MongoDB and RabbitMQ. Easily extensible to add other platforms. +featured_image: '/images/hero-images/crowds.jpg' +--- +Info about this project will go here... \ No newline at end of file diff --git a/_sass/.DS_Store b/_sass/.DS_Store new file mode 100644 index 0000000..009f08a Binary files /dev/null and b/_sass/.DS_Store differ diff --git a/_sass/_basic.scss b/_sass/_basic.scss new file mode 100644 index 0000000..eb0dd47 --- /dev/null +++ b/_sass/_basic.scss @@ -0,0 +1,456 @@ +// - - - - - - - - - - - - - - - - - - + +// Basics + +// - - - - - - - - - - - - - - - - - - + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Basics + +html, body { + height: 100%; +} + +body { + background: $background-color; + font-family: $body-font; + font-weight: $regular-weight; + font-style: normal; + line-height: 1; + color: $text-medium-color; +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Typography + +h1, h2, h3, h4, h5, h6 { + font-family: $title-font; + color: $text-dark-color; + + &:first-child { + margin-top: 0; + } +} + +h1, .h1 { + font-size: $h1-small; + font-weight: $h1-weight; + line-height: $h1-lineheight; + letter-spacing: $h1-spacing; + + @include mq(tabletp) { + font-size: $h1-medium; + } + + @include mq(laptop) { + font-size: $h1-large; + } +} + +h2, .h2 { + margin-top: 40px; + font-size: $h2-small; + font-weight: $h2-weight; + line-height: $h2-lineheight; + letter-spacing: $h2-spacing; + + @include mq(tabletp) { + font-size: $h2-medium; + } + + @include mq(laptop) { + font-size: $h2-large; + } +} + +h3, .h3 { + margin-top: 40px; + font-size: $h3-small; + font-weight: $h3-weight; + line-height: $h3-lineheight; + letter-spacing: $h3-spacing; + + @include mq(tabletp) { + font-size: $h3-medium; + } + + @include mq(laptop) { + font-size: $h3-large; + } +} + +h4, .h4 { + margin-top: 25px; + font-size: $h4-small; + font-weight: $h4-weight; + line-height: $h4-lineheight; + letter-spacing: $h4-spacing; + + @include mq(tabletp) { + font-size: $h4-medium; + } + + @include mq(laptop) { + font-size: $h4-large; + } +} + +h5, .h5 { + margin-top: 15px; + font-size: $h5-small; + font-weight: $h5-weight; + line-height: $h5-lineheight; + letter-spacing: $h5-spacing; + + @include mq(tabletp) { + font-size: $h5-medium; + } + + @include mq(laptop) { + font-size: $h5-large; + } +} + +h6, .h6 { + margin-top: 15px; + font-size: $h6-small; + font-weight: $h6-weight; + line-height: $h6-lineheight; + letter-spacing: $h6-spacing; + + @include mq(tabletp) { + font-size: $h6-medium; + } + + @include mq(laptop) { + font-size: $h6-large; + } +} + +p, ul, ol { + margin-top: 15px; + font-size: $p-small; + font-weight: $p-weight; + line-height: $p-lineheight; + letter-spacing: $p-spacing; + + @include mq(tabletp) { + font-size: $p-medium; + } + + @include mq(laptop) { + font-size: $p-large; + } + + strong { + font-weight: $bold-weight; + } + + &:first-child { + margin-top: 0; + } +} + +ul, ol { + list-style-position: inside; +} + +blockquote { + margin-top: 15px; + border-left: 2px solid $text-dark-color; + padding: 10px 0 10px 20px; + font-size: $blockquote-small; + font-weight: $blockquote-weight; + letter-spacing: $blockquote-spacing; + line-height: $blockquote-lineheight; + + @include mq(tabletp) { + border-left-width: 3px; + padding: 15px 0 15px 30px; + font-size: $blockquote-medium; + } + + @include mq(laptop) { + border-left-width: 4px; + padding: 20px 0 20px 40px; + font-size: $blockquote-large; + } + + p { + font-size: $blockquote-small; + font-weight: $blockquote-weight; + letter-spacing: $blockquote-spacing; + line-height: $blockquote-lineheight; + + @include mq(tabletp) { + font-size: $blockquote-medium; + } + + @include mq(laptop) { + font-size: $blockquote-large; + } + } +} + +a { + text-decoration: none; + color: $text-dark-color; + font-weight: $bold-weight; + @include transition(all 0.15s ease-in-out); + + &:hover { + color: $accent-color; + } +} + +.button { + display: inline-block; + padding: 9px 10px 10px; + font-size: 13px; + line-height: 1; + border: 2px solid $accent-color; + background: $accent-color; + color: $background-color; + font-weight: $button-weight; + letter-spacing: $button-spacing; + cursor: pointer; + + @include mq(tabletp) { + padding: 11px 20px 12px; + font-size: 15px; + } + + &:hover { + background: adjust-hue($accent-color,15%); + border-color: adjust-hue($accent-color,15%); + color: $background-color; + } + + svg { + margin-right: 5px; + + &:last-child { + margin-right: 0; + margin-left: 5px; + } + + @include mq(tabletp) { + margin-right: 8px; + + &:last-child { + margin-right: 0; + margin-left: 8px; + } + } + } +} + +.button--large { + padding: 15px 20px 16px; + font-size: 13px; + + @include mq(tabletp) { + padding: 19px 40px 20px; + font-size: 17px; + } +} + +.button--light { + background: transparent; + border-color: $text-dark-color; + color: $text-dark-color; + + &:hover { + background: $accent-color; + border-color: $accent-color; + color: $background-color; + } +} + +hr { + margin: 40px 0; + border: 0; + height: 2px; + background: $background-alt-color; +} + +::selection { background: $accent-color; color: $background-color; } +::-moz-selection { background: $accent-color; color: $background-color; } + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page loading + +.page-loader { + display: none; +} + +.page { + @include transition(all 0.6s cubic-bezier(0.2, 0.3, 0, 1)); +} + +section:not(.hero) { + @include transition(all 0.8s cubic-bezier(0.2, 0.3, 0, 1)); +} + +body.loading { + + .loader { + opacity: 1; + visibility: visible; + @include transition(all 0.4s ease-in-out 1s); + } + + .page { + opacity: 0; + visibility: hidden; + @include transition(all 0.4s ease-in-out, transform 0s ease-in-out 0.4s); + } + + section:not(.hero) { + @include translate(0,30px); + @include transition(all 0.4s ease-in-out, transform 0s ease-in-out 0.4s); + } + + .footer { + opacity: 0; + visibility: hidden; + @include transition(all 0.4s ease-in-out); + } +} + +.loader { + position: fixed; + top: 50%; + left: 50%; + @include translate(-50%,-50%); + width: 60px; + height: 15px; + + opacity: 0; + visibility: hidden; + @include transition(all 0.2s ease-in-out); + + svg { + width: 100%; + height: 100%; + fill: rgba($text-dark-color,0.2); + } +} + +.page, +.page__content { + float: left; + clear: both; + width: 100%; +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Page sections + +section { + margin-top: 40px; + + @include mq(tabletp) { + margin-top: 50px; + } + + @include mq(tabletl) { + margin-top: 60px; + } + + @include mq(laptop) { + margin-top: 80px; + } +} + +.wrap { + position: relative; + margin: 0 auto; + padding: 0 20px; + max-width: 500px; + + @include mq(tabletp) { + padding: 0; + max-width: 680px; + } + + @include mq(tabletl) { + max-width: 900px; + } + + @include mq(laptop) { + max-width: 1100px; + } +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Buy CTA + +.buy-cta { + position: fixed; + bottom: 0; + right: 0; +} + +.buy-cta__link { + display: block; + position: relative; + width: 40px; + height: 40px; + background: #dc5b5d; + + @include mq(tabletp) { + width: 60px; + height: 60px; + } + + svg { + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 20px; + @include translate(-50%,-50%); + fill: #fff; + + @include mq(tabletp) { + width: 30px; + height: 30px; + } + } + + &:hover { + + .buy-cta__text { + @include translate(0,0); + opacity: 1; + } + } +} + +.buy-cta__text { + position: absolute; + top: 0; + right: 40px; + background: #dc5b5d; + padding: 14px 10px 13px 17px; + color: #fff; + font-size: 13px; + line-height: 1; + white-space: nowrap; + + @include transition(all 0.15s ease-in-out); + @include translate(0,20px); + opacity: 0; + + @include mq(tabletp) { + right: 60px; + padding: 22px 14px 23px 25px; + font-size: 15px; + @include translate(0,30px); + } +} \ No newline at end of file diff --git a/_sass/_includes/.DS_Store b/_sass/_includes/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/_sass/_includes/.DS_Store differ diff --git a/_sass/_includes/_contact-form.scss b/_sass/_includes/_contact-form.scss new file mode 100644 index 0000000..251b42a --- /dev/null +++ b/_sass/_includes/_contact-form.scss @@ -0,0 +1,107 @@ +// - - - - - - - - - - - - - - - - - - + +// Contact form + +// - - - - - - - - - - - - - - - - - - + +.contact-form { + margin: 20px auto; + width: 100%; + + @include mq(tabletp) { + margin: 30px auto; + } + + @include mq(laptop) { + margin: 40px auto; + } + + &:first-child { + margin-top: 0; + } +} + +.contact-form__item { + margin-top: 15px; + + @include mq(tabletp) { + margin-top: 20px; + } + + @include mq(laptop) { + margin-top: 30px; + } + + &:first-child { + margin-top: 0; + } +} + +.contact-form__item--error { + + .contact-form__input, + .contact-form__textarea { + border-color: $error-color; + } +} + +.contact-form__label { + display: block; + font-size: $p-small; + font-weight: $bold-weight; + color: $text-medium-color; + + @include mq(tabletp) { + font-size: $p-medium; + } + + @include mq(laptop) { + font-size: $p-large; + } +} + +.contact-form__input, +.contact-form__textarea { + width: 100%; + margin-top: 8px; + border: 2px solid $border-color; + border-radius: 2px; + padding: 10px 12px; + background: $background-color; + font-size: $p-small; + line-height: 1.4; + color: $text-dark-color; + @include transition(all 0.15s ease-in-out); + + @include mq(tabletp) { + padding: 15px 18px; + font-size: $p-medium; + } + + @include mq(laptop) { + font-size: $p-large; + } + + &:focus { + outline: none; + border-color: $accent-color; + } +} + +::-webkit-input-placeholder { + color: lighten($text-light-color,15%); +} +::-moz-placeholder { + color: lighten($text-light-color,15%); +} +:-ms-input-placeholder { + color: lighten($text-light-color,15%); +} +:-moz-placeholder { + color: lighten($text-light-color,15%); +} + +.contact-form__textarea { + min-height: 200px; + resize: none; +} \ No newline at end of file diff --git a/_sass/_includes/_content.scss b/_sass/_includes/_content.scss new file mode 100644 index 0000000..902fe89 --- /dev/null +++ b/_sass/_includes/_content.scss @@ -0,0 +1,271 @@ +// - - - - - - - - - - - - - - - - - - + +// Single page/post/project + +// - - - - - - - - - - - - - - - - - - + +.hero.hero--single { + + p { + margin-top: 10px; + } +} + +.single { + margin-top: 0; + padding-bottom: 40px; + background: $background-alt-color; + + @include mq(tabletp) { + padding-bottom: 60px; + } + + @include mq(laptop) { + padding-bottom: 80px; + } +} + +.single-post { + position: relative; + margin-top: -40px; + background: $background-color; + padding: 16px 20px; + @include box-shadow(0, 6px, 16px, rgba(0,0,0,0.05)); + + @include mq(tabletp) { + margin-top: -60px; + padding: 32px 40px; + @include box-shadow(0, 10px, 20px, rgba(0,0,0,0.05)); + } + + @include mq(tabletl) { + padding: 50px 60px; + } + + @include mq(laptop) { + padding: 70px 80px; + @include box-shadow(0, 14px, 26px, rgba(0,0,0,0.05)); + } + + hr { + margin: 30px auto; + + @include mq(tabletp) { + margin-top: 40px; + margin-bottom: 40px; + } + } + + blockquote, + figure { + margin: 20px auto; + + @include mq(tabletp) { + margin: 30px auto; + } + + @include mq(laptop) { + margin: 40px auto; + } + } + + blockquote p { + max-width: 100%; + padding: 0; + } + + p a { + font-weight: $bold-weight; + border-bottom: 2px solid $accent-color; + } + + p .button { + margin-top: 10px; + } + + .highlighter-rouge, + table { + margin: 20px auto; + width: 100%; + + @include mq(tabletp) { + margin: 30px auto; + } + + @include mq(laptop) { + margin: 40px auto; + } + } + + .highlight { + display: block; + padding: 0; + line-height: 1.5; + font-size: $p-small*0.85; + line-height: $p-lineheight; + overflow: auto; + + @include mq(tabletp) { + font-size: $p-medium*0.85; + } + + @include mq(laptop) { + font-size: $p-large*0.85; + } + + .highlight { + padding: 20px; + + @include mq(tabletp) { + padding: 30px; + } + + @include mq(laptop) { + padding: 40px; + } + } + } + + table { + border: 2px solid $text-dark-color; + + thead { + background: $text-dark-color; + color: $background-color; + text-align: left; + font-weight: $bold-weight; + + th { + font-weight: $bold-weight; + } + } + + th, td { + padding: 10px; + font-size: $p-small; + font-weight: $p-weight; + + @include mq(tabletp) { + padding: 15px; + } + + @include mq(laptop) { + padding: 20px; + font-size: $p-medium; + } + } + + tr { + + &:nth-child(2n) { + background: $background-alt-color; + } + } + } + + sup a.footnote { + display: inline-block; + margin-left: 5px; + min-width: 16px; + height: 16px; + border-radius: 100%; + border-bottom: none; + padding: 1px 3px; + background: $background-alt-color; + font-size: 10px; + text-align: center; + color: $text-light-color; + + &:hover { + background: $text-light-color; + color: $background-color; + } + } + + .footnotes { + margin-top: 40px; + + @include mq(tabletp) { + margin-top: 60px; + } + + @include mq(laptop) { + margin-top: 80px; + } + + ol { + list-style: none; + counter-reset: footnotes; + + li { + margin-top: 5px; + font-size: 13px; + counter-increment: footnotes; + + &:before { + content: counter(footnotes); + box-sizing: border-box; + display: inline-block; + margin-right: 3px; + width: 20px; + height: 20px; + border-radius: 100%; + border-bottom: none; + padding: 2px 3px; + background: $background-alt-color; + font-size: 11px; + font-weight: $bold-weight; + text-align: center; + color: $text-light-color; + } + + p { + display: inline; + max-width: 100%; + font-size: 13px; + + a.reversefootnote { + border-bottom: 0; + vertical-align: sub; + } + } + } + } + } +} + +.image-wrap, +.video-wrap { + position: relative; + margin: 20px auto; + + @include mq(tabletp) { + margin: 30px auto; + } + + @include mq(laptop) { + margin: 40px auto; + } + + &:first-child { + margin-top: 0; + } +} + +.image-wrap img { + margin: 0 auto; +} + +.video { + position: relative; + width: 100%; + height: 0; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} \ No newline at end of file diff --git a/_sass/_includes/_footer.scss b/_sass/_includes/_footer.scss new file mode 100644 index 0000000..e53f379 --- /dev/null +++ b/_sass/_includes/_footer.scss @@ -0,0 +1,95 @@ +// - - - - - - - - - - - - - - - - - - + +// Footer + +// - - - - - - - - - - - - - - - - - - + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Footer + +.footer { + @include transition(all 0.4s ease-in-out 0.8s); + padding: 40px 0; + + @include mq(tabletp) { + padding: 50px 0; + } + + @include mq(tabletl) { + padding: 60px 0; + } + + @include mq(laptop) { + padding: 80px 0; + } +} + +.footer__logo { + display: block; + width: $footer-logo-width; +} + +.footer__title { + font-size: $sitetitle-small; + font-weight: $sitetitle-weight; + letter-spacing: $sitetitle-spacing; + line-height: 1; + color: $text-medium-color; + + &:hover { + color: $text-dark-color; + } + + @include mq(tabletp) { + font-size: $sitetitle-medium; + } + + @include mq(laptop) { + font-size: $sitetitle-large; + } +} + +.footer__text { + color: $text-light-color; +} + +.footer__copyright { + display: block; + margin-top: 10px; + font-size: 13px; + color: $text-light-color; + + a { + margin-left: 10px; + color: $text-light-color; + font-weight: $regular-weight; + + &:hover { + color: $text-medium-color; + } + } + + span { + margin-top: 10px; + display: inline-block; + } + + @include mq(tabletp) { + + span { + margin-top: 0; + } + } +} + +.footer .socials { + margin-top: 25px; + + @include mq(laptop) { + position: absolute; + top: 0; + right: 0; + margin-top: 0; + } +} \ No newline at end of file diff --git a/_sass/_includes/_gallery.scss b/_sass/_includes/_gallery.scss new file mode 100644 index 0000000..3eafff5 --- /dev/null +++ b/_sass/_includes/_gallery.scss @@ -0,0 +1,181 @@ +// - - - - - - - - - - - - - - - - - - + +// Gallery + +// - - - - - - - - - - - - - - - - - - + +.gallery { + visibility: hidden; + position: relative; + margin: 20px auto; + + @include mq(tabletp) { + margin: 30px auto; + } + + @include mq(laptop) { + margin: 40px auto; + } + + &:first-child { + margin-top: 0; + } +} + +.gallery--on { + visibility: visible; +} + +.gallery__item { + position: relative; + + img { + width: 100%; + } +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Carousel + +.gallery--carousel { + + .gallery__wrap { + + } + + .gallery__item { + + } + + .gallery__item__link { + display: block; + pointer-events: none; + } + + .gallery__item__image { + + } + + .owl-nav { + display: none; + } + + .owl-dots { + margin-top: 20px; + text-align: center; + + .owl-dot { + display: inline-block; + margin: 0 3px; + width: 12px; + height: 12px; + border: 0; + border-radius: 100%; + background: $text-light-color; + @include transition(all 0.2s ease-in-out); + cursor: pointer; + outline: none; + + &.active { + background: $accent-color; + } + } + } +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Grid + +.gallery--grid { + + .gallery__wrap { + margin-left: -$grid-spacing/2; + margin-right: -$grid-spacing/2; + } + + .gallery__item { + float: left; + width: 50%; + padding: $grid-spacing/2; + } + + .gallery__item__link { + display: block; + cursor: zoom-in; + } + + &[data-columns="3"] { + + .gallery__item { + width: 33.33%; + } + } + + &[data-columns="4"] { + + .gallery__item { + width: 33.33%; + } + + @include mq(tabletp) { + + .gallery__item { + width: 25%; + } + } + } + + &[data-columns="5"] { + + .gallery__item { + width: 33.33%; + } + + @include mq(tabletp) { + + .gallery__item { + width: 25%; + } + } + + @include mq(tabletl) { + + .gallery__item { + width: 20%; + } + } + } + + &[data-columns="6"] { + + .gallery__item { + width: 33.33%; + } + + @include mq(tabletp) { + + .gallery__item { + width: 25%; + } + } + + @include mq(tabletl) { + + .gallery__item { + width: 20%; + } + } + + @include mq(laptop) { + + .gallery__item { + width: 16.66%; + } + } + } +} + + + diff --git a/_sass/_includes/_header.scss b/_sass/_includes/_header.scss new file mode 100644 index 0000000..67d478b --- /dev/null +++ b/_sass/_includes/_header.scss @@ -0,0 +1,252 @@ +// - - - - - - - - - - - - - - - - - - + +// Header + menu + +// - - - - - - - - - - - - - - - - - - + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Header + +.header { + margin-top: 20px; + + @include mq(tabletp) { + margin-top: 25px; + } + + @include mq(laptop) { + margin-top: 30px; + } +} + +.header__logo { + display: block; + width: $logo-width; + max-width: 80%; + + @include mq(tabletp) { + max-width: 50%; + } +} + +.header__logo__img { + width: 100%; + height: auto; +} + +.header__title { + font-size: $sitetitle-small; + font-weight: $sitetitle-weight; + letter-spacing: $sitetitle-spacing; + line-height: 1; + color: $text-dark-color; + + &:hover { + color: $accent-color; + } + + @include mq(tabletp) { + font-size: $sitetitle-medium; + } + + @include mq(laptop) { + font-size: $sitetitle-large; + } +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Menu + +.menu { + + @include mq(tabletl) { + position: absolute; + top: 50%; + right: 20px; + @include translate(0,-50%); + } +} + +.menu__toggle { + position: absolute; + z-index: 1002; + top: 50%; + right: 30px; + @include translate(0,-50%); + cursor: pointer; + font-size: 15px; + line-height: 20px; + color: $text-dark-color; + + @include mq(tabletp) { + right: 0; + } + + @include mq(tabletl) { + display: none; + } +} + +.menu__toggle__icon { + float: right; + position: relative; + width: 24px; + height: 20px; + margin-left: 8px; + + span, span:before, span:after { + content: ''; + position: absolute; + top: 8px; + left: 0; + width: 100%; + height: 3px; + @include transition(all 0.1s); + background: $text-dark-color; + } + + span:before { + top: -8px; + } + + span:after { + top: 8px; + } +} + +.menu--open .menu__toggle__icon { + + span:before, span:after { + background: $accent-color !important; + } + + span { + background-color: transparent !important; + } + + span:before, + span:after { + top: 0; + } + + span:before { + @include rotate(45); + } + + span:after { + @include rotate(-45); + } +} + +.menu__wrap { + position: fixed; + z-index: 1000; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba($background-color,0.95); + overflow: auto; + + visibility: hidden; + opacity: 0; + @include transition(all 0.2s ease-in-out); + + @include mq(tabletl) { + position: relative; + background: transparent; + visibility: visible; + overflow: visible; + opacity: 1; + @include transition(none); + } +} + +.menu--open .menu__wrap { + visibility: visible; + opacity: 1; +} + +.menu__list { + list-style: none; + margin: 0 auto; + padding: 20px; + + @include mq(tabletp) { + padding: 40px 0 0; + max-width: 70%; + } + + @include mq(tabletl) { + max-width: none; + margin: 0; + padding: 0; + } +} + +.menu__list__item { + + @include mq(tabletl) { + display: inline-block; + margin-left: 20px; + + &:first-child { + margin-left: 0; + } + } +} + +.menu__list__item__link { + font-size: $menu-small; + font-weight: $menu-weight; + color: $text-dark-color; + padding: 10px 0; + + &:hover { + color: $accent-color; + } + + @include mq(tabletl) { + display: block; + padding: 0 0 8px; + font-size: $menu-medium; + color: $text-dark-color; + + &:hover { + color: $accent-color; + } + } + + @include mq(laptop) { + font-size: $menu-large; + } + + &.active-link { + color: $accent-color; + } +} + +.menu__button { + margin-top: 15px; + padding: 15px 20px 16px; + font-size: 13px; + + @include mq(tabletl) { + margin-top: 0; + padding: 11px 20px 12px; + font-size: 15px; + } +} + +.buttons--circular { + + .menu__button { + border-radius: 24px; + + @include mq(tabletl) { + border-radius: 21px; + } + } +} diff --git a/_sass/_includes/_hero.scss b/_sass/_includes/_hero.scss new file mode 100644 index 0000000..08b39e7 --- /dev/null +++ b/_sass/_includes/_hero.scss @@ -0,0 +1,84 @@ +// - - - - - - - - - - - - - - - - - - + +// Profile + +// - - - - - - - - - - - - - - - - - - + + +.hero { + position: relative; + margin-top: 20px; + padding: 60px 0 100px; + background: $hero-background-color; + + @include mq(tabletp) { + margin-top: 25px; + padding: 120px 0 180px; + } + + @include mq(laptop) { + margin-top: 30px; + padding: 160px 0 220px; + } + + h1 { + color: $hero-text-color; + + @include mq(tabletp) { + white-space: pre-line; + } + } + + p { + color: rgba($hero-text-color, 0.8); + + @include mq(tabletp) { + margin-top: 25px; + } + + @include mq(laptop) { + margin-top: 30px; + } + } + + .socials { + margin-top: 15px; + + @include mq(tabletp) { + margin-top: 25px; + } + + @include mq(laptop) { + margin-top: 30px; + } + } + + .socials__item__link { + background: rgba($hero-text-color, 0.8); + color: $hero-background-color; + + &:hover { + background: $hero-text-color; + } + } +} + +.hero__image { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +.hero__overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: rgba($hero-background-color, $overlay-opacity); +} \ No newline at end of file diff --git a/_sass/_includes/_listing.scss b/_sass/_includes/_listing.scss new file mode 100644 index 0000000..d030657 --- /dev/null +++ b/_sass/_includes/_listing.scss @@ -0,0 +1,194 @@ +// - - - - - - - - - - - - - - - - - - + +// Listing posts + +// - - - - - - - - - - - - - - - - - - + + +.listing { + margin-top: -40px; + + @include mq(tabletp) { + margin-top: -60px; + } +} + +.post { + position: relative; + float: left; + clear: both; + width: 100%; + margin-top: 30px; + cursor: pointer; + + &:first-child { + margin-top: 0; + } + + @include mq(tabletl) { + margin-top: 60px; + background: $background-alt-color; + } + + &:hover { + + .post__image { + @include scale(1.2); + } + + .post__content { + @include box-shadow(0, 6px, 16px, rgba(0,0,0,0.1)); + } + + .post__title a { + color: $accent-color; + } + } + + &:nth-child(2n) { + + @include mq(tabletl) { + + .post__image-wrap { + left: auto; + right: 0; + } + + .post__content-wrap { + float: left; + padding: 30px 0 30px 30px; + } + + .post__content { + margin: 0 -30px 0 0; + } + } + } +} + +.post__image-wrap { + position: relative; + height: 0; + margin: 0; + padding-bottom: 56.25%; + overflow: hidden; + + @include mq(tabletl) { + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 50%; + height: auto; + padding-bottom: 0; + } +} + +.post__image { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + @include transition(all 1s cubic-bezier(0.2, 0.3, 0, 1)); +} + +.post__content-wrap { + float: left; + width: 100%; + position: relative; + padding: 0 20px 20px; + background: $background-alt-color; + + @include mq(tabletp) { + padding: 0 30px 30px; + } + + @include mq(tabletl) { + float: right; + padding: 30px 30px 30px 0; + width: 50%; + } +} + +.post__content { + position: relative; + margin-top: -20px; + padding: 20px; + background: $background-color; + @include box-shadow(0, 6px, 16px, rgba(0,0,0,0.05)); + @include transition(all 0.4s cubic-bezier(0.2, 0.3, 0, 1)); + + @include mq(tabletp) { + margin-top: -30px; + padding: 30px; + } + + @include mq(tabletl) { + margin: 0 0 0 -30px; + min-height: 400px; + } +} + +.post__title { + + a { + font-weight: $h2-weight; + } +} + +.post__subtitle { + margin-top: 5px; + font-size: 15px; + color: $accent-color; +} + +.post__description { + +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pagination + +.pagination { + margin-top: 30px; + + @include mq(tabletl) { + margin-top: 60px; + } +} + +.pagination__prev, +.pagination__next { + width: 50%; + padding: 20px; + border: 0; + + @include mq(tabletp) { + padding: 30px; + font-size: $p-small; + } + + @include mq(laptop) { + font-size: $p-medium; + } + + &:hover { + background: $accent-color; + } +} + +.pagination__prev { + float: left; + background: $text-medium-color; +} + +.pagination__next { + float: right; + text-align: right; + background: $text-dark-color; +} \ No newline at end of file diff --git a/_sass/_includes/_socials.scss b/_sass/_includes/_socials.scss new file mode 100644 index 0000000..40a23e8 --- /dev/null +++ b/_sass/_includes/_socials.scss @@ -0,0 +1,54 @@ +// - - - - - - - - - - - - - - - - - - + +// Socials + +// - - - - - - - - - - - - - - - - - - + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Socials + +.socials { + list-style: none; + margin: 0; + padding: 0; +} + +.socials__item { + display: inline-block; + margin-left: 2px; + + &:first-child { + margin-left: 0; + } +} + +.socials__item__link { + position: relative; + display: block; + width: 40px; + height: 40px; + border-radius: 100%; + background: $text-light-color; + font-size: 20px; + line-height: 1; + color: $background-color; + + @include mq(tabletp) { + width: 50px; + height: 50px; + font-size: 25px; + } + + svg { + position: absolute; + top: 50%; + left: 50%; + @include translate(-50%,-52%); + } + + &:hover { + background: $accent-color; + color: $background-color; + } +} \ No newline at end of file diff --git a/_sass/_includes/_syntax.scss b/_sass/_includes/_syntax.scss new file mode 100644 index 0000000..21d9178 --- /dev/null +++ b/_sass/_includes/_syntax.scss @@ -0,0 +1,69 @@ +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f0f0f0; } +.highlight .c { color: #60a0b0; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #40a070 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #40a070 } /* Literal.Number.Bin */ +.highlight .mf { color: #40a070 } /* Literal.Number.Float */ +.highlight .mh { color: #40a070 } /* Literal.Number.Hex */ +.highlight .mi { color: #40a070 } /* Literal.Number.Integer */ +.highlight .mo { color: #40a070 } /* Literal.Number.Oct */ +.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #06287e } /* Name.Function.Magic */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_sass/_mixins.scss b/_sass/_mixins.scss new file mode 100644 index 0000000..aa5cb5d --- /dev/null +++ b/_sass/_mixins.scss @@ -0,0 +1,136 @@ +// - - - - - - - - - - - - - - - - - - + +// Mixins + +// - - - - - - - - - - - - - - - - - - + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Responsive +// Usage: @include mq(tabletp) {} + +$break-phonel: 480px; +$break-tabletp: 768px; +$break-tabletl: 1024px; +$break-laptop: 1220px; +$break-desktop: 1420px; + +@mixin mq($media) { + @if $media == phonel { + @media only screen and (min-width: $break-phonel) { @content; } + } + @else if $media == tabletp { + @media only screen and (min-width: $break-tabletp) { @content; } + } + @else if $media == tabletl { + @media only screen and (min-width: $break-tabletl) { @content; } + } + @else if $media == laptop { + @media only screen and (min-width: $break-laptop) { @content; } + } + @else if $media == desktop { + @media only screen and (min-width: $break-desktop) { @content; } + } +} + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Transitions +// Usage: @include transition(color .3s ease); + +@mixin transition($args...) { + -webkit-transition: $args; + -moz-transition: $args; + -ms-transition: $args; + -o-transition: $args; + transition: $args; +} + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Animations +// Usage: +// @include keyframes(slide-down) { +// 0% { opacity: 1; } +// 90% { opacity: 0; } +// } +// .element { +// @include animation('slide-down 5s 3'); +// } + +@mixin keyframes($animation-name) { + @-webkit-keyframes #{$animation-name} { + @content; + } + @-moz-keyframes #{$animation-name} { + @content; + } + @-ms-keyframes #{$animation-name} { + @content; + } + @-o-keyframes #{$animation-name} { + @content; + } + @keyframes #{$animation-name} { + @content; + } +} + +@mixin animation($str) { + -webkit-animation: #{$str}; + -moz-animation: #{$str}; + -ms-animation: #{$str}; + -o-animation: #{$str}; + animation: #{$str}; +} + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Transforms +// Usage: +// @include skew(25,10); +// @include transform-origin(top left); + +@mixin transform($transforms) { + -moz-transform: $transforms; + -o-transform: $transforms; + -ms-transform: $transforms; + -webkit-transform: $transforms; + transform: $transforms; +} + +@mixin rotate ($deg) { + @include transform(rotate(#{$deg}deg)); +} +@mixin scale($scale) { + @include transform(scale($scale)); +} +@mixin translate ($x, $y) { + @include transform(translate($x, $y)); +} +@mixin skew ($x, $y) { + @include transform(skew(#{$x}deg, #{$y}deg)); +} +@mixin transform-origin ($origin) { + moz-transform-origin: $origin; + -o-transform-origin: $origin; + -ms-transform-origin: $origin; + -webkit-transform-origin: $origin; + transform-origin: $origin; +} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Styles + +@mixin box-shadow($top, $left, $blur, $color, $inset: false) { + @if $inset { + -webkit-box-shadow:inset $top $left $blur $color; + -moz-box-shadow:inset $top $left $blur $color; + box-shadow:inset $top $left $blur $color; + } @else { + -webkit-box-shadow: $top $left $blur $color; + -moz-box-shadow: $top $left $blur $color; + box-shadow: $top $left $blur $color; + } +} + + + + diff --git a/_sass/_plugins.scss b/_sass/_plugins.scss new file mode 100644 index 0000000..a75fa8f --- /dev/null +++ b/_sass/_plugins.scss @@ -0,0 +1,178 @@ +// - - - - - - - - - - - - - - - - - - + +// Plugins + +// - - - - - - - - - - - - - - - - - - + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fluidbox + +@-webkit-keyframes a{0%{-webkit-transform:translate(-50%,-50%) rotateX(0) rotateY(0);transform:translate(-50%,-50%) rotateX(0) rotateY(0)}50%{-webkit-transform:translate(-50%,-50%) rotateX(-180deg) rotateY(0);transform:translate(-50%,-50%) rotateX(-180deg) rotateY(0)}to{-webkit-transform:translate(-50%,-50%) rotateX(-180deg) rotateY(-180deg);transform:translate(-50%,-50%) rotateX(-180deg) rotateY(-180deg)}}@keyframes a{0%{-webkit-transform:translate(-50%,-50%) rotateX(0) rotateY(0);transform:translate(-50%,-50%) rotateX(0) rotateY(0)}50%{-webkit-transform:translate(-50%,-50%) rotateX(-180deg) rotateY(0);transform:translate(-50%,-50%) rotateX(-180deg) rotateY(0)}to{-webkit-transform:translate(-50%,-50%) rotateX(-180deg) rotateY(-180deg);transform:translate(-50%,-50%) rotateX(-180deg) rotateY(-180deg)}}.fluidbox{outline:none}.fluidbox__overlay{background-color:hsla(0,0%,100%,.85);cursor:pointer;cursor:zoom-out;opacity:0;pointer-events:none;position:fixed;top:-100%;left:0;bottom:-100%;right:0;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.fluidbox--opened .fluidbox__overlay{pointer-events:auto}.fluidbox__wrap{background-position:center center;background-size:cover;margin:0 auto;position:relative;-webkit-transition:all .25s ease-in-out;transition:all .25s ease-in-out}.fluidbox--closed .fluidbox__thumb,.fluidbox__thumb{-webkit-transition:opacity 0s ease-in-out 0s;transition:opacity 0s ease-in-out 0s}.fluidbox__ghost{background-size:100% 100%;background-position:center center;background-repeat:no-repeat;position:absolute;-webkit-transition:opacity 0s 0s,-webkit-transform .25s 0s;transition:opacity 0s 0s,-webkit-transform .25s 0s;transition:opacity 0s 0s,transform .25s 0s;transition:opacity 0s 0s,transform .25s 0s,-webkit-transform .25s 0s}.fluidbox--opened .fluidbox__ghost{cursor:pointer;cursor:zoom-out}.fluidbox--closed .fluidbox__ghost{-webkit-transition:opacity 0s .25s,-webkit-transform .25s 0s;transition:opacity 0s .25s,-webkit-transform .25s 0s;transition:opacity 0s .25s,transform .25s 0s;transition:opacity 0s .25s,transform .25s 0s,-webkit-transform .25s 0s}.fluidbox__loader{opacity:0;-webkit-perspective:200px;perspective:200px;pointer-events:none;position:absolute;top:0;left:0;bottom:0;right:0}.fluidbox__loader:before{background-color:hsla(0,0%,100%,.85);content:'';-webkit-transform-style:preserve-3d;transform-style:preserve-3d;position:absolute;top:50%;left:50%;width:20%;padding-bottom:20%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;-webkit-transition-duration:.25s;transition-duration:.25s;-webkit-transition-delay:0s;transition-delay:0s}.fluidbox--loading .fluidbox__loader{opacity:1;-webkit-transition:opacity .25s ease-in-out .25s;transition:opacity .25s ease-in-out .25s}.fluidbox--loading .fluidbox__loader:before{-webkit-animation:a 1s 0s infinite ease-in-out forwards;animation:a 1s 0s infinite ease-in-out forwards} + + + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Owl Carousel + +.owl-carousel { + display: none; + // width: 100%; + -webkit-tap-highlight-color: transparent; + /* position relative and z-index fix webkit rendering fonts issue */ + position: relative; + z-index: 1; } + .owl-carousel .owl-stage { + position: relative; + -ms-touch-action: pan-Y; + -moz-backface-visibility: hidden; + /* fix firefox animation glitch */ } + .owl-carousel .owl-stage:after { + content: "."; + display: block; + clear: both; + visibility: hidden; + line-height: 0; + height: 0; } + .owl-carousel .owl-stage-outer { + position: relative; + overflow: hidden; + /* fix for flashing background */ + -webkit-transform: translate3d(0px, 0px, 0px); } + .owl-carousel .owl-wrapper, + .owl-carousel .owl-item { + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -ms-backface-visibility: hidden; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); } + .owl-carousel .owl-item { + position: relative; + min-height: 1px; + float: left; + -webkit-backface-visibility: hidden; + -webkit-tap-highlight-color: transparent; + -webkit-touch-callout: none; } + .owl-carousel .owl-item img { + display: block; + width: 100%; } + .owl-carousel .owl-nav.disabled, + .owl-carousel .owl-dots.disabled { + display: none; } + .owl-carousel .owl-nav .owl-prev, + .owl-carousel .owl-nav .owl-next, + .owl-carousel .owl-dot { + cursor: pointer; + cursor: hand; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .owl-carousel.owl-loaded { + display: block; } + .owl-carousel.owl-loading { + opacity: 0; + display: block; } + .owl-carousel.owl-hidden { + opacity: 0; } + .owl-carousel.owl-refresh .owl-item { + visibility: hidden; } + .owl-carousel.owl-drag .owl-item { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } + .owl-carousel.owl-grab { + cursor: move; + cursor: grab; } + .owl-carousel.owl-rtl { + direction: rtl; } + .owl-carousel.owl-rtl .owl-item { + float: right; } + +/* No Js */ +.no-js .owl-carousel { + display: block; } + +/* + * Owl Carousel - Animate Plugin + */ +.owl-carousel .animated { + animation-duration: 500ms; + animation-fill-mode: both; } + +.owl-carousel .owl-animated-in { + z-index: 0; } + +.owl-carousel .owl-animated-out { + z-index: 1; } + +.owl-carousel .fadeOut { + animation-name: fadeOut; } + +@keyframes fadeOut { + 0% { + opacity: 1; } + 100% { + opacity: 0; } } + +/* + * Owl Carousel - Auto Height Plugin + */ +.owl-height { + transition: height 500ms ease-in-out; } + +/* + * Owl Carousel - Lazy Load Plugin + */ +.owl-carousel .owl-item .owl-lazy { + opacity: 0; + transition: opacity 400ms ease; } + +.owl-carousel .owl-item img.owl-lazy { + transform-style: preserve-3d; } + +/* + * Owl Carousel - Video Plugin + */ +.owl-carousel .owl-video-wrapper { + position: relative; + height: 100%; + background: #000; } + +.owl-carousel .owl-video-play-icon { + position: absolute; + height: 80px; + width: 80px; + left: 50%; + top: 50%; + margin-left: -40px; + margin-top: -40px; + background: url("owl.video.play.png") no-repeat; + cursor: pointer; + z-index: 1; + -webkit-backface-visibility: hidden; + transition: transform 100ms ease; } + +.owl-carousel .owl-video-play-icon:hover { + -ms-transform: scale(1.3, 1.3); + transform: scale(1.3, 1.3); } + +.owl-carousel .owl-video-playing .owl-video-tn, +.owl-carousel .owl-video-playing .owl-video-play-icon { + display: none; } + +.owl-carousel .owl-video-tn { + opacity: 0; + height: 100%; + background-position: center center; + background-repeat: no-repeat; + background-size: contain; + transition: opacity 400ms ease; } + +.owl-carousel .owl-video-frame { + position: relative; + z-index: 1; + height: 100%; + width: 100%; } \ No newline at end of file diff --git a/_sass/_reset.scss b/_sass/_reset.scss new file mode 100644 index 0000000..b110082 --- /dev/null +++ b/_sass/_reset.scss @@ -0,0 +1,30 @@ +// - - - - - - - - - - - - - - - - - - + +// Reset + +// - - - - - - - - - - - - - - - - - - + + +html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,hr,a,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strong,sub,sup,tt,var,b,u,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,figcaption,figure,footer,header,hgroup,menu,nav,section,summary,time,mark,audio,video{margin:0;padding:0}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}h1,h2,h3,h4,h5,h6{font-size:100%}table{border-collapse:collapse;border-spacing:0}strong,b,mark{font-weight:700;font-style:inherit}em,i,cite,q,address,dfn,var{font-style:italic;font-weight:inherit}abbr[title],dfn[title]{cursor:help;border-bottom:1px dotted}ins{border-bottom:1px solid}a,u,ins{text-decoration:none}del,s{text-decoration:line-through}pre,code,samp,kbd{font-family:monospace}small{font-size:.75em}img{border:0;font-style:italic}input,select,option,optgroup,textarea{font:inherit} + +* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; margin: 0; padding: 0; } + +article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; } +audio[controls], canvas, video { display: inline-block; *display: inline; *zoom: 1; } + +html { font-size: 100%; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } + +body { margin: 0; text-rendering: optimizeLegibility; } + +img { border: 0; -ms-interpolation-mode: bicubic; display: block;} + +img, object, embed { max-width: 100%; height: auto; } + +input { -webkit-appearance: none; } + +header, footer, section { + position: relative; + float: left; + clear: both; + width: 100%; +} \ No newline at end of file diff --git a/_sass/gavcustom.scss b/_sass/gavcustom.scss deleted file mode 100644 index 040a72b..0000000 --- a/_sass/gavcustom.scss +++ /dev/null @@ -1,1177 +0,0 @@ -@charset "utf-8"; - -// Define defaults for each variable. - -$base-font-family: "Source Sans Pro",Helvetica,Arial,sans-serif !default; -$base-font-size: 16px !default; -$base-font-weight: 400 !default; -$small-font-size: $base-font-size * 0.875 !default; -$base-line-height: 1.5 !default; - -$spacing-unit: 30px !default; - -$text-color: #ddd !default; -$background-color: #222 !default; -$brand-color: #1a9aeb !default; - -$grey-color: #ddd !default; -$grey-color-light: lighten($grey-color, 40%) !default; -$grey-color-dark: darken($grey-color, 25%) !default; - -// Width of the content area -$content-width: 800px !default; - -$on-palm: 600px !default; -$on-laptop: 800px !default; - -// Use media queries like this: -// @include media-query($on-palm) { -// .wrapper { -// padding-right: $spacing-unit / 2; -// padding-left: $spacing-unit / 2; -// } -// } -@mixin media-query($device) { - @media screen and (max-width: $device) { - @content; - } -} - -@mixin relative-font-size($ratio) { - font-size: $base-font-size * $ratio; -} - -// Import partials. -@import - "gavcustom/base", - "gavcustom/layout", - "gavcustom/syntax-highlighting" -; -.post-list > li{margin-bottom:5px;} -h2{margin-bottom:5px;} - -pre{ - background-color: $background-color; - color:$text-color; - -} - -th{ - text-align: left; padding-right:10px; -} -table{margin-bottom:15px;;} - - td { padding-right:25px;padding-left:5px; } - td:first-child{ padding-left:0px;} - td:last-child { padding-right:0px; } - - -table { -border:none; -border-collapse: collapse; -} - -table td { -border-left: 1px solid; -border-right: 1px solid; -border-bottom: 1px solid; -} - -table td:first-child { -border-left: none; -} - -table td:last-child { -border-right: none; -} - -//table tr:first-child td{border-left-style:none;border-right-style:none;} - - -.post-title{ - margin-top:17px; -} - -.PageNavigation { - font-size: 14px; - display: block; - width: auto; - overflow: hidden; -} - -.PageNavigation a { - display: block; - width: 50%; - float: left; - margin: 1em 0; -} - -.PageNavigation .next { - text-align: right; -} - -.share-page { - padding: 0px 15px; - background-color:$brand-color; - a { - color:#fff; - font-weight: 700; - margin-left: 10px; - &:hover { - color:$background-color; - border-bottom: 1px dashed $background-color; - } - } -} - -.page-content { - margin: 15px auto; - max-width: 1000px; - border-radius: 4px; - padding: 15px 0; -} - -.wrapper -{ - padding-right: 15px; - padding-left: 15px; - max-width:calc(1000px - (30px * 2)); -} - -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2017 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ - -/*! - * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=e84203957bded987a5401d8144245ff4) - * Config saved to config.json and https://gist.github.com/e84203957bded987a5401d8144245ff4 - */ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */ -/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ -html { - font-family: sans-serif; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; -} -body { - margin: 0; -} -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -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: 1em 40px; -} -hr { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - 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 { - 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"] { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - 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: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -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 { - padding: 0; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -*:before, -*:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -html { - font-size: 10px; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -body { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 1.42857143; -} -input, -button, -select, -textarea { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} -a { - color: #337ab7; - text-decoration: none; -} -a:hover, -a:focus { - color: #23527c; - text-decoration: underline; -} -a:focus { - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -figure { - margin: 0; -} -img { - vertical-align: middle; -} -.img-responsive { - display: block; - max-width: 100%; - height: auto; -} -.img-rounded { - border-radius: 6px; -} -.img-thumbnail { - padding: 4px; - line-height: 1.42857143; - background-color: #ffffff; - border: 1px solid #dddddd; - border-radius: 4px; - -webkit-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; - display: inline-block; - max-width: 100%; - height: auto; -} -.img-circle { - border-radius: 50%; -} -hr { - margin-top: 20px; - margin-bottom: 20px; - border: 0; - border-top: 1px solid #eeeeee; -} -.sr-only { - position: absolute; - width: 1px; - height: 1px; - margin: -1px; - padding: 0; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - position: static; - width: auto; - height: auto; - margin: 0; - overflow: visible; - clip: auto; -} -[role="button"] { - cursor: pointer; -} -.container { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; -} -@media (min-width: 768px) { - .container { - width: 750px; - } -} -@media (min-width: 992px) { - .container { - width: 970px; - } -} -@media (min-width: 1200px) { - .container { - width: 1170px; - } -} -.container-fluid { - margin-right: auto; - margin-left: auto; - padding-left: 15px; - padding-right: 15px; - max-width:1600px; -} -.row { - margin-left: -15px; - margin-right: -15px; -} -.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { - position: relative; - min-height: 1px; - padding-left: 15px; - padding-right: 15px; -} -.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { - float: left; -} -.col-xs-12 { - width: 100%; -} -.col-xs-11 { - width: 91.66666667%; -} -.col-xs-10 { - width: 83.33333333%; -} -.col-xs-9 { - width: 75%; -} -.col-xs-8 { - width: 66.66666667%; -} -.col-xs-7 { - width: 58.33333333%; -} -.col-xs-6 { - width: 50%; -} -.col-xs-5 { - width: 41.66666667%; -} -.col-xs-4 { - width: 33.33333333%; -} -.col-xs-3 { - width: 25%; -} -.col-xs-2 { - width: 16.66666667%; -} -.col-xs-1 { - width: 8.33333333%; -} -.col-xs-pull-12 { - right: 100%; -} -.col-xs-pull-11 { - right: 91.66666667%; -} -.col-xs-pull-10 { - right: 83.33333333%; -} -.col-xs-pull-9 { - right: 75%; -} -.col-xs-pull-8 { - right: 66.66666667%; -} -.col-xs-pull-7 { - right: 58.33333333%; -} -.col-xs-pull-6 { - right: 50%; -} -.col-xs-pull-5 { - right: 41.66666667%; -} -.col-xs-pull-4 { - right: 33.33333333%; -} -.col-xs-pull-3 { - right: 25%; -} -.col-xs-pull-2 { - right: 16.66666667%; -} -.col-xs-pull-1 { - right: 8.33333333%; -} -.col-xs-pull-0 { - right: auto; -} -.col-xs-push-12 { - left: 100%; -} -.col-xs-push-11 { - left: 91.66666667%; -} -.col-xs-push-10 { - left: 83.33333333%; -} -.col-xs-push-9 { - left: 75%; -} -.col-xs-push-8 { - left: 66.66666667%; -} -.col-xs-push-7 { - left: 58.33333333%; -} -.col-xs-push-6 { - left: 50%; -} -.col-xs-push-5 { - left: 41.66666667%; -} -.col-xs-push-4 { - left: 33.33333333%; -} -.col-xs-push-3 { - left: 25%; -} -.col-xs-push-2 { - left: 16.66666667%; -} -.col-xs-push-1 { - left: 8.33333333%; -} -.col-xs-push-0 { - left: auto; -} -.col-xs-offset-12 { - margin-left: 100%; -} -.col-xs-offset-11 { - margin-left: 91.66666667%; -} -.col-xs-offset-10 { - margin-left: 83.33333333%; -} -.col-xs-offset-9 { - margin-left: 75%; -} -.col-xs-offset-8 { - margin-left: 66.66666667%; -} -.col-xs-offset-7 { - margin-left: 58.33333333%; -} -.col-xs-offset-6 { - margin-left: 50%; -} -.col-xs-offset-5 { - margin-left: 41.66666667%; -} -.col-xs-offset-4 { - margin-left: 33.33333333%; -} -.col-xs-offset-3 { - margin-left: 25%; -} -.col-xs-offset-2 { - margin-left: 16.66666667%; -} -.col-xs-offset-1 { - margin-left: 8.33333333%; -} -.col-xs-offset-0 { - margin-left: 0%; -} -@media (min-width: 768px) { - .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { - float: left; - } - .col-sm-12 { - width: 100%; - } - .col-sm-11 { - width: 91.66666667%; - } - .col-sm-10 { - width: 83.33333333%; - } - .col-sm-9 { - width: 75%; - } - .col-sm-8 { - width: 66.66666667%; - } - .col-sm-7 { - width: 58.33333333%; - } - .col-sm-6 { - width: 50%; - } - .col-sm-5 { - width: 41.66666667%; - } - .col-sm-4 { - width: 33.33333333%; - } - .col-sm-3 { - width: 25%; - } - .col-sm-2 { - width: 16.66666667%; - } - .col-sm-1 { - width: 8.33333333%; - } - .col-sm-pull-12 { - right: 100%; - } - .col-sm-pull-11 { - right: 91.66666667%; - } - .col-sm-pull-10 { - right: 83.33333333%; - } - .col-sm-pull-9 { - right: 75%; - } - .col-sm-pull-8 { - right: 66.66666667%; - } - .col-sm-pull-7 { - right: 58.33333333%; - } - .col-sm-pull-6 { - right: 50%; - } - .col-sm-pull-5 { - right: 41.66666667%; - } - .col-sm-pull-4 { - right: 33.33333333%; - } - .col-sm-pull-3 { - right: 25%; - } - .col-sm-pull-2 { - right: 16.66666667%; - } - .col-sm-pull-1 { - right: 8.33333333%; - } - .col-sm-pull-0 { - right: auto; - } - .col-sm-push-12 { - left: 100%; - } - .col-sm-push-11 { - left: 91.66666667%; - } - .col-sm-push-10 { - left: 83.33333333%; - } - .col-sm-push-9 { - left: 75%; - } - .col-sm-push-8 { - left: 66.66666667%; - } - .col-sm-push-7 { - left: 58.33333333%; - } - .col-sm-push-6 { - left: 50%; - } - .col-sm-push-5 { - left: 41.66666667%; - } - .col-sm-push-4 { - left: 33.33333333%; - } - .col-sm-push-3 { - left: 25%; - } - .col-sm-push-2 { - left: 16.66666667%; - } - .col-sm-push-1 { - left: 8.33333333%; - } - .col-sm-push-0 { - left: auto; - } - .col-sm-offset-12 { - margin-left: 100%; - } - .col-sm-offset-11 { - margin-left: 91.66666667%; - } - .col-sm-offset-10 { - margin-left: 83.33333333%; - } - .col-sm-offset-9 { - margin-left: 75%; - } - .col-sm-offset-8 { - margin-left: 66.66666667%; - } - .col-sm-offset-7 { - margin-left: 58.33333333%; - } - .col-sm-offset-6 { - margin-left: 50%; - } - .col-sm-offset-5 { - margin-left: 41.66666667%; - } - .col-sm-offset-4 { - margin-left: 33.33333333%; - } - .col-sm-offset-3 { - margin-left: 25%; - } - .col-sm-offset-2 { - margin-left: 16.66666667%; - } - .col-sm-offset-1 { - margin-left: 8.33333333%; - } - .col-sm-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 992px) { - .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { - float: left; - } - .col-md-12 { - width: 100%; - } - .col-md-11 { - width: 91.66666667%; - } - .col-md-10 { - width: 83.33333333%; - } - .col-md-9 { - width: 75%; - } - .col-md-8 { - width: 66.66666667%; - } - .col-md-7 { - width: 58.33333333%; - } - .col-md-6 { - width: 50%; - } - .col-md-5 { - width: 41.66666667%; - } - .col-md-4 { - width: 33.33333333%; - } - .col-md-3 { - width: 25%; - } - .col-md-2 { - width: 16.66666667%; - } - .col-md-1 { - width: 8.33333333%; - } - .col-md-pull-12 { - right: 100%; - } - .col-md-pull-11 { - right: 91.66666667%; - } - .col-md-pull-10 { - right: 83.33333333%; - } - .col-md-pull-9 { - right: 75%; - } - .col-md-pull-8 { - right: 66.66666667%; - } - .col-md-pull-7 { - right: 58.33333333%; - } - .col-md-pull-6 { - right: 50%; - } - .col-md-pull-5 { - right: 41.66666667%; - } - .col-md-pull-4 { - right: 33.33333333%; - } - .col-md-pull-3 { - right: 25%; - } - .col-md-pull-2 { - right: 16.66666667%; - } - .col-md-pull-1 { - right: 8.33333333%; - } - .col-md-pull-0 { - right: auto; - } - .col-md-push-12 { - left: 100%; - } - .col-md-push-11 { - left: 91.66666667%; - } - .col-md-push-10 { - left: 83.33333333%; - } - .col-md-push-9 { - left: 75%; - } - .col-md-push-8 { - left: 66.66666667%; - } - .col-md-push-7 { - left: 58.33333333%; - } - .col-md-push-6 { - left: 50%; - } - .col-md-push-5 { - left: 41.66666667%; - } - .col-md-push-4 { - left: 33.33333333%; - } - .col-md-push-3 { - left: 25%; - } - .col-md-push-2 { - left: 16.66666667%; - } - .col-md-push-1 { - left: 8.33333333%; - } - .col-md-push-0 { - left: auto; - } - .col-md-offset-12 { - margin-left: 100%; - } - .col-md-offset-11 { - margin-left: 91.66666667%; - } - .col-md-offset-10 { - margin-left: 83.33333333%; - } - .col-md-offset-9 { - margin-left: 75%; - } - .col-md-offset-8 { - margin-left: 66.66666667%; - } - .col-md-offset-7 { - margin-left: 58.33333333%; - } - .col-md-offset-6 { - margin-left: 50%; - } - .col-md-offset-5 { - margin-left: 41.66666667%; - } - .col-md-offset-4 { - margin-left: 33.33333333%; - } - .col-md-offset-3 { - margin-left: 25%; - } - .col-md-offset-2 { - margin-left: 16.66666667%; - } - .col-md-offset-1 { - margin-left: 8.33333333%; - } - .col-md-offset-0 { - margin-left: 0%; - } -} -@media (min-width: 1200px) { - .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { - float: left; - } - .col-lg-12 { - width: 100%; - } - .col-lg-11 { - width: 91.66666667%; - } - .col-lg-10 { - width: 83.33333333%; - } - .col-lg-9 { - width: 75%; - } - .col-lg-8 { - width: 66.66666667%; - } - .col-lg-7 { - width: 58.33333333%; - } - .col-lg-6 { - width: 50%; - } - .col-lg-5 { - width: 41.66666667%; - } - .col-lg-4 { - width: 33.33333333%; - } - .col-lg-3 { - width: 25%; - } - .col-lg-2 { - width: 16.66666667%; - } - .col-lg-1 { - width: 8.33333333%; - } - .col-lg-pull-12 { - right: 100%; - } - .col-lg-pull-11 { - right: 91.66666667%; - } - .col-lg-pull-10 { - right: 83.33333333%; - } - .col-lg-pull-9 { - right: 75%; - } - .col-lg-pull-8 { - right: 66.66666667%; - } - .col-lg-pull-7 { - right: 58.33333333%; - } - .col-lg-pull-6 { - right: 50%; - } - .col-lg-pull-5 { - right: 41.66666667%; - } - .col-lg-pull-4 { - right: 33.33333333%; - } - .col-lg-pull-3 { - right: 25%; - } - .col-lg-pull-2 { - right: 16.66666667%; - } - .col-lg-pull-1 { - right: 8.33333333%; - } - .col-lg-pull-0 { - right: auto; - } - .col-lg-push-12 { - left: 100%; - } - .col-lg-push-11 { - left: 91.66666667%; - } - .col-lg-push-10 { - left: 83.33333333%; - } - .col-lg-push-9 { - left: 75%; - } - .col-lg-push-8 { - left: 66.66666667%; - } - .col-lg-push-7 { - left: 58.33333333%; - } - .col-lg-push-6 { - left: 50%; - } - .col-lg-push-5 { - left: 41.66666667%; - } - .col-lg-push-4 { - left: 33.33333333%; - } - .col-lg-push-3 { - left: 25%; - } - .col-lg-push-2 { - left: 16.66666667%; - } - .col-lg-push-1 { - left: 8.33333333%; - } - .col-lg-push-0 { - left: auto; - } - .col-lg-offset-12 { - margin-left: 100%; - } - .col-lg-offset-11 { - margin-left: 91.66666667%; - } - .col-lg-offset-10 { - margin-left: 83.33333333%; - } - .col-lg-offset-9 { - margin-left: 75%; - } - .col-lg-offset-8 { - margin-left: 66.66666667%; - } - .col-lg-offset-7 { - margin-left: 58.33333333%; - } - .col-lg-offset-6 { - margin-left: 50%; - } - .col-lg-offset-5 { - margin-left: 41.66666667%; - } - .col-lg-offset-4 { - margin-left: 33.33333333%; - } - .col-lg-offset-3 { - margin-left: 25%; - } - .col-lg-offset-2 { - margin-left: 16.66666667%; - } - .col-lg-offset-1 { - margin-left: 8.33333333%; - } - .col-lg-offset-0 { - margin-left: 0%; - } -} - -.sidebar{ - margin-top:15px; -} - -.sidebar ul{ - margin-left:0px; - padding-left:0px; -} - -.sidebar ul li{ - margin-left:0px; - padding-left:0px; - margin-bottom:5px; -} - -.hidden-xs-up { - display: none !important; -} - -@media (max-width: 575px) { - .hidden-xs-down { - display: none !important; - } -} - -@media (min-width: 576px) { - .hidden-sm-up { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-sm-down { - display: none !important; - } -} - -@media (min-width: 768px) { - .hidden-md-up { - display: none !important; - } -} - -@media (max-width: 991px) { - .hidden-md-down { - display: none !important; - } -} - -@media (min-width: 992px) { - .hidden-lg-up { - display: none !important; - } -} - -@media (max-width: 1199px) { - .hidden-lg-down { - display: none !important; - } -} - -@media (min-width: 1200px) { - .hidden-xl-up { - display: none !important; - } -} - -.hidden-xl-down { - display: none !important; -} diff --git a/_sass/gavcustom/_base.scss b/_sass/gavcustom/_base.scss deleted file mode 100644 index d146ec5..0000000 --- a/_sass/gavcustom/_base.scss +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Reset some basic elements - */ -body, h1, h2, h3, h4, h5, h6, -p, blockquote, pre, hr, -dl, dd, ol, ul, figure { - margin: 0; - padding: 0; -} - - - -/** - * Basic styling - */ -body { - font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family; - color: $text-color; - background-color: $background-color; - -webkit-text-size-adjust: 100%; - -webkit-font-feature-settings: "kern" 1; - -moz-font-feature-settings: "kern" 1; - -o-font-feature-settings: "kern" 1; - font-feature-settings: "kern" 1; - font-kerning: normal; -} - - - -/** - * Set `margin-bottom` to maintain vertical rhythm - */ -h1, h2, h3, h4, h5, h6, -p, blockquote, pre, -ul, ol, dl, figure, -%vertical-rhythm { - margin-bottom: $spacing-unit / 2; -} - - - -/** - * Images - */ -img { - max-width: 100%; - vertical-align: middle; -} - - - -/** - * Figures - */ -figure > img { - display: block; -} - -figcaption { - font-size: $small-font-size; -} - - - -/** - * Lists - */ -ul, ol { - margin-left: $spacing-unit; -} - -li { - > ul, - > ol { - margin-bottom: 0; - } -} - - - -/** - * Headings - */ -h1, h2, h3, h4, h5, h6 { - font-weight: $base-font-weight; -} - - - -/** - * Links - */ -a { - color: $brand-color; - text-decoration: none; - - &:visited { - color: darken($brand-color, 15%); - } - - &:hover { - color: $text-color; - text-decoration: underline; - } - - .social-media-list &:hover { - text-decoration: none; - - .username { - text-decoration: underline; - } - } -} - - -/** - * Blockquotes - */ -blockquote { - color: $grey-color; - border-left: 4px solid $grey-color-light; - padding-left: $spacing-unit / 2; - @include relative-font-size(1.125); - letter-spacing: -1px; - font-style: italic; - - > :last-child { - margin-bottom: 0; - } -} - - - -/** - * Code formatting - */ -pre, -code { - @include relative-font-size(0.9375); - border: 1px solid $grey-color-light; - border-radius: 3px; - background-color: #222; -} - -code { - padding: 1px 5px; -} - -pre { - padding: 8px 12px; - overflow-x: auto; - - > code { - border: 0; - padding-right: 0; - padding-left: 0; - } -} - - - -/** - * Wrapper - */ -.wrapper { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2)); - max-width: calc(#{$content-width} - (#{$spacing-unit} * 2)); - margin-right: auto; - margin-left: auto; - padding-right: $spacing-unit; - padding-left: $spacing-unit; - @extend %clearfix; - - @include media-query($on-laptop) { - max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit})); - max-width: calc(#{$content-width} - (#{$spacing-unit})); - padding-right: $spacing-unit / 2; - padding-left: $spacing-unit / 2; - } -} - - - -/** - * Clearfix - */ -%clearfix:after { - content: ""; - display: table; - clear: both; -} - - - -/** - * Icons - */ -.icon > svg { - display: inline-block; - vertical-align: middle; - - path { - fill: $grey-color; - } -} - -.social-media-list { - .icon { - padding-right: 5px; - } - - li + li { - padding-top: 5px; - } -} diff --git a/_sass/gavcustom/_layout.scss b/_sass/gavcustom/_layout.scss deleted file mode 100644 index 121042b..0000000 --- a/_sass/gavcustom/_layout.scss +++ /dev/null @@ -1,250 +0,0 @@ -/** - * Site header - */ -.site-header { - border-top: 5px solid $grey-color-dark; - border-bottom: 1px solid $grey-color-light; - min-height: $spacing-unit * 1.865; - - // Positioning context for the mobile navigation icon - position: relative; -} - -.site-title { - @include relative-font-size(1.625); - font-weight: 300; - line-height: $base-line-height * $base-font-size * 2.25; - letter-spacing: -1px; - margin-bottom: 0; - float: left; - - &, - &:visited { - color: $grey-color-dark; - } -} - -.site-nav { - float: right; - line-height: $base-line-height * $base-font-size * 2.25; - - .nav-trigger { - display: none; - } - - .menu-icon { - display: none; - } - - .page-link { - color: $text-color; - line-height: $base-line-height; - - // Gaps between nav items, but not on the last one - &:not(:last-child) { - margin-right: 20px; - } - } - - @include media-query($on-palm) { - position: absolute; - top: 9px; - right: $spacing-unit / 2; - background-color: $background-color; - border: 1px solid $grey-color-light; - border-radius: 5px; - text-align: right; - - label[for="nav-trigger"] { - display: block; - float: right; - width: 36px; - height: 36px; - z-index: 2; - cursor: pointer; - } - - .menu-icon { - display: block; - float: right; - width: 36px; - height: 26px; - line-height: 0; - padding-top: 10px; - text-align: center; - - > svg path { - fill: $grey-color-dark; - } - } - - input ~ .trigger { - clear: both; - display: none; - } - - input:checked ~ .trigger { - display: block; - padding-bottom: 5px; - } - - .page-link { - display: block; - padding: 5px 10px; - - &:not(:last-child) { - margin-right: 0; - } - margin-left: 20px; - } - } -} - - - -/** - * Site footer - */ -.site-footer { - border-top: 1px solid $grey-color-light; - padding: $spacing-unit 0; -} - -.footer-heading { - @include relative-font-size(1.125); - margin-bottom: $spacing-unit / 2; -} - -.contact-list, -.social-media-list { - list-style: none; - margin-left: 0; -} - -.footer-col-wrapper { - @include relative-font-size(0.9375); - color: $grey-color; - margin-left: -$spacing-unit / 2; - @extend %clearfix; -} - -.footer-col { - float: left; - margin-bottom: $spacing-unit / 2; - padding-left: $spacing-unit / 2; -} - -.footer-col-1 { - width: -webkit-calc(35% - (#{$spacing-unit} / 2)); - width: calc(35% - (#{$spacing-unit} / 2)); -} - -.footer-col-2 { - width: -webkit-calc(20% - (#{$spacing-unit} / 2)); - width: calc(20% - (#{$spacing-unit} / 2)); -} - -.footer-col-3 { - width: -webkit-calc(45% - (#{$spacing-unit} / 2)); - width: calc(45% - (#{$spacing-unit} / 2)); -} - -@include media-query($on-laptop) { - .footer-col-1, - .footer-col-2 { - width: -webkit-calc(50% - (#{$spacing-unit} / 2)); - width: calc(50% - (#{$spacing-unit} / 2)); - } - - .footer-col-3 { - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - -@include media-query($on-palm) { - .footer-col { - float: none; - width: -webkit-calc(100% - (#{$spacing-unit} / 2)); - width: calc(100% - (#{$spacing-unit} / 2)); - } -} - - - -/** - * Page content - */ -.page-content { - padding: $spacing-unit 0; -} - -.page-heading { - @include relative-font-size(1.25); -} - -.post-list { - margin-left: 0; - list-style: none; - - > li { - margin-bottom: $spacing-unit; - } -} - -.post-meta { - font-size: $small-font-size; - color: $grey-color; -} - -.post-link { - display: block; - @include relative-font-size(1.5); -} - - - -/** - * Posts - */ -.post-header { - margin-bottom: $spacing-unit; -} - -.post-title { - @include relative-font-size(2.625); - letter-spacing: -1px; - line-height: 1; - - @include media-query($on-laptop) { - @include relative-font-size(2.25); - } -} - -.post-content { - margin-bottom: $spacing-unit; - - h2 { - @include relative-font-size(2); - - @include media-query($on-laptop) { - @include relative-font-size(1.75); - } - } - - h3 { - @include relative-font-size(1.625); - - @include media-query($on-laptop) { - @include relative-font-size(1.375); - } - } - - h4 { - @include relative-font-size(1.25); - - @include media-query($on-laptop) { - @include relative-font-size(1.125); - } - } -} diff --git a/_sass/gavcustom/_syntax-highlighting.scss b/_sass/gavcustom/_syntax-highlighting.scss deleted file mode 100644 index b6925c2..0000000 --- a/_sass/gavcustom/_syntax-highlighting.scss +++ /dev/null @@ -1,70 +0,0 @@ -.highlight .hll { background-color: #49483e } -.highlight { background: #272822; color: #f8f8f2 } -.highlight .c { color: #75715e } /* Comment */ -.highlight .err { color: #960050; background-color: #1e0010 } /* Error */ -.highlight .k { color: #66d9ef } /* Keyword */ -.highlight .l { color: #ae81ff } /* Literal */ -.highlight .n { color: #f8f8f2 } /* Name */ -.highlight .o { color: #f92672 } /* Operator */ -.highlight .p { color: #f8f8f2 } /* Punctuation */ -.highlight .ch { color: #75715e } /* Comment.Hashbang */ -.highlight .cm { color: #75715e } /* Comment.Multiline */ -.highlight .cp { color: #75715e } /* Comment.Preproc */ -.highlight .cpf { color: #75715e } /* Comment.PreprocFile */ -.highlight .c1 { color: #75715e } /* Comment.Single */ -.highlight .cs { color: #75715e } /* Comment.Special */ -.highlight .gd { color: #f92672 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gi { color: #a6e22e } /* Generic.Inserted */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #75715e } /* Generic.Subheading */ -.highlight .kc { color: #66d9ef } /* Keyword.Constant */ -.highlight .kd { color: #66d9ef } /* Keyword.Declaration */ -.highlight .kn { color: #f92672 } /* Keyword.Namespace */ -.highlight .kp { color: #66d9ef } /* Keyword.Pseudo */ -.highlight .kr { color: #66d9ef } /* Keyword.Reserved */ -.highlight .kt { color: #66d9ef } /* Keyword.Type */ -.highlight .ld { color: #e6db74 } /* Literal.Date */ -.highlight .m { color: #ae81ff } /* Literal.Number */ -.highlight .s { color: #e6db74 } /* Literal.String */ -.highlight .na { color: #a6e22e } /* Name.Attribute */ -.highlight .nb { color: #f8f8f2 } /* Name.Builtin */ -.highlight .nc { color: #a6e22e } /* Name.Class */ -.highlight .no { color: #66d9ef } /* Name.Constant */ -.highlight .nd { color: #a6e22e } /* Name.Decorator */ -.highlight .ni { color: #f8f8f2 } /* Name.Entity */ -.highlight .ne { color: #a6e22e } /* Name.Exception */ -.highlight .nf { color: #a6e22e } /* Name.Function */ -.highlight .nl { color: #f8f8f2 } /* Name.Label */ -.highlight .nn { color: #f8f8f2 } /* Name.Namespace */ -.highlight .nx { color: #a6e22e } /* Name.Other */ -.highlight .py { color: #f8f8f2 } /* Name.Property */ -.highlight .nt { color: #f92672 } /* Name.Tag */ -.highlight .nv { color: #f8f8f2 } /* Name.Variable */ -.highlight .ow { color: #f92672 } /* Operator.Word */ -.highlight .w { color: #f8f8f2 } /* Text.Whitespace */ -.highlight .mb { color: #ae81ff } /* Literal.Number.Bin */ -.highlight .mf { color: #ae81ff } /* Literal.Number.Float */ -.highlight .mh { color: #ae81ff } /* Literal.Number.Hex */ -.highlight .mi { color: #ae81ff } /* Literal.Number.Integer */ -.highlight .mo { color: #ae81ff } /* Literal.Number.Oct */ -.highlight .sa { color: #e6db74 } /* Literal.String.Affix */ -.highlight .sb { color: #e6db74 } /* Literal.String.Backtick */ -.highlight .sc { color: #e6db74 } /* Literal.String.Char */ -.highlight .dl { color: #e6db74 } /* Literal.String.Delimiter */ -.highlight .sd { color: #e6db74 } /* Literal.String.Doc */ -.highlight .s2 { color: #e6db74 } /* Literal.String.Double */ -.highlight .se { color: #ae81ff } /* Literal.String.Escape */ -.highlight .sh { color: #e6db74 } /* Literal.String.Heredoc */ -.highlight .si { color: #e6db74 } /* Literal.String.Interpol */ -.highlight .sx { color: #e6db74 } /* Literal.String.Other */ -.highlight .sr { color: #e6db74 } /* Literal.String.Regex */ -.highlight .s1 { color: #e6db74 } /* Literal.String.Single */ -.highlight .ss { color: #e6db74 } /* Literal.String.Symbol */ -.highlight .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #a6e22e } /* Name.Function.Magic */ -.highlight .vc { color: #f8f8f2 } /* Name.Variable.Class */ -.highlight .vg { color: #f8f8f2 } /* Name.Variable.Global */ -.highlight .vi { color: #f8f8f2 } /* Name.Variable.Instance */ -.highlight .vm { color: #f8f8f2 } /* Name.Variable.Magic */ -.highlight .il { color: #ae81ff } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/assets/main.scss b/assets/main.scss deleted file mode 100644 index 477e36e..0000000 --- a/assets/main.scss +++ /dev/null @@ -1,5 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- - -@import "gavcustom"; diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 0000000..c3bd6fc --- /dev/null +++ b/blog/index.html @@ -0,0 +1,68 @@ +--- +layout: default +title: Blog +description: Personal includes a simple blog with pagination. +featured_image: /images/demo/blog.jpg +--- + +
+ +
+
+
+ +
+ +

What I've been up to

+

Personal includes a simple blog with pagination.

+ +
+ +
+ +
+ +
+ + {% for post in paginator.posts %} + +
+ +
+
+
+ +
+
+

{{ post.title }}

+

{{ post.subtitle }}

+

{{ post.description }}

+
+
+ +
+ + {% endfor %} + +
+ +
+ +{% if paginator.total_pages > 1 %} + +
+ +
+ + {% if paginator.previous_page %} + Newer Posts + {% endif %} + {% if paginator.next_page %} + Older Posts + {% endif %} + +
+ +
+ +{% endif %} \ No newline at end of file diff --git a/css/.DS_Store b/css/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/css/.DS_Store differ diff --git a/css/style.scss b/css/style.scss new file mode 100644 index 0000000..952cf31 --- /dev/null +++ b/css/style.scss @@ -0,0 +1,147 @@ +--- +--- + +// - - - - - - - - - - Foundations + +@import "_reset"; +@import "_mixins"; +@import "_plugins"; + + + +// - - - - - - - - - - Variables + + +// Colors + +$background-color: {{ site.data.settings.color_settings.background_color }}; +$background-alt-color: {{ site.data.settings.color_settings.background_alt_color }}; +$border-color: {{ site.data.settings.color_settings.border_color }}; + +$text-dark-color: {{ site.data.settings.color_settings.text_dark_color }}; +$text-medium-color: {{ site.data.settings.color_settings.text_medium_color }}; +$text-light-color: {{ site.data.settings.color_settings.text_light_color }}; + +$accent-color: {{ site.data.settings.color_settings.accent_color }}; + +$hero-background-color: {{ site.data.settings.color_settings.hero_background_color }}; +$hero-text-color: {{ site.data.settings.color_settings.hero_text_color }}; + +$error-color: {{ site.data.settings.color_settings.error_color }}; + + +// Fonts + +$body-font: {{ site.data.settings.font_settings.body_font }}; +$title-font: {{ site.data.settings.font_settings.title_font }}; + +$regular-weight: {{ site.data.settings.font_settings.regular_weight }}; +$bold-weight: {{ site.data.settings.font_settings.bold_weight }}; + + +// Typography + +$sitetitle-small: {{ site.data.settings.font_settings.site_title.small_size }}px; +$sitetitle-medium: {{ site.data.settings.font_settings.site_title.medium_size }}px; +$sitetitle-large: {{ site.data.settings.font_settings.site_title.large_size }}px; +$sitetitle-weight: {{ site.data.settings.font_settings.site_title.weight }}; +$sitetitle-spacing: {{ site.data.settings.font_settings.site_title.letter_spacing }}em; + +$menu-small: {{ site.data.settings.font_settings.menu.small_size }}px; +$menu-medium: {{ site.data.settings.font_settings.menu.medium_size }}px; +$menu-large: {{ site.data.settings.font_settings.menu.large_size }}px; +$menu-weight: {{ site.data.settings.font_settings.menu.weight }}; +$menu-spacing: {{ site.data.settings.font_settings.menu.letter_spacing }}em; + +$h1-small: {{ site.data.settings.font_settings.h1.small_size }}px; +$h1-medium: {{ site.data.settings.font_settings.h1.medium_size }}px; +$h1-large: {{ site.data.settings.font_settings.h1.large_size }}px; +$h1-weight: {{ site.data.settings.font_settings.h1.weight }}; +$h1-spacing: {{ site.data.settings.font_settings.h1.letter_spacing }}em; +$h1-lineheight: {{ site.data.settings.font_settings.h1.line_height }}; + +$h2-small: {{ site.data.settings.font_settings.h2.small_size }}px; +$h2-medium: {{ site.data.settings.font_settings.h2.medium_size }}px; +$h2-large: {{ site.data.settings.font_settings.h2.large_size }}px; +$h2-weight: {{ site.data.settings.font_settings.h2.weight }}; +$h2-spacing: {{ site.data.settings.font_settings.h2.letter_spacing }}em; +$h2-lineheight: {{ site.data.settings.font_settings.h2.line_height }}; + +$h3-small: {{ site.data.settings.font_settings.h3.small_size }}px; +$h3-medium: {{ site.data.settings.font_settings.h3.medium_size }}px; +$h3-large: {{ site.data.settings.font_settings.h3.large_size }}px; +$h3-weight: {{ site.data.settings.font_settings.h3.weight }}; +$h3-spacing: {{ site.data.settings.font_settings.h3.letter_spacing }}em; +$h3-lineheight: {{ site.data.settings.font_settings.h3.line_height }}; + +$h4-small: {{ site.data.settings.font_settings.h4.small_size }}px; +$h4-medium: {{ site.data.settings.font_settings.h4.medium_size }}px; +$h4-large: {{ site.data.settings.font_settings.h4.large_size }}px; +$h4-weight: {{ site.data.settings.font_settings.h4.weight }}; +$h4-spacing: {{ site.data.settings.font_settings.h4.letter_spacing }}em; +$h4-lineheight: {{ site.data.settings.font_settings.h4.line_height }}; + +$h5-small: {{ site.data.settings.font_settings.h5.small_size }}px; +$h5-medium: {{ site.data.settings.font_settings.h5.medium_size }}px; +$h5-large: {{ site.data.settings.font_settings.h5.large_size }}px; +$h5-weight: {{ site.data.settings.font_settings.h5.weight }}; +$h5-spacing: {{ site.data.settings.font_settings.h5.letter_spacing }}em; +$h5-lineheight: {{ site.data.settings.font_settings.h5.line_height }}; + +$h6-small: {{ site.data.settings.font_settings.h6.small_size }}px; +$h6-medium: {{ site.data.settings.font_settings.h6.medium_size }}px; +$h6-large: {{ site.data.settings.font_settings.h6.large_size }}px; +$h6-weight: {{ site.data.settings.font_settings.h6.weight }}; +$h6-spacing: {{ site.data.settings.font_settings.h6.letter_spacing }}em; +$h6-lineheight: {{ site.data.settings.font_settings.h6.line_height }}; + +$p-small: {{ site.data.settings.font_settings.p.small_size }}px; +$p-medium: {{ site.data.settings.font_settings.p.medium_size }}px; +$p-large: {{ site.data.settings.font_settings.p.large_size }}px; +$p-weight: {{ site.data.settings.font_settings.p.weight }}; +$p-spacing: {{ site.data.settings.font_settings.p.letter_spacing }}em; +$p-lineheight: {{ site.data.settings.font_settings.p.line_height }}; + +$blockquote-small: {{ site.data.settings.font_settings.blockquote.small_size }}px; +$blockquote-medium: {{ site.data.settings.font_settings.blockquote.medium_size }}px; +$blockquote-large: {{ site.data.settings.font_settings.blockquote.large_size }}px; +$blockquote-weight: {{ site.data.settings.font_settings.blockquote.weight }}; +$blockquote-spacing: {{ site.data.settings.font_settings.blockquote.letter_spacing }}em; +$blockquote-lineheight: {{ site.data.settings.font_settings.blockquote.line_height }}; + +$button-weight: {{ site.data.settings.font_settings.buttons.weight }}; +$button-spacing: {{ site.data.settings.font_settings.buttons.letter_spacing }}em; + + +// Logo +$logo-width: {{ site.data.settings.header_settings.logo_width }}px; +$footer-logo-width: {{ site.data.settings.footer_settings.logo_width }}px; + + +// Post details +$overlay-opacity: {{ site.data.settings.hero_settings.overlay_opacity }}; +$grid-spacing: {{ site.data.settings.post_settings.grid_spacing }}px; + + + +// - - - - - - - - - - Global styles + +@import "_basic"; + +@import "_includes/_header"; +@import "_includes/_footer"; + +@import "_includes/_content"; +@import "_includes/_socials"; +@import "_includes/_gallery"; +@import "_includes/_syntax"; +@import "_includes/_contact-form"; + + + +// - - - - - - - - - - Section styles + +@import "_includes/_listing"; +@import "_includes/_hero"; + + diff --git a/drafts/2018-06-30-chaosload.md b/drafts/2018-06-30-chaosload.md new file mode 100644 index 0000000..023af4c --- /dev/null +++ b/drafts/2018-06-30-chaosload.md @@ -0,0 +1,104 @@ +--- +title: 'ChaosLoad' +subtitle: 'Load Simulator' +date: 2018-06-30 00:00:00 +description: Works accross SQL Server, Rabbit MQ, Mongo... +featured_image: '/images/hero-images/crowds.jpg' +--- + +## Demo content + +This page is a demo that shows everything you can do inside portfolio and blog posts. + +We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way. + +**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). + +You can create lists: + +* Simple bulleted lists +* Like this one +* Are cool + +And: + +1. Numbered lists +2. Like this other one +3. Are great too + +You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content: + +> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.” + +The theme also supports markdown tables: + +| Item | Author | Supports tables? | Price | +|----------------------|---------------|------------------|-------| +| Duet Jekyll Theme | Jekyll Themes | Yes | $49 | +| Index Jekyll Theme | Jekyll Themes | Yes | $49 | +| Journal Jekyll Theme | Jekyll Themes | Yes | $49 | + +And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3]. + +[^1]: Beautiful modern, minimal theme design. +[^2]: Powerful features to show off your work. +[^3]: Maintained and supported by the theme developer. + +You can throw in some horizontal rules too: + +--- + +### Image galleries + +Here's a really neat custom feature we added – galleries: + + + +Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout: + +```html + +``` + +*See what we did there? Code and syntax highlighting is built-in too!* + +Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page. + +--- + +### Image carousels + +Here's another gallery with only one column, which creates a carousel slide-show instead. + +A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images. + + + +### What about videos? + +Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly: + + + +--- + +## Pretty cool, huh? + +We've packed this theme with powerful features to show off your work. + +Why not put them to use on your new portfolio? + +Get This Theme \ No newline at end of file diff --git a/drafts/2018-06-30-demo-post.md b/drafts/2018-06-30-demo-post.md new file mode 100644 index 0000000..d9e75c0 --- /dev/null +++ b/drafts/2018-06-30-demo-post.md @@ -0,0 +1,105 @@ +--- +title: 'Demo Post' +date: 2018-06-30 00:00:00 +description: This page is a demo that shows everything you can do inside portfolio and blog posts. +featured_image: '/images/demo/demo-square.jpg' +--- + +![](/images/demo/demo-landscape.jpg) + +## Demo content + +This page is a demo that shows everything you can do inside portfolio and blog posts. + +We've included everything you need to create engaging posts about your work, and show off your case studies in a beautiful way. + +**Obviously,** we’ve styled up *all the basic* text formatting options [available in markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). + +You can create lists: + +* Simple bulleted lists +* Like this one +* Are cool + +And: + +1. Numbered lists +2. Like this other one +3. Are great too + +You can also add blockquotes, which are shown at a larger width to help break up the layout and draw attention to key parts of your content: + +> “Simple can be harder than complex: You have to work hard to get your thinking clean to make it simple. But it’s worth it in the end because once you get there, you can move mountains.” + +The theme also supports markdown tables: + +| Item | Author | Supports tables? | Price | +|----------------------|---------------|------------------|-------| +| Duet Jekyll Theme | Jekyll Themes | Yes | $49 | +| Index Jekyll Theme | Jekyll Themes | Yes | $49 | +| Journal Jekyll Theme | Jekyll Themes | Yes | $49 | + +And footnotes[^1], which link to explanations[^2] at the bottom of the page[^3]. + +[^1]: Beautiful modern, minimal theme design. +[^2]: Powerful features to show off your work. +[^3]: Maintained and supported by the theme developer. + +You can throw in some horizontal rules too: + +--- + +### Image galleries + +Here's a really neat custom feature we added – galleries: + + + +Inspired by the Galleries feature from WordPress, we've made it easy to create grid layouts for your images. Just use a bit of simple HTML in your post to create a masonry grid image layout: + +```html + +``` + +*See what we did there? Code and syntax highlighting is built-in too!* + +Change the number inside the 'columns' setting to create different types of gallery for all kinds of purposes. You can even click on each image to seamlessly enlarge it on the page. + +--- + +### Image carousels + +Here's another gallery with only one column, which creates a carousel slide-show instead. + +A nice little feature: the carousel only advances when it is in view, so your visitors won't scroll down to find it half way through your images. + + + +### What about videos? + +Videos are an awesome way to show off your work in a more engaging and personal way, and we’ve made sure they work great on our themes. Just paste an embed code from YouTube or Vimeo, and the theme makes sure it displays perfectly: + + + +--- + +## Pretty cool, huh? + +We've packed this theme with powerful features to show off your work. + +Why not put them to use on your new portfolio? + +Get This Theme \ No newline at end of file diff --git a/drafts/2020-05-14-Im-Back-And-Grammarly.md b/drafts/2020-05-14-Im-Back-And-Grammarly.md new file mode 100644 index 0000000..fbedbb0 --- /dev/null +++ b/drafts/2020-05-14-Im-Back-And-Grammarly.md @@ -0,0 +1,18 @@ +--- +title: The blog is back and... Grammarly! +date: 2020-05-14 00:00:00 +description: 'The blog is back and we&pos;re trying Grammarly' +featured_image: '/images/hero-images/notebooks.jpg' +--- +It's been a while... Work got busy, life got busy, and I lost my enthusiasm for posting to this blog, all that's about to change! I'm restarting the blog and making it less SQL Server focussed and more generic to Software Development/Anything I find interesting at the time. I've also got a new theme, can't restart this thing without procrastinating for weeks about the look right? Let me know what you think. + +Anyway, as an incentive to start writing on, here again, I thought I'd give Grammarly a try, for anyone that's been here before you'll know my grammar is terrible my writing is awful and my poorly strung together sentences are shocking (But hey at least I try to get the technical posts accurate :) ). I've always previously just used the built-in spellchecker tools in Microsoft Word and thought I'd step up and give Grammarly a go. I'm writing and editing this blog post in the free version of Grammarly, and once it's done, I'll run it through the premium version and post that version below so you can all see the difference. I'm pretty sceptical that this can improve my writing but hey any help is help right? + +## Free Version +Having run this post through the free version of Grammarly my initial findings are it picked up all the same typos as Microsoft Word and suggested a lot of commas, Grammarly really likes commas! It also suggested removing some noise words that it deemed "Unnecessary" a few of these made sense but a couple more I prefered with the word left in. + +## Premium Version +Remember I mentioned the free version really liked commas? Well, premium takes that to a whole new level! Commas, as far as the eye can see! Surprisingly the premium version also picked out a couple of spelling mistakes that the free version didn't find, I'm not sure what's going on there as I thought both versions used the same spell checker. Both the free and premium tier give your writing a score and add comments on the clarity, engagement and delivery, and I found that the free version marked these down. When using the premium version, they all improved after I took a couple of its suggestions that made very little difference to the feel of the post, possibly a way to steer people towards the premium version with low value-add. With the premium version, I managed to get the "score" out of 100 of this post from 79 to 97, did that improve the post? Maybe a little, it certainly removed a couple of mistakes, but for the most part, I'm not convinced by the scoring of it all. + +## Final Thoughts +I'm unsure that premium for me at least justifies the hefty price tag: £23 per month if you pay monthly or £9 a month if you take the yearly plan. I'm sure there is more value here for someone who writes a lot more than I will be, but it still seems quite steep. The free version outperformed Microsoft Word in my tests, is free and runs in most places browser, mobile keyboards, desktop app. I'll most likely move back to the free tier next month unless I find some significant amount of value-added over my future few posts. \ No newline at end of file diff --git a/feed.xml b/feed.xml deleted file mode 100644 index 3c28277..0000000 --- a/feed.xml +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: none ---- - - - - {{ site.name | xml_escape }} - {{ site.description | xml_escape }} - {{ site.url }} - - {% for post in site.posts limit:100 %} - - {{ post.title | xml_escape }} - {{ post.content | xml_escape }} - {{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }} - {{ site.url }}/{{ post.url }} - {{ site.url }}/{{ post.url }} - - {% endfor %} - - \ No newline at end of file diff --git a/images/.DS_Store b/images/.DS_Store new file mode 100644 index 0000000..0bbf75f Binary files /dev/null and b/images/.DS_Store differ diff --git a/images/demo/.DS_Store b/images/demo/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/images/demo/.DS_Store differ diff --git a/images/demo/about.jpg b/images/demo/about.jpg new file mode 100644 index 0000000..87bf8e8 Binary files /dev/null and b/images/demo/about.jpg differ diff --git a/images/demo/blog.jpg b/images/demo/blog.jpg new file mode 100644 index 0000000..d4b93b5 Binary files /dev/null and b/images/demo/blog.jpg differ diff --git a/images/demo/contact.jpg b/images/demo/contact.jpg new file mode 100644 index 0000000..f899149 Binary files /dev/null and b/images/demo/contact.jpg differ diff --git a/images/demo/demo-landscape-2.jpg b/images/demo/demo-landscape-2.jpg new file mode 100644 index 0000000..8634647 Binary files /dev/null and b/images/demo/demo-landscape-2.jpg differ diff --git a/images/demo/demo-landscape.jpg b/images/demo/demo-landscape.jpg new file mode 100644 index 0000000..ebb7520 Binary files /dev/null and b/images/demo/demo-landscape.jpg differ diff --git a/images/demo/demo-portrait.jpg b/images/demo/demo-portrait.jpg new file mode 100644 index 0000000..a5deb9b Binary files /dev/null and b/images/demo/demo-portrait.jpg differ diff --git a/images/demo/demo-square.jpg b/images/demo/demo-square.jpg new file mode 100644 index 0000000..09ce81f Binary files /dev/null and b/images/demo/demo-square.jpg differ diff --git a/images/demo/home.jpg b/images/demo/home.jpg new file mode 100644 index 0000000..0f90803 Binary files /dev/null and b/images/demo/home.jpg differ diff --git a/favicon.ico b/images/favicon.ico similarity index 100% rename from favicon.ico rename to images/favicon.ico diff --git a/images/favicon.png b/images/favicon.png new file mode 100644 index 0000000..0e147c8 Binary files /dev/null and b/images/favicon.png differ diff --git a/images/hero-images/blocks.jpg b/images/hero-images/blocks.jpg new file mode 100644 index 0000000..1dd3d57 Binary files /dev/null and b/images/hero-images/blocks.jpg differ diff --git a/images/hero-images/clean-desk.jpg b/images/hero-images/clean-desk.jpg new file mode 100644 index 0000000..fb4a2a6 Binary files /dev/null and b/images/hero-images/clean-desk.jpg differ diff --git a/images/hero-images/crowds.jpg b/images/hero-images/crowds.jpg new file mode 100644 index 0000000..a0b3302 Binary files /dev/null and b/images/hero-images/crowds.jpg differ diff --git a/images/hero-images/dice.jpg b/images/hero-images/dice.jpg new file mode 100644 index 0000000..c788311 Binary files /dev/null and b/images/hero-images/dice.jpg differ diff --git a/images/hero-images/harddrive.jpg b/images/hero-images/harddrive.jpg new file mode 100644 index 0000000..020efbe Binary files /dev/null and b/images/hero-images/harddrive.jpg differ diff --git a/images/hero-images/mailbox.jpg b/images/hero-images/mailbox.jpg new file mode 100644 index 0000000..4858515 Binary files /dev/null and b/images/hero-images/mailbox.jpg differ diff --git a/images/hero-images/night-programming-outdoor.jpg b/images/hero-images/night-programming-outdoor.jpg new file mode 100644 index 0000000..a91a38a Binary files /dev/null and b/images/hero-images/night-programming-outdoor.jpg differ diff --git a/images/hero-images/notebooks.jpg b/images/hero-images/notebooks.jpg new file mode 100644 index 0000000..9857ac4 Binary files /dev/null and b/images/hero-images/notebooks.jpg differ diff --git a/images/hero-images/typewriter.jpg b/images/hero-images/typewriter.jpg new file mode 100644 index 0000000..4b59e2a Binary files /dev/null and b/images/hero-images/typewriter.jpg differ diff --git a/images/social.jpg b/images/social.jpg new file mode 100644 index 0000000..96cc7ec Binary files /dev/null and b/images/social.jpg differ diff --git a/index.html b/index.html index 1eb5d67..b6484bf 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,70 @@ --- -# You don't need to edit this file, it's empty on purpose. -# Edit theme's home layout instead if you wanna make some changes -# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults -layout: home +layout: default +title: Blog +description: Random posts about random things +featured_image: /images/demo/blog.jpg --- + +
+ +
+
+
+ +
+ +

Blog

+

Random posts about random things.

+ +
+ +
+ +
+ +
+ + {% for post in paginator.posts %} + +
+ +
+
+
+ +
+
+

{{ post.title }}

+

{{ post.subtitle }}

+

{{ post.description }}

+
+
+ +
+ + {% endfor %} + +
+ +
+ +{% if paginator.total_pages > 1 %} + +
+ +
+ + {% if paginator.previous_page %} + Newer Posts + {% endif %} + {% if paginator.next_page %} + Older Posts + + {% endif %} + +
+ +
+ +{% endif %} \ No newline at end of file diff --git a/js/.DS_Store b/js/.DS_Store new file mode 100644 index 0000000..3c44d33 Binary files /dev/null and b/js/.DS_Store differ diff --git a/js/personal-min.js b/js/personal-min.js new file mode 100644 index 0000000..18dcc46 --- /dev/null +++ b/js/personal-min.js @@ -0,0 +1,4 @@ +(function(t,e){"use strict";var i=t.History=t.History||{},n=t.jQuery;if(void 0!==i.Adapter)throw new Error("History.js Adapter has already been loaded...");i.Adapter={bind:function(t,e,i){n(t).bind(e,i)},trigger:function(t,e,i){n(t).trigger(e,i)},extractEventData:function(t,i,n){var s;return i&&i.originalEvent&&i.originalEvent[t]||n&&n[t]||e},onDomLoad:function(t){n(t)}},void 0!==i.init&&i.init()})(window),function(t,e){"use strict";var i=t.console||e,n=t.document,s=t.navigator,o=!1,r=t.setTimeout,a=t.clearTimeout,l=t.setInterval,h=t.clearInterval,u=t.JSON,c=t.alert,d=t.History=t.History||{},p=t.history;try{(o=t.sessionStorage).setItem("TEST","1"),o.removeItem("TEST")}catch(t){o=!1}if(u.stringify=u.stringify||u.encode,u.parse=u.parse||u.decode,void 0!==d.init)throw new Error("History.js Core has already been loaded...");d.init=function(t){return void 0!==d.Adapter&&(void 0!==d.initCore&&d.initCore(),void 0!==d.initHtml4&&d.initHtml4(),!0)},d.initCore=function(f){if(void 0!==d.initCore.initialized)return!1;if(d.initCore.initialized=!0,d.options=d.options||{},d.options.hashChangeInterval=d.options.hashChangeInterval||100,d.options.safariPollInterval=d.options.safariPollInterval||500,d.options.doubleCheckInterval=d.options.doubleCheckInterval||500,d.options.disableSuid=d.options.disableSuid||!1,d.options.storeInterval=d.options.storeInterval||1e3,d.options.busyDelay=d.options.busyDelay||250,d.options.debug=d.options.debug||!1,d.options.initialTitle=d.options.initialTitle||n.title,d.options.html4Mode=d.options.html4Mode||!1,d.options.delayInit=d.options.delayInit||!1,d.intervalList=[],d.clearAllIntervals=function(){var t,e=d.intervalList;if(null!=e){for(t=0;t4&&t}()},d.isInternetExplorer=function(){var t;return d.isInternetExplorer.cached=void 0!==d.isInternetExplorer.cached?d.isInternetExplorer.cached:Boolean(d.getInternetExplorerMajorVersion())},d.options.html4Mode?d.emulated={pushState:!0,hashChange:!0}:d.emulated={pushState:!Boolean(t.history&&t.history.pushState&&t.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(s.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(s.userAgent)),hashChange:Boolean(!("onhashchange"in t||"onhashchange"in n)||d.isInternetExplorer()&&d.getInternetExplorerMajorVersion()<8)},d.enabled=!d.emulated.pushState,d.bugs={setHash:Boolean(!d.emulated.pushState&&"Apple Computer, Inc."===s.vendor&&/AppleWebKit\/5([0-2]|3[0-3])/.test(s.userAgent)),safariPoll:Boolean(!d.emulated.pushState&&"Apple Computer, Inc."===s.vendor&&/AppleWebKit\/5([0-2]|3[0-3])/.test(s.userAgent)),ieDoubleCheck:Boolean(d.isInternetExplorer()&&d.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(d.isInternetExplorer()&&d.getInternetExplorerMajorVersion()<7)},d.isEmptyObject=function(t){for(var e in t)if(t.hasOwnProperty(e))return!1;return!0},d.cloneObject=function(t){var e,i;return t?(e=u.stringify(t),i=u.parse(e)):i={},i},d.getRootUrl=function(){var t=n.location.protocol+"//"+(n.location.hostname||n.location.host);return n.location.port&&(t+=":"+n.location.port),t+="/"},d.getBaseHref=function(){var t=n.getElementsByTagName("base"),e=null,i="";return 1===t.length&&(i=(e=t[0]).href.replace(/[^\/]+$/,"")),(i=i.replace(/\/+$/,""))&&(i+="/"),i},d.getBaseUrl=function(){var t;return d.getBaseHref()||d.getBasePageUrl()||d.getRootUrl()},d.getPageUrl=function(){var t,e,i;return i=((d.getState(!1,!1)||{}).url||d.getLocationHref()).replace(/\/+$/,"").replace(/[^\/]+$/,function(t,e,i){return/\./.test(t)?t:t+"/"})},d.getBasePageUrl=function(){var t;return d.getLocationHref().replace(/[#\?].*/,"").replace(/[^\/]+$/,function(t,e,i){return/[^\/]$/.test(t)?"":t}).replace(/\/+$/,"")+"/"},d.getFullUrl=function(t,e){var i=t,n=t.substring(0,1);return e=void 0===e||e,/[a-z]+\:\/\//.test(t)||(i="/"===n?d.getRootUrl()+t.replace(/^\/+/,""):"#"===n?d.getPageUrl().replace(/#.*/,"")+t:"?"===n?d.getPageUrl().replace(/[\?#].*/,"")+t:e?d.getBaseUrl()+t.replace(/^(\.\/)+/,""):d.getBasePageUrl()+t.replace(/^(\.\/)+/,"")),i.replace(/\#$/,"")},d.getShortUrl=function(t){var e=t,i=d.getBaseUrl(),n=d.getRootUrl();return d.emulated.pushState&&(e=e.replace(i,"")),e=e.replace(n,"/"),d.isTraditionalAnchor(e)&&(e="./"+e),e=e.replace(/^(\.\/)+/g,"./").replace(/\#$/,"")},d.getLocationHref=function(t){return(t=t||n).URL===t.location.href?t.location.href:t.location.href===decodeURIComponent(t.URL)?t.URL:t.location.hash&&decodeURIComponent(t.location.href.replace(/^[^#]+/,""))===t.location.hash?t.location.href:-1==t.URL.indexOf("#")&&-1!=t.location.href.indexOf("#")?t.location.href:t.URL||t.location.href},d.store={},d.idToState=d.idToState||{},d.stateToId=d.stateToId||{},d.urlToId=d.urlToId||{},d.storedStates=d.storedStates||[],d.savedStates=d.savedStates||[],d.normalizeStore=function(){d.store.idToState=d.store.idToState||{},d.store.urlToId=d.store.urlToId||{},d.store.stateToId=d.store.stateToId||{}},d.getState=function(t,e){void 0===t&&(t=!0),void 0===e&&(e=!0);var i=d.getLastSavedState();return!i&&e&&(i=d.createStateObject()),t&&((i=d.cloneObject(i)).url=i.cleanUrl||i.url),i},d.getIdByState=function(t){var e=d.extractId(t.url),i;if(!e)if(i=d.getStateString(t),void 0!==d.stateToId[i])e=d.stateToId[i];else if(void 0!==d.store.stateToId[i])e=d.store.stateToId[i];else{for(;e=(new Date).getTime()+String(Math.random()).replace(/\D/g,""),void 0!==d.idToState[e]||void 0!==d.store.idToState[e];);d.stateToId[i]=e,d.idToState[e]=t}return e},d.normalizeState=function(t){var e,i;return t&&"object"==typeof t||(t={}),void 0!==t.normalized?t:(t.data&&"object"==typeof t.data||(t.data={}),(e={}).normalized=!0,e.title=t.title||"",e.url=d.getFullUrl(t.url?t.url:d.getLocationHref()),e.hash=d.getShortUrl(e.url),e.data=d.cloneObject(t.data),e.id=d.getIdByState(e),e.cleanUrl=e.url.replace(/\??\&_suid.*/,""),e.url=e.cleanUrl,i=!d.isEmptyObject(e.data),(e.title||i)&&!0!==d.options.disableSuid&&(e.hash=d.getShortUrl(e.url).replace(/\??\&_suid.*/,""),/\?/.test(e.hash)||(e.hash+="?"),e.hash+="&_suid="+e.id),e.hashedUrl=d.getFullUrl(e.hash),(d.emulated.pushState||d.bugs.safariPoll)&&d.hasUrlDuplicate(e)&&(e.url=e.hashedUrl),e)},d.createStateObject=function(t,e,i){var n={data:t,title:e,url:i};return n=d.normalizeState(n)},d.getStateById=function(t){var i;return t=String(t),d.idToState[t]||d.store.idToState[t]||e},d.getStateString=function(t){var e,i,n;return i={data:(e=d.normalizeState(t)).data,title:t.title,url:t.url},n=u.stringify(i)},d.getStateId=function(t){var e,i;return i=(e=d.normalizeState(t)).id},d.getHashByState=function(t){var e,i;return i=(e=d.normalizeState(t)).hash},d.extractId=function(t){var e,i,n,s;return s=-1!=t.indexOf("#")?t.split("#")[0]:t,n=(i=/(.*)\&_suid=([0-9]+)$/.exec(s))&&i[1]||t,(e=i?String(i[2]||""):"")||!1},d.isTraditionalAnchor=function(t){var e;return!/[\/\?\.]/.test(t)},d.extractState=function(t,e){var i=null,n,s;return e=e||!1,(n=d.extractId(t))&&(i=d.getStateById(n)),i||(s=d.getFullUrl(t),(n=d.getIdByUrl(s)||!1)&&(i=d.getStateById(n)),!i&&e&&!d.isTraditionalAnchor(t)&&(i=d.createStateObject(null,null,s))),i},d.getIdByUrl=function(t){var i;return d.urlToId[t]||d.store.urlToId[t]||e},d.getLastSavedState=function(){return d.savedStates[d.savedStates.length-1]||e},d.getLastStoredState=function(){return d.storedStates[d.storedStates.length-1]||e},d.hasUrlDuplicate=function(t){var e=!1,i;return e=(i=d.extractState(t.url))&&i.id!==t.id},d.storeState=function(t){return d.urlToId[t.url]=t.id,d.storedStates.push(d.cloneObject(t)),t},d.isLastSavedState=function(t){var e=!1,i,n,s;return d.savedStates.length&&(e=(i=t.id)===(s=(n=d.getLastSavedState()).id)),e},d.saveState=function(t){return!d.isLastSavedState(t)&&(d.savedStates.push(d.cloneObject(t)),!0)},d.getStateByIndex=function(t){var e=null;return e=void 0===t?d.savedStates[d.savedStates.length-1]:t<0?d.savedStates[d.savedStates.length+t]:d.savedStates[t]},d.getCurrentIndex=function(){var t=null;return t=d.savedStates.length<1?0:d.savedStates.length-1},d.getHash=function(t){var e=d.getLocationHref(t),i;return i=d.getHashByUrl(e)},d.unescapeHash=function(t){var e=d.normalizeHash(t);return e=decodeURIComponent(e)},d.normalizeHash=function(t){var e;return t.replace(/[^#]*#/,"").replace(/#.*/,"")},d.setHash=function(t,e){var i,s;return!1!==e&&d.busy()?(d.pushQueue({scope:d,callback:d.setHash,args:arguments,queue:e}),!1):(d.busy(!0),(i=d.extractState(t,!0))&&!d.emulated.pushState?d.pushState(i.data,i.title,i.url,!1):d.getHash()!==t&&(d.bugs.setHash?(s=d.getPageUrl(),d.pushState(null,null,s+"#"+t,!1)):n.location.hash=t),d)},d.escapeHash=function(e){var i=d.normalizeHash(e);return i=t.encodeURIComponent(i),d.bugs.hashEscape||(i=i.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),i},d.getHashByUrl=function(t){var e=String(t).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return e=d.unescapeHash(e)},d.setTitle=function(t){var e=t.title,i;e||(i=d.getStateByIndex(0))&&i.url===t.url&&(e=i.title||d.options.initialTitle);try{n.getElementsByTagName("title")[0].innerHTML=e.replace("<","<").replace(">",">").replace(" & "," & ")}catch(t){}return n.title=e,d},d.queues=[],d.busy=function(t){if(void 0!==t?d.busy.flag=t:void 0===d.busy.flag&&(d.busy.flag=!1),!d.busy.flag){a(d.busy.timeout);var e=function(){var t,i,n;if(!d.busy.flag)for(t=d.queues.length-1;t>=0;--t)0!==(i=d.queues[t]).length&&(n=i.shift(),d.fireQueueItem(n),d.busy.timeout=r(e,d.options.busyDelay))};d.busy.timeout=r(e,d.options.busyDelay)}return d.busy.flag},d.busy.flag=!1,d.fireQueueItem=function(t){return t.callback.apply(t.scope||d,t.args||[])},d.pushQueue=function(t){return d.queues[t.queue||0]=d.queues[t.queue||0]||[],d.queues[t.queue||0].push(t),d},d.queue=function(t,e){return"function"==typeof t&&(t={callback:t}),void 0!==e&&(t.queue=e),d.busy()?d.pushQueue(t):d.fireQueueItem(t),d},d.clearQueue=function(){return d.busy.flag=!1,d.queues=[],d},d.stateChanged=!1,d.doubleChecker=!1,d.doubleCheckComplete=function(){return d.stateChanged=!0,d.doubleCheckClear(),d},d.doubleCheckClear=function(){return d.doubleChecker&&(a(d.doubleChecker),d.doubleChecker=!1),d},d.doubleCheck=function(t){return d.stateChanged=!1,d.doubleCheckClear(),d.bugs.ieDoubleCheck&&(d.doubleChecker=r(function(){return d.doubleCheckClear(),d.stateChanged||t(),!0},d.options.doubleCheckInterval)),d},d.safariStatePoll=function(){var e=d.extractState(d.getLocationHref()),i;if(!d.isLastSavedState(e))return(i=e)||(i=d.createStateObject()),d.Adapter.trigger(t,"popstate"),d},d.back=function(t){return!1!==t&&d.busy()?(d.pushQueue({scope:d,callback:d.back,args:arguments,queue:t}),!1):(d.busy(!0),d.doubleCheck(function(){d.back(!1)}),p.go(-1),!0)},d.forward=function(t){return!1!==t&&d.busy()?(d.pushQueue({scope:d,callback:d.forward,args:arguments,queue:t}),!1):(d.busy(!0),d.doubleCheck(function(){d.forward(!1)}),p.go(1),!0)},d.go=function(t,e){var i;if(t>0)for(i=1;i<=t;++i)d.forward(e);else{if(!(t<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(i=-1;i>=t;--i)d.back(e)}return d},d.emulated.pushState){var g=function(){};d.pushState=d.pushState||g,d.replaceState=d.replaceState||g}else d.onPopState=function(e,i){var n=!1,s=!1,o,r;return d.doubleCheckComplete(),(o=d.getHash())?((r=d.extractState(o||d.getLocationHref(),!0))?d.replaceState(r.data,r.title,r.url,!1):(d.Adapter.trigger(t,"anchorchange"),d.busy(!1)),d.expectedStateId=!1,!1):((s=(n=d.Adapter.extractEventData("state",e,i)||!1)?d.getStateById(n):d.expectedStateId?d.getStateById(d.expectedStateId):d.extractState(d.getLocationHref()))||(s=d.createStateObject(null,null,d.getLocationHref())),d.expectedStateId=!1,d.isLastSavedState(s)?(d.busy(!1),!1):(d.storeState(s),d.saveState(s),d.setTitle(s),d.Adapter.trigger(t,"statechange"),d.busy(!1),!0))},d.Adapter.bind(t,"popstate",d.onPopState),d.pushState=function(e,i,n,s){if(d.getHashByUrl(n)&&d.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(!1!==s&&d.busy())return d.pushQueue({scope:d,callback:d.pushState,args:arguments,queue:s}),!1;d.busy(!0);var o=d.createStateObject(e,i,n);return d.isLastSavedState(o)?d.busy(!1):(d.storeState(o),d.expectedStateId=o.id,p.pushState(o.id,o.title,o.url),d.Adapter.trigger(t,"popstate")),!0},d.replaceState=function(e,i,n,s){if(d.getHashByUrl(n)&&d.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(!1!==s&&d.busy())return d.pushQueue({scope:d,callback:d.replaceState,args:arguments,queue:s}),!1;d.busy(!0);var o=d.createStateObject(e,i,n);return d.isLastSavedState(o)?d.busy(!1):(d.storeState(o),d.expectedStateId=o.id,p.replaceState(o.id,o.title,o.url),d.Adapter.trigger(t,"popstate")),!0};if(o){try{d.store=u.parse(o.getItem("History.store"))||{}}catch(t){d.store={}}d.normalizeStore()}else d.store={},d.normalizeStore();d.Adapter.bind(t,"unload",d.clearAllIntervals),d.saveState(d.storeState(d.extractState(d.getLocationHref(),!0))),o&&(d.onUnload=function(){var t,e,i;try{t=u.parse(o.getItem("History.store"))||{}}catch(e){t={}}for(e in t.idToState=t.idToState||{},t.urlToId=t.urlToId||{},t.stateToId=t.stateToId||{},d.idToState)d.idToState.hasOwnProperty(e)&&(t.idToState[e]=d.idToState[e]);for(e in d.urlToId)d.urlToId.hasOwnProperty(e)&&(t.urlToId[e]=d.urlToId[e]);for(e in d.stateToId)d.stateToId.hasOwnProperty(e)&&(t.stateToId[e]=d.stateToId[e]);d.store=t,d.normalizeStore(),i=u.stringify(t);try{o.setItem("History.store",i)}catch(t){if(t.code!==DOMException.QUOTA_EXCEEDED_ERR)throw t;o.length&&(o.removeItem("History.store"),o.setItem("History.store",i))}},d.intervalList.push(l(d.onUnload,d.options.storeInterval)),d.Adapter.bind(t,"beforeunload",d.onUnload),d.Adapter.bind(t,"unload",d.onUnload)),d.emulated.pushState||(d.bugs.safariPoll&&d.intervalList.push(l(d.safariStatePoll,d.options.safariPollInterval)),"Apple Computer, Inc."!==s.vendor&&"Mozilla"!==(s.appCodeName||"")||(d.Adapter.bind(t,"hashchange",function(){d.Adapter.trigger(t,"popstate")}),d.getHash()&&d.Adapter.onDomLoad(function(){d.Adapter.trigger(t,"hashchange")})))},(!d.options||!d.options.delayInit)&&d.init()}(window),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n;return(i[t]=i[t]||{})[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=0,s=i[n];e=e||[];for(var o=this._onceEvents&&this._onceEvents[t];s;){var r=o&&o[s];r&&(this.off(t,s),delete o[s]),s.apply(this,e),s=i[n+=r?0:1]}return this}},e.allOff=e.removeAllListeners=function(){delete this._events,delete this._onceEvents},t}),function(t,e){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,function(t,e){function i(t,e){for(var i in e)t[i]=e[i];return t}function n(t){var e=[];if(Array.isArray(t))e=t;else if("number"==typeof t.length)for(var i=0;ie;e++){var i;t[l[e]]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function s(){if(!u){u=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var s=n(e);o.isBoxSizeOuter=r=200==t(s.width),i.removeChild(e)}}function o(e){if(s(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var o=n(e);if("none"==o.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var u=a.isBorderBox="border-box"==o.boxSizing,c=0;h>c;c++){var d=l[c],p=o[d],f=parseFloat(p);a[d]=isNaN(f)?0:f}var g=a.paddingLeft+a.paddingRight,m=a.paddingTop+a.paddingBottom,v=a.marginLeft+a.marginRight,y=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,w=a.borderTopWidth+a.borderBottomWidth,x=u&&r,b=t(o.width);!1!==b&&(a.width=b+(x?0:g+_));var C=t(o.height);return!1!==C&&(a.height=C+(x?0:m+w)),a.innerWidth=a.width-(g+_),a.innerHeight=a.height-(m+w),a.outerWidth=a.width+v,a.outerHeight=a.height+y,a}}var r,a="undefined"==typeof console?e:function(t){console.error(t)},l=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],h=l.length,u=!1;return o}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;ir?"round":"floor"](o),this.cols=Math.max(o,1)},n.getContainerWidth=function(){var t,i=this._getOption("fitWidth")?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i,n=Math[e&&1>e?"round":"ceil"](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var s,o=this[this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition"](n,t),r={x:this.columnWidth*o.col,y:o.y},a=o.y+t.size.outerHeight,l=n+o.col,h=o.col;l>h;h++)this.colYs[h]=a;return r},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n;i=t>1&&i+t>this.cols?0:i;var s=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=s?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),s,o=this._getOption("originLeft")?n.left:n.right,r=o+i.outerWidth,a=Math.floor(o/this.columnWidth);a=Math.max(0,a);var l=Math.floor(r/this.columnWidth);l-=r%this.columnWidth?0:1,l=Math.min(this.cols-1,l);for(var h,u=(this._getOption("originTop")?n.top:n.bottom)+i.outerHeight,c=a;l>=c;c++)this.colYs[c]=Math.max(u,this.colYs[c])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}),function(t,e){var i=t.jQuery||t.Cowboy||(t.Cowboy={}),n;i.throttle=n=function(t,n,s,o){function r(){function i(){l=+new Date,s.apply(h,c)}function r(){a=e}var h=this,u=+new Date-l,c=arguments;o&&!a&&i(),a&&clearTimeout(a),o===e&&u>t?i():!0!==n&&(a=setTimeout(o?r:i,o===e?t-u:t))}var a,l=0;return"boolean"!=typeof n&&(o=s,s=n,n=e),i.guid&&(r.guid=s.guid=s.guid||i.guid++),r},i.debounce=function(t,i,s){return s===e?n(t,i,!1):n(t,s,!1!==i)}}(this),function(t,e,i,n){"use strict";function s(e,i){this.element=e;var n={};t.each(t(this.element).data(),function(t,e){var i,s=function(t){return t&&t[0].toLowerCase()+t.slice(1)}(t.replace("fluidbox",""));(""!==s||null!==s)&&("false"==e?e=!1:"true"==e&&(e=!0),n[s]=e)}),this.settings=t.extend({},a,i,n),this.settings.viewportFill=Math.max(Math.min(parseFloat(this.settings.viewportFill),1),0),this.settings.stackIndex",{class:"fluidbox__wrap",css:{zIndex:this.settings.stackIndex-this.settings.stackIndexDelta}});if(t(this.element).addClass("fluidbox--closed").wrapInner(e).find("img").first().css({opacity:1}).addClass("fluidbox__thumb").after('
'),this.settings.loader){var i=t("
",{class:"fluidbox__loader",css:{zIndex:2}});t(this.element).find(".fluidbox__wrap").append(i)}},prepareFb:function(){var e=this,i=t(this.element);i.trigger("thumbloaddone.fluidbox"),d.measure.fbElements.call(this),e.bindEvents(),i.addClass("fluidbox--ready"),e.bindListeners(),i.trigger("ready.fluidbox")},measure:{viewport:function(){l.viewport={w:o.width(),h:o.height()}},fbElements:function(){var e=this,i=t(this.element),n=i.find("img").first(),s=i.find(".fluidbox__ghost"),o=i.find(".fluidbox__wrap");e.instanceData.thumb={natW:n[0].naturalWidth,natH:n[0].naturalHeight,w:n.width(),h:n.height()},s.css({width:n.width(),height:n.height(),top:n.offset().top-o.offset().top+parseInt(n.css("borderTopWidth"))+parseInt(n.css("paddingTop")),left:n.offset().left-o.offset().left+parseInt(n.css("borderLeftWidth"))+parseInt(n.css("paddingLeft"))})}},checkURL:function(t){var e=0;return/[\s+]/g.test(t)?(console.warn("Fluidbox: Fluidbox opening is halted because it has detected characters in your URL string that need to be properly encoded/escaped. Whitespace(s) have to be escaped manually. See RFC3986 documentation."),e=1):/[\"\'\(\)]/g.test(t)&&(console.warn("Fluidbox: Fluidbox opening will proceed, but it has detected characters in your URL string that need to be properly encoded/escaped. These will be escaped for you. See RFC3986 documentation."),e=0),e},formatURL:function(t){return t.replace(/"/g,"%22").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29")}};t.extend(s.prototype,{init:function(){var e=this,i=t(this.element),n=i.find("img").first();if(d.measure.viewport(),(!e.instanceData||!e.instanceData.initialized)&&i.is("a")&&1===i.children().length&&(i.children().is("img")||i.children().is("picture")&&1===i.find("img").length)&&"none"!==i.css("display")&&"none"!==i.children().css("display")&&"none"!==i.parents().css("display")){i.removeClass("fluidbox--destroyed"),e.instanceData={},e.instanceData.initialized=!0,e.instanceData.originalNode=i.html(),h+=1,e.instanceData.id=h,i.addClass("fluidbox__instance-"+h),i.addClass("fluidbox--initialized"),d.dom.call(e),i.trigger("init.fluidbox");var s=new Image;n.width()>0&&n.height()>0?d.prepareFb.call(e):(s.onload=function(){d.prepareFb.call(e)},s.onerror=function(){i.trigger("thumbloadfail.fluidbox")},s.src=n.attr("src"))}},open:function(){var e=this,i=t(this.element),n=i.find("img").first(),s=i.find(".fluidbox__ghost"),o=i.find(".fluidbox__wrap");e.instanceData.state=1,s.off(c),t(".fluidbox--opened").fluidbox("close");var r=t("
",{class:"fluidbox__overlay",css:{zIndex:-1}}),a;if(o.append(r),i.removeClass("fluidbox--closed").addClass("fluidbox--loading"),d.checkURL(n.attr("src")))return e.close(),!1;s.css({"background-image":"url("+d.formatURL(n.attr("src"))+")",opacity:1}),d.measure.fbElements.call(e),e.settings.immediateOpen?(i.addClass("fluidbox--opened fluidbox--loaded").find(".fluidbox__wrap").css({zIndex:e.settings.stackIndex+e.settings.stackIndexDelta}),i.trigger("openstart.fluidbox"),e.compute(),n.css({opacity:0}),t(".fluidbox__overlay").css({opacity:1}),s.one(c,function(){i.trigger("openend.fluidbox")}),(a=new Image).onload=function(){if(i.trigger("imageloaddone.fluidbox"),1===e.instanceData.state){if(e.instanceData.thumb.natW=a.naturalWidth,e.instanceData.thumb.natH=a.naturalHeight,i.removeClass("fluidbox--loading"),d.checkURL(a.src))return e.close({error:!0}),!1;s.css({"background-image":"url("+d.formatURL(a.src)+")"}),e.compute()}},a.onerror=function(){e.close({error:!0}),i.trigger("imageloadfail.fluidbox"),i.trigger("delayedloadfail.fluidbox")},a.src=i.attr("href")):((a=new Image).onload=function(){return i.trigger("imageloaddone.fluidbox"),i.removeClass("fluidbox--loading").addClass("fluidbox--opened fluidbox--loaded").find(".fluidbox__wrap").css({zIndex:e.settings.stackIndex+e.settings.stackIndexDelta}),i.trigger("openstart.fluidbox"),d.checkURL(a.src)?(e.close({error:!0}),!1):(s.css({"background-image":"url("+d.formatURL(a.src)+")"}),e.instanceData.thumb.natW=a.naturalWidth,e.instanceData.thumb.natH=a.naturalHeight,e.compute(),n.css({opacity:0}),t(".fluidbox__overlay").css({opacity:1}),void s.one(c,function(){i.trigger("openend.fluidbox")}))},a.onerror=function(){e.close({error:!0}),i.trigger("imageloadfail.fluidbox")},a.src=i.attr("href"))},compute:function(){var e=this,i=t(this.element),n=i.find("img").first(),s=i.find(".fluidbox__ghost"),r=i.find(".fluidbox__wrap"),a=e.instanceData.thumb.natW,h=e.instanceData.thumb.natH,u=e.instanceData.thumb.w,c=e.instanceData.thumb.h,d=a/h,p=l.viewport.w/l.viewport.h,f,g,m,v,y;e.settings.maxWidth>0?h=(a=e.settings.maxWidth)/d:e.settings.maxHeight>0&&(a=(h=e.settings.maxHeight)*d),p>d?(v=a*(c*(m=(f=h1||t.items.merge,o[n]=s?e*i:this._items[n].width();this._widths=o}},{filter:["items","settings"],run:function(){var e=[],i=this._items,n=this.settings,s=Math.max(2*n.items,4),o=2*Math.ceil(i.length/2),r=n.loop&&i.length?n.rewind?s:Math.max(s,o):0,a="",l="";for(r/=2;r>0;)e.push(this.normalize(e.length/2,!0)),a+=i[e[e.length-1]][0].outerHTML,e.push(this.normalize(i.length-1-(e.length-1)/2,!0)),l=i[e[e.length-1]][0].outerHTML+l,r-=1;this._clones=e,t(a).addClass("cloned").appendTo(this.$stage),t(l).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var t=this.settings.rtl?1:-1,e=this._clones.length+this._items.length,i=-1,n=0,s=0,o=[];++i",a)||this.op(e,"<",r)&&this.op(e,">",a))&&l.push(i);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+l.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],s.prototype.initialize=function(){var e,i,s;(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading"))&&(e=this.$element.find("img"),i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:n,s=this.$element.children(i).width(),e.length&&s<=0&&this.preloadAutoWidthImages(e));this.$element.addClass(this.options.loadingClass),this.$stage=t("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},s.prototype.setup=function(){var e=this.viewport(),i=this.options.responsive,n=-1,s=null;i?(t.each(i,function(t){t<=e&&t>n&&(n=Number(t))}),"function"==typeof(s=t.extend({},this.options,i[n])).stagePadding&&(s.stagePadding=s.stagePadding()),delete s.responsive,s.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+n))):s=t.extend({},this.options),this.trigger("change",{property:{name:"settings",value:s}}),this._breakpoint=n,this.settings=s,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},s.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},s.prototype.prepare=function(e){var i=this.trigger("prepare",{content:e});return i.data||(i.data=t("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(e)),this.trigger("prepared",{content:i.data}),i.data},s.prototype.update=function(){for(var e=0,i=this._pipe.length,n=t.proxy(function(t){return this[t]},this._invalidated),s={};e0)&&this._pipe[e].run(s),e++;this._invalidated={},!this.is("valid")&&this.enter("valid")},s.prototype.width=function(t){switch(t=t||s.Width.Default){case s.Width.Inner:case s.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},s.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},s.prototype.onThrottledResize=function(){e.clearTimeout(this.resizeTimer),this.resizeTimer=e.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},s.prototype.onResize=function(){return!!this._items.length&&this._width!==this.$element.width()&&!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))},s.prototype.registerEventHandlers=function(){t.support.transition&&this.$stage.on(t.support.transition.end+".owl.core",t.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(e,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",t.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",t.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",t.proxy(this.onDragEnd,this)))},s.prototype.onDragStart=function(e){var n=null;3!==e.which&&(t.support.transform?n={x:(n=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","))[16===n.length?12:4],y:n[16===n.length?13:5]}:(n=this.$stage.position(),n={x:this.settings.rtl?n.left+this.$stage.width()-this.width()+this.settings.margin:n.left,y:n.top}),this.is("animating")&&(t.support.transform?this.animate(n.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===e.type),this.speed(0),this._drag.time=(new Date).getTime(), +this._drag.target=t(e.target),this._drag.stage.start=n,this._drag.stage.current=n,this._drag.pointer=this.pointer(e),t(i).on("mouseup.owl.core touchend.owl.core",t.proxy(this.onDragEnd,this)),t(i).one("mousemove.owl.core touchmove.owl.core",t.proxy(function(e){var n=this.difference(this._drag.pointer,this.pointer(e));t(i).on("mousemove.owl.core touchmove.owl.core",t.proxy(this.onDragMove,this)),Math.abs(n.x)0^this.settings.rtl?"left":"right";t(i).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==n.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(s.x,0!==n.x?o:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=o,(Math.abs(n.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},s.prototype.closest=function(e,i){var n=-1,s=30,o=this.width(),r=this.coordinates();return this.settings.freeDrag||t.each(r,t.proxy(function(t,a){return"left"===i&&e>a-s&&ea-o-s&&e",r[t+1]||a-o)&&(n="left"===i?t+1:t),-1===n},this)),this.settings.loop||(this.op(e,">",r[this.minimum()])?n=e=this.minimum():this.op(e,"<",r[this.maximum()])&&(n=e=this.maximum())),n},s.prototype.animate=function(e){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),i&&(this.enter("animating"),this.trigger("translate")),t.support.transform3d&&t.support.transition?this.$stage.css({transform:"translate3d("+e+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:e+"px"},this.speed(),this.settings.fallbackEasing,t.proxy(this.onTransitionEnd,this)):this.$stage.css({left:e+"px"})},s.prototype.is=function(t){return this._states.current[t]&&this._states.current[t]>0},s.prototype.current=function(t){if(t===n)return this._current;if(0===this._items.length)return n;if(t=this.normalize(t),this._current!==t){var e=this.trigger("change",{property:{name:"position",value:t}});e.data!==n&&(t=this.normalize(e.data)),this._current=t,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},s.prototype.invalidate=function(e){return"string"===t.type(e)&&(this._invalidated[e]=!0,this.is("valid")&&this.leave("valid")),t.map(this._invalidated,function(t,e){return e})},s.prototype.reset=function(t){(t=this.normalize(t))!==n&&(this._speed=0,this._current=t,this.suppress(["translate","translated"]),this.animate(this.coordinates(t)),this.release(["translate","translated"]))},s.prototype.normalize=function(t,e){var i=this._items.length,s=e?0:this._clones.length;return!this.isNumeric(t)||i<1?t=n:(t<0||t>=i+s)&&(t=((t-s/2)%i+i)%i+s/2),t},s.prototype.relative=function(t){return t-=this._clones.length/2,this.normalize(t,!0)},s.prototype.maximum=function(t){var e,i,n,s=this.settings,o=this._coordinates.length;if(s.loop)o=this._clones.length/2+this._items.length-1;else if(s.autoWidth||s.merge){if(e=this._items.length)for(i=this._items[--e].width(),n=this.$element.width();e--&&!((i+=this._items[e].width()+this.settings.margin)>n););o=e+1}else o=s.center?this._items.length-1:this._items.length-s.items;return t&&(o-=this._clones.length/2),Math.max(o,0)},s.prototype.minimum=function(t){return t?0:this._clones.length/2},s.prototype.items=function(t){return t===n?this._items.slice():(t=this.normalize(t,!0),this._items[t])},s.prototype.mergers=function(t){return t===n?this._mergers.slice():(t=this.normalize(t,!0),this._mergers[t])},s.prototype.clones=function(e){var i=this._clones.length/2,s=i+this._items.length,o=function(t){return t%2==0?s+t/2:i-(t+1)/2};return e===n?t.map(this._clones,function(t,e){return o(e)}):t.map(this._clones,function(t,i){return t===e?o(i):null})},s.prototype.speed=function(t){return t!==n&&(this._speed=t),this._speed},s.prototype.coordinates=function(e){var i,s=1,o=e-1;return e===n?t.map(this._coordinates,t.proxy(function(t,e){return this.coordinates(e)},this)):(this.settings.center?(this.settings.rtl&&(s=-1,o=e+1),i=this._coordinates[e],i+=(this.width()-i+(this._coordinates[o]||0))/2*s):i=this._coordinates[o]||0,i=Math.ceil(i))},s.prototype.duration=function(t,e,i){return 0===i?0:Math.min(Math.max(Math.abs(e-t),1),6)*Math.abs(i||this.settings.smartSpeed)},s.prototype.to=function(t,e){var i=this.current(),n=null,s=t-this.relative(i),o=(s>0)-(s<0),r=this._items.length,a=this.minimum(),l=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(s)>r/2&&(s+=-1*o*r),(n=(((t=i+s)-a)%r+r)%r+a)!==t&&n-s<=l&&n-s>0&&(i=n-s,t=n,this.reset(i))):this.settings.rewind?t=(t%(l+=1)+l)%l:t=Math.max(a,Math.min(l,t)),this.speed(this.duration(i,t,e)),this.current(t),this.$element.is(":visible")&&this.update()},s.prototype.next=function(t){t=t||!1,this.to(this.relative(this.current())+1,t)},s.prototype.prev=function(t){t=t||!1,this.to(this.relative(this.current())-1,t)},s.prototype.onTransitionEnd=function(t){if(t!==n&&(t.stopPropagation(),(t.target||t.srcElement||t.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},s.prototype.viewport=function(){var n;return this.options.responsiveBaseElement!==e?n=t(this.options.responsiveBaseElement).width():e.innerWidth?n=e.innerWidth:i.documentElement&&i.documentElement.clientWidth?n=i.documentElement.clientWidth:console.warn("Can not detect viewport width."),n},s.prototype.replace=function(e){this.$stage.empty(),this._items=[],e&&(e=e instanceof jQuery?e:t(e)),this.settings.nestedItemSelector&&(e=e.find("."+this.settings.nestedItemSelector)),e.filter(function(){return 1===this.nodeType}).each(t.proxy(function(t,e){e=this.prepare(e),this.$stage.append(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},s.prototype.add=function(e,i){var s=this.relative(this._current);i=i===n?this._items.length:this.normalize(i,!0),e=e instanceof jQuery?e:t(e),this.trigger("add",{content:e,position:i}),e=this.prepare(e),0===this._items.length||i===this._items.length?(0===this._items.length&&this.$stage.append(e),0!==this._items.length&&this._items[i-1].after(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[i].before(e),this._items.splice(i,0,e),this._mergers.splice(i,0,1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[s]&&this.reset(this._items[s].index()),this.invalidate("items"),this.trigger("added",{content:e,position:i})},s.prototype.remove=function(t){(t=this.normalize(t,!0))!==n&&(this.trigger("remove",{content:this._items[t],position:t}),this._items[t].remove(),this._items.splice(t,1),this._mergers.splice(t,1),this.invalidate("items"),this.trigger("removed",{content:null,position:t}))},s.prototype.preloadAutoWidthImages=function(e){e.each(t.proxy(function(e,i){this.enter("pre-loading"),i=t(i),t(new Image).one("load",t.proxy(function(t){i.attr("src",t.target.src),i.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))},this))},s.prototype.destroy=function(){for(var n in this.$element.off(".owl.core"),this.$stage.off(".owl.core"),t(i).off(".owl.core"),!1!==this.settings.responsive&&(e.clearTimeout(this.resizeTimer),this.off(e,"resize",this._handlers.onThrottledResize)),this._plugins)this._plugins[n].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},s.prototype.op=function(t,e,i){var n=this.settings.rtl;switch(e){case"<":return n?t>i:t":return n?ti;case">=":return n?t<=i:t>=i;case"<=":return n?t>=i:t<=i}},s.prototype.on=function(t,e,i,n){t.addEventListener?t.addEventListener(e,i,n):t.attachEvent&&t.attachEvent("on"+e,i)},s.prototype.off=function(t,e,i,n){t.removeEventListener?t.removeEventListener(e,i,n):t.detachEvent&&t.detachEvent("on"+e,i)},s.prototype.trigger=function(e,i,n,o,r){var a={item:{count:this._items.length,index:this.current()}},l=t.camelCase(t.grep(["on",e,n],function(t){return t}).join("-").toLowerCase()),h=t.Event([e,"owl",n||"carousel"].join(".").toLowerCase(),t.extend({relatedTarget:this},a,i));return this._supress[e]||(t.each(this._plugins,function(t,e){e.onTrigger&&e.onTrigger(h)}),this.register({type:s.Type.Event,name:e}),this.$element.trigger(h),this.settings&&"function"==typeof this.settings[l]&&this.settings[l].call(this,h)),h},s.prototype.enter=function(e){t.each([e].concat(this._states.tags[e]||[]),t.proxy(function(t,e){this._states.current[e]===n&&(this._states.current[e]=0),this._states.current[e]++},this))},s.prototype.leave=function(e){t.each([e].concat(this._states.tags[e]||[]),t.proxy(function(t,e){this._states.current[e]--},this))},s.prototype.register=function(e){if(e.type===s.Type.Event){if(t.event.special[e.name]||(t.event.special[e.name]={}),!t.event.special[e.name].owl){var i=t.event.special[e.name]._default;t.event.special[e.name]._default=function(t){return!i||!i.apply||t.namespace&&-1!==t.namespace.indexOf("owl")?t.namespace&&t.namespace.indexOf("owl")>-1:i.apply(this,arguments)},t.event.special[e.name].owl=!0}}else e.type===s.Type.State&&(this._states.tags[e.name]?this._states.tags[e.name]=this._states.tags[e.name].concat(e.tags):this._states.tags[e.name]=e.tags,this._states.tags[e.name]=t.grep(this._states.tags[e.name],t.proxy(function(i,n){return t.inArray(i,this._states.tags[e.name])===n},this)))},s.prototype.suppress=function(e){t.each(e,t.proxy(function(t,e){this._supress[e]=!0},this))},s.prototype.release=function(e){t.each(e,t.proxy(function(t,e){delete this._supress[e]},this))},s.prototype.pointer=function(t){var i={x:null,y:null};return(t=(t=t.originalEvent||t||e.event).touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t).pageX?(i.x=t.pageX,i.y=t.pageY):(i.x=t.clientX,i.y=t.clientY),i},s.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))},s.prototype.difference=function(t,e){return{x:t.x-e.x,y:t.y-e.y}},t.fn.owlCarousel=function(e){var i=Array.prototype.slice.call(arguments,1);return this.each(function(){var n=t(this),o=n.data("owl.carousel");o||(o=new s(this,"object"==typeof e&&e),n.data("owl.carousel",o),t.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(e,i){o.register({type:s.Type.Event,name:i}),o.$element.on(i+".owl.carousel.core",t.proxy(function(t){t.namespace&&t.relatedTarget!==this&&(this.suppress([i]),o[i].apply(this,[].slice.call(arguments,1)),this.release([i]))},o))})),"string"==typeof e&&"_"!==e.charAt(0)&&o[e].apply(o,i)})},t.fn.owlCarousel.Constructor=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this._core=e,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=t.extend({},s.Defaults,this._core.options),this._core.$element.on(this._handlers)};s.Defaults={autoRefresh:!0,autoRefreshInterval:500},s.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=e.setInterval(t.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},s.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},s.prototype.destroy=function(){var t,i;for(t in e.clearInterval(this._interval),this._handlers)this._core.$element.off(t,this._handlers[t]);for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},t.fn.owlCarousel.Constructor.Plugins.AutoRefresh=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this._core=e,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":t.proxy(function(e){if(e.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(e.property&&"position"==e.property.name||"initialized"==e.type))for(var i=this._core.settings,s=i.center&&Math.ceil(i.items/2)||i.items,o=i.center&&-1*s||0,r=(e.property&&e.property.value!==n?e.property.value:this._core.current())+o,a=this._core.clones().length,l=t.proxy(function(t,e){this.load(e)},this);o++-1||(s.each(t.proxy(function(i,n){var s,o=t(n),r=e.devicePixelRatio>1&&o.attr("data-src-retina")||o.attr("data-src");this._core.trigger("load",{element:o,url:r},"lazy"),o.is("img")?o.one("load.owl.lazy",t.proxy(function(){o.css("opacity",1),this._core.trigger("loaded",{element:o,url:r},"lazy")},this)).attr("src",r):((s=new Image).onload=t.proxy(function(){o.css({"background-image":'url("'+r+'")',opacity:"1"}),this._core.trigger("loaded",{element:o,url:r},"lazy")},this),s.src=r)},this)),this._loaded.push(n.get(0)))},s.prototype.destroy=function(){var t,e;for(t in this.handlers)this._core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.owlCarousel.Constructor.Plugins.Lazy=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this._core=e,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.autoHeight&&"position"==t.property.name&&this.update()},this),"loaded.owl.lazy":t.proxy(function(t){t.namespace&&this._core.settings.autoHeight&&t.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=t.extend({},s.Defaults,this._core.options),this._core.$element.on(this._handlers)};s.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},s.prototype.update=function(){var e=this._core._current,i=e+this._core.settings.items,n=this._core.$stage.children().toArray().slice(e,i),s=[],o=0;t.each(n,function(e,i){s.push(t(i).height())}),o=Math.max.apply(null,s),this._core.$stage.parent().height(o).addClass(this._core.settings.autoHeightClass)},s.prototype.destroy=function(){var t,e;for(t in this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.owlCarousel.Constructor.Plugins.AutoHeight=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this._core=e,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":t.proxy(function(t){t.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.video&&this.isInFullScreen()&&t.preventDefault()},this),"refreshed.owl.carousel":t.proxy(function(t){t.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":t.proxy(function(t){t.namespace&&"position"===t.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":t.proxy(function(e){if(e.namespace){var i=t(e.content).find(".owl-video");i.length&&(i.css("display","none"),this.fetch(i,t(e.content)))}},this)},this._core.options=t.extend({},s.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",t.proxy(function(t){this.play(t)},this))};s.Defaults={video:!1,videoHeight:!1,videoWidth:!1},s.prototype.fetch=function(t,e){var i=t.attr("data-vimeo-id")?"vimeo":t.attr("data-vzaar-id")?"vzaar":"youtube",n=t.attr("data-vimeo-id")||t.attr("data-youtube-id")||t.attr("data-vzaar-id"),s=t.attr("data-width")||this._core.settings.videoWidth,o=t.attr("data-height")||this._core.settings.videoHeight,r=t.attr("href");if(!r)throw new Error("Missing video URL.");if((n=r.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/))[3].indexOf("youtu")>-1)i="youtube";else if(n[3].indexOf("vimeo")>-1)i="vimeo";else{if(!(n[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");i="vzaar"}n=n[6],this._videos[r]={type:i,id:n,width:s,height:o},e.attr("data-video",r),this.thumbnail(t,this._videos[r])},s.prototype.thumbnail=function(e,i){var n,s,o,r=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",a=e.find("img"),l="src",h="",u=this._core.settings,c=function(t){s='
',n=u.lazyLoad?'
':'
',e.after(n),e.after(s)};if(e.wrap('
"),this._core.settings.lazyLoad&&(l="data-src",h="owl-lazy"),a.length)return c(a.attr(l)),a.remove(),!1;"youtube"===i.type?(o="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",c(o)):"vimeo"===i.type?t.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){o=t[0].thumbnail_large,c(o)}}):"vzaar"===i.type&&t.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){o=t.framegrab_url,c(o)}})},s.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},s.prototype.play=function(e){var i,n,s=t(e.target).closest("."+this._core.settings.itemClass),o=this._videos[s.attr("data-video")],r=o.width||"100%",a=o.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),s=this._core.items(this._core.relative(s.index())),this._core.reset(s.index()),"youtube"===o.type?i='':"vimeo"===o.type?i='':"vzaar"===o.type&&(i=''),t('
'+i+"
").insertAfter(s.find(".owl-video")),this._playing=s.addClass("owl-video-playing"))},s.prototype.isInFullScreen=function(){var e=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return e&&t(e).parent().hasClass("owl-video-frame")},s.prototype.destroy=function(){var t,e;for(t in this._core.$element.off("click.owl.video"),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.owlCarousel.Constructor.Plugins.Video=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this.core=e,this.core.options=t.extend({},s.Defaults,this.core.options),this.swapping=!0,this.previous=n,this.next=n,this.handlers={"change.owl.carousel":t.proxy(function(t){t.namespace&&"position"==t.property.name&&(this.previous=this.core.current(),this.next=t.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":t.proxy(function(t){t.namespace&&(this.swapping="translated"==t.type)},this),"translate.owl.carousel":t.proxy(function(t){t.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};s.Defaults={animateOut:!1,animateIn:!1},s.prototype.swap=function(){if(1===this.core.settings.items&&t.support.animation&&t.support.transition){this.core.speed(0);var e,i=t.proxy(this.clear,this),n=this.core.$stage.children().eq(this.previous),s=this.core.$stage.children().eq(this.next),o=this.core.settings.animateIn,r=this.core.settings.animateOut;this.core.current()!==this.previous&&(r&&(e=this.core.coordinates(this.previous)-this.core.coordinates(this.next),n.one(t.support.animation.end,i).css({left:e+"px"}).addClass("animated owl-animated-out").addClass(r)),o&&s.one(t.support.animation.end,i).addClass("animated owl-animated-in").addClass(o))}},s.prototype.clear=function(e){t(e.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},s.prototype.destroy=function(){var t,e;for(t in this.handlers)this.core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.owlCarousel.Constructor.Plugins.Animate=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){var s=function(e){this._core=e,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":t.proxy(function(t){t.namespace&&"settings"===t.property.name?this._core.settings.autoplay?this.play():this.stop():t.namespace&&"position"===t.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":t.proxy(function(t,e,i){t.namespace&&this.play(e,i)},this),"stop.owl.autoplay":t.proxy(function(t){t.namespace&&this.stop()},this),"mouseover.owl.autoplay":t.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":t.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":t.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":t.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=t.extend({},s.Defaults,this._core.options)};s.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},s.prototype._next=function(n){this._call=e.setTimeout(t.proxy(this._next,this,n),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(n||this._core.settings.autoplaySpeed)},s.prototype.read=function(){return(new Date).getTime()-this._time},s.prototype.play=function(i,n){var s;this._core.is("rotating")||this._core.enter("rotating"),i=i||this._core.settings.autoplayTimeout,s=Math.min(this._time%(this._timeout||i),i),this._paused?(this._time=this.read(),this._paused=!1):e.clearTimeout(this._call),this._time+=this.read()%i-s,this._timeout=i,this._call=e.setTimeout(t.proxy(this._next,this,n),i-s)},s.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,e.clearTimeout(this._call),this._core.leave("rotating"))},s.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,e.clearTimeout(this._call))},s.prototype.destroy=function(){var t,e;for(t in this.stop(),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.owlCarousel.Constructor.Plugins.autoplay=s}(window.Zepto||window.jQuery,window,document),function(t,e,i,n){"use strict";var s=function(e){this._core=e,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":t.proxy(function(e){e.namespace&&this._core.settings.dotsData&&this._templates.push('
'+t(e.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
")},this),"added.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,0,this._templates.pop())},this),"remove.owl.carousel":t.proxy(function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,1)},this),"changed.owl.carousel":t.proxy(function(t){t.namespace&&"position"==t.property.name&&this.draw()},this),"initialized.owl.carousel":t.proxy(function(t){t.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":t.proxy(function(t){t.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=t.extend({},s.Defaults,this._core.options),this.$element.on(this._handlers)};s.Defaults={nav:!1,navText:['',''],navSpeed:!1,navElement:'button role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},s.prototype.initialize=function(){var e,i=this._core.settings;for(e in this._controls.$relative=(i.navContainer?t(i.navContainer):t("
").addClass(i.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=t("<"+i.navElement+">").addClass(i.navClass[0]).html(i.navText[0]).prependTo(this._controls.$relative).on("click",t.proxy(function(t){this.prev(i.navSpeed)},this)),this._controls.$next=t("<"+i.navElement+">").addClass(i.navClass[1]).html(i.navText[1]).appendTo(this._controls.$relative).on("click",t.proxy(function(t){this.next(i.navSpeed)},this)),i.dotsData||(this._templates=[t("
').appendTo(); + }); + + // Wait for images to load + $this.imagesLoaded( function() { + + // If it's a single column gallery + if ( galleryCols === '1' ) { + + // Add carousel class to gallery + $this.addClass('gallery--carousel'); + + // Add owl styles to gallery wrap + $this.children('.gallery__wrap').addClass('owl-carousel'); + + // Use carousel + $this.children('.gallery__wrap').owlCarousel({ + items: 1, + loop: true, + mouseDrag: false, + touchDrag: true, + pullDrag: false, + dots: true, + autoplay: false, + autoplayTimeout: 6000, + autoHeight: true, + animateOut: 'fadeOut' + }); + + // When scrolling over the bottom + var waypoint1 = new Waypoint({ + element: document.getElementById(thisId), + handler: function(direction) { + + if ( direction === 'down') { + + // console.log('pause'); + + // Pause this carousel + $this.children('.gallery__wrap').trigger('stop.owl.autoplay'); + } + + if ( direction === 'up') { + + // console.log('play'); + + // Play this carousel + $this.children('.gallery__wrap').trigger('play.owl.autoplay'); + } + }, + offset: '-100%' + }); + + // When scrolling over the top + var waypoint2 = new Waypoint({ + element: document.getElementById(thisId), + handler: function(direction) { + + if ( direction === 'down') { + + // console.log('play'); + + // Play this carousel + $this.children('.gallery__wrap').trigger('play.owl.autoplay'); + } + + if ( direction === 'up') { + + // console.log('pause'); + + // Pause this carousel + $this.children('.gallery__wrap').trigger('stop.owl.autoplay'); + } + }, + offset: '100%' + }); + + } + + else { + + $this.addClass('gallery--grid'); + + // Use masonry layout + $this.children('.gallery__wrap').masonry({ + itemSelector: '.gallery__item', + transitionDuration: 0 + }); + + // Init fluidbox + $this.find('.gallery__item__link').fluidbox({ + loader: true + }); + + } + + // Show gallery once initialized + $this.addClass('gallery--on'); + }); + + }); + + + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Images + + $('.single p > img').each( function() { + var thisP = $(this).parent('p'); + $(this).insertAfter(thisP); + $(this).wrapAll('
'); + thisP.remove(); + }); + + + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Videos + + // For each iframe + $('.single iframe').each( function() { + + // If it's YouTube or Vimeo + if ( $(this).attr('src').indexOf('youtube') >= 0 || $(this).attr('src').indexOf('vimeo') >= 0 ) { + + var width = $(this).attr('width'); + var height = $(this).attr('height'); + var ratio = (height/width)*100; + + // Wrap in video container + $(this).wrapAll('
'); + + } + + }); + + } + + // Run functions on load + pageFunctions(); + + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Menu + + $(document).on('click', '.js-menu-toggle', function (){ + + // If already open + if ( $('body').hasClass('menu--open') ) { + $('body').removeClass('menu--open'); + } + + // If not open + else { + $('body').addClass('menu--open'); + } + }); + + $(document).on('click', '.menu__list__item__link', function (){ + + // If menu is open when you click a link on mobile + if ( $('.menu').hasClass('menu--open') ) { + $('.menu').removeClass('menu--open'); + } + }); + + + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Listing post click + + // Click anywhere on the post to go to the link + $(document).on('click', '.post', function (){ + + var targetPost = $(this).find('.post__title a').attr('href'); + + if ( $('body').hasClass('ajax-loading') ) { + + // Change navTarget + navTarget = targetPost; + + // Switch the URL via History + History.pushState(null, docTitle, targetPost); + } + + else { + // Use the given link + window.location = targetPost; + } + }); + + + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Contact Form + + // Override the submit event + $(document).on('submit', '#contact-form', function (e) { + + // Clear previous classes + $('.contact-form__item--error').removeClass('contact-form__item--error'); + + // Get form elements + var emailField = $('.contact-form__input[name="email"]'); + var nameField = $('.contact-form__input[name="name"]'); + var messageField = $('.contact-form__textarea[name="message"]'); + var gotchaField = $('.contact-form__gotcha'); + + // Validate email + if ( emailField.val() === '' ) { + emailField.closest('.contact-form__item').addClass('contact-form__item--error'); + } + + // Validate name + if ( nameField.val() === '' ) { + nameField.closest('.contact-form__item').addClass('contact-form__item--error'); + } + + // Validate message + if ( messageField.val() === '' ) { + messageField.closest('.contact-form__item').addClass('contact-form__item--error'); + } + + // If all fields are filled, except gotcha + if ( emailField.val() !== '' && nameField.val() !== '' && messageField.val() !== '' && gotchaField.val().length === 0 ) { + + // Submit the form! + } + + else { + + // Stop submission + e.preventDefault(); + } + + }); + + + +}(jQuery)); \ No newline at end of file diff --git a/js/plugins/.DS_Store b/js/plugins/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/js/plugins/.DS_Store differ diff --git a/js/plugins/debounce.js b/js/plugins/debounce.js new file mode 100644 index 0000000..0720550 --- /dev/null +++ b/js/plugins/debounce.js @@ -0,0 +1,9 @@ +/* + * jQuery throttle / debounce - v1.1 - 3/7/2010 + * http://benalman.com/projects/jquery-throttle-debounce-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this); \ No newline at end of file diff --git a/js/plugins/fluidbox.js b/js/plugins/fluidbox.js new file mode 100644 index 0000000..3bf505c --- /dev/null +++ b/js/plugins/fluidbox.js @@ -0,0 +1 @@ +!function(a,b,c,d){"use strict";function e(b,c){this.element=b;var d={};a.each(a(this.element).data(),function(a,b){var c=function(a){return a&&a[0].toLowerCase()+a.slice(1)},e=c(a.replace("fluidbox",""));(""!==e||null!==e)&&("false"==b?b=!1:"true"==b&&(b=!0),d[e]=b)}),this.settings=a.extend({},h,c,d),this.settings.viewportFill=Math.max(Math.min(parseFloat(this.settings.viewportFill),1),0),this.settings.stackIndex",{"class":"fluidbox__wrap",css:{zIndex:this.settings.stackIndex-this.settings.stackIndexDelta}});if(a(this.element).addClass("fluidbox--closed").wrapInner(b).find("img").first().css({opacity:1}).addClass("fluidbox__thumb").after('
'),this.settings.loader){var c=a("
",{"class":"fluidbox__loader",css:{zIndex:2}});a(this.element).find(".fluidbox__wrap").append(c)}},prepareFb:function(){var b=this,c=a(this.element);c.trigger("thumbloaddone.fluidbox"),m.measure.fbElements.call(this),b.bindEvents(),c.addClass("fluidbox--ready"),b.bindListeners(),c.trigger("ready.fluidbox")},measure:{viewport:function(){i.viewport={w:f.width(),h:f.height()}},fbElements:function(){var b=this,c=a(this.element),d=c.find("img").first(),e=c.find(".fluidbox__ghost"),f=c.find(".fluidbox__wrap");b.instanceData.thumb={natW:d[0].naturalWidth,natH:d[0].naturalHeight,w:d.width(),h:d.height()},e.css({width:d.width(),height:d.height(),top:d.offset().top-f.offset().top+parseInt(d.css("borderTopWidth"))+parseInt(d.css("paddingTop")),left:d.offset().left-f.offset().left+parseInt(d.css("borderLeftWidth"))+parseInt(d.css("paddingLeft"))})}},checkURL:function(a){var b=0;return/[\s+]/g.test(a)?(console.warn("Fluidbox: Fluidbox opening is halted because it has detected characters in your URL string that need to be properly encoded/escaped. Whitespace(s) have to be escaped manually. See RFC3986 documentation."),b=1):/[\"\'\(\)]/g.test(a)&&(console.warn("Fluidbox: Fluidbox opening will proceed, but it has detected characters in your URL string that need to be properly encoded/escaped. These will be escaped for you. See RFC3986 documentation."),b=0),b},formatURL:function(a){return a.replace(/"/g,"%22").replace(/'/g,"%27").replace(/\(/g,"%28").replace(/\)/g,"%29")}};a.extend(e.prototype,{init:function(){var b=this,c=a(this.element),d=c.find("img").first();if(m.measure.viewport(),(!b.instanceData||!b.instanceData.initialized)&&c.is("a")&&1===c.children().length&&(c.children().is("img")||c.children().is("picture")&&1===c.find("img").length)&&"none"!==c.css("display")&&"none"!==c.children().css("display")&&"none"!==c.parents().css("display")){c.removeClass("fluidbox--destroyed"),b.instanceData={},b.instanceData.initialized=!0,b.instanceData.originalNode=c.html(),j+=1,b.instanceData.id=j,c.addClass("fluidbox__instance-"+j),c.addClass("fluidbox--initialized"),m.dom.call(b),c.trigger("init.fluidbox");var e=new Image;d.width()>0&&d.height()>0?m.prepareFb.call(b):(e.onload=function(){m.prepareFb.call(b)},e.onerror=function(){c.trigger("thumbloadfail.fluidbox")},e.src=d.attr("src"))}},open:function(){var b=this,c=a(this.element),d=c.find("img").first(),e=c.find(".fluidbox__ghost"),f=c.find(".fluidbox__wrap");b.instanceData.state=1,e.off(l),a(".fluidbox--opened").fluidbox("close");var g=a("
",{"class":"fluidbox__overlay",css:{zIndex:-1}});if(f.append(g),c.removeClass("fluidbox--closed").addClass("fluidbox--loading"),m.checkURL(d.attr("src")))return b.close(),!1;e.css({"background-image":"url("+m.formatURL(d.attr("src"))+")",opacity:1}),m.measure.fbElements.call(b);var h;b.settings.immediateOpen?(c.addClass("fluidbox--opened fluidbox--loaded").find(".fluidbox__wrap").css({zIndex:b.settings.stackIndex+b.settings.stackIndexDelta}),c.trigger("openstart.fluidbox"),b.compute(),d.css({opacity:0}),a(".fluidbox__overlay").css({opacity:1}),e.one(l,function(){c.trigger("openend.fluidbox")}),h=new Image,h.onload=function(){if(c.trigger("imageloaddone.fluidbox"),1===b.instanceData.state){if(b.instanceData.thumb.natW=h.naturalWidth,b.instanceData.thumb.natH=h.naturalHeight,c.removeClass("fluidbox--loading"),m.checkURL(h.src))return b.close({error:!0}),!1;e.css({"background-image":"url("+m.formatURL(h.src)+")"}),b.compute()}},h.onerror=function(){b.close({error:!0}),c.trigger("imageloadfail.fluidbox"),c.trigger("delayedloadfail.fluidbox")},h.src=c.attr("href")):(h=new Image,h.onload=function(){return c.trigger("imageloaddone.fluidbox"),c.removeClass("fluidbox--loading").addClass("fluidbox--opened fluidbox--loaded").find(".fluidbox__wrap").css({zIndex:b.settings.stackIndex+b.settings.stackIndexDelta}),c.trigger("openstart.fluidbox"),m.checkURL(h.src)?(b.close({error:!0}),!1):(e.css({"background-image":"url("+m.formatURL(h.src)+")"}),b.instanceData.thumb.natW=h.naturalWidth,b.instanceData.thumb.natH=h.naturalHeight,b.compute(),d.css({opacity:0}),a(".fluidbox__overlay").css({opacity:1}),void e.one(l,function(){c.trigger("openend.fluidbox")}))},h.onerror=function(){b.close({error:!0}),c.trigger("imageloadfail.fluidbox")},h.src=c.attr("href"))},compute:function(){var b=this,c=a(this.element),d=c.find("img").first(),e=c.find(".fluidbox__ghost"),g=c.find(".fluidbox__wrap"),h=b.instanceData.thumb.natW,j=b.instanceData.thumb.natH,k=b.instanceData.thumb.w,l=b.instanceData.thumb.h,m=h/j,n=i.viewport.w/i.viewport.h;b.settings.maxWidth>0?(h=b.settings.maxWidth,j=h/m):b.settings.maxHeight>0&&(j=b.settings.maxHeight,h=j*m);var o,p,q,r,s;n>m?(o=j")&&n[0]);return e>4?e:!1}();return e},h.isInternetExplorer=function(){var e=h.isInternetExplorer.cached=typeof h.isInternetExplorer.cached!="undefined"?h.isInternetExplorer.cached:Boolean(h.getInternetExplorerMajorVersion());return e},h.options.html4Mode?h.emulated={pushState:!0,hashChange:!0}:h.emulated={pushState:!Boolean(e.history&&e.history.pushState&&e.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(i.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(i.userAgent)),hashChange:Boolean(!("onhashchange"in e||"onhashchange"in r)||h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8)},h.enabled=!h.emulated.pushState,h.bugs={setHash:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),safariPoll:Boolean(!h.emulated.pushState&&i.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(i.userAgent)),ieDoubleCheck:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(h.isInternetExplorer()&&h.getInternetExplorerMajorVersion()<7)},h.isEmptyObject=function(e){for(var t in e)if(e.hasOwnProperty(t))return!1;return!0},h.cloneObject=function(e){var t,n;return e?(t=l.stringify(e),n=l.parse(t)):n={},n},h.getRootUrl=function(){var e=r.location.protocol+"//"+(r.location.hostname||r.location.host);if(r.location.port||!1)e+=":"+r.location.port;return e+="/",e},h.getBaseHref=function(){var e=r.getElementsByTagName("base"),t=null,n="";return e.length===1&&(t=e[0],n=t.href.replace(/[^\/]+$/,"")),n=n.replace(/\/+$/,""),n&&(n+="/"),n},h.getBaseUrl=function(){var e=h.getBaseHref()||h.getBasePageUrl()||h.getRootUrl();return e},h.getPageUrl=function(){var e=h.getState(!1,!1),t=(e||{}).url||h.getLocationHref(),n;return n=t.replace(/\/+$/,"").replace(/[^\/]+$/,function(e,t,n){return/\./.test(e)?e:e+"/"}),n},h.getBasePageUrl=function(){var e=h.getLocationHref().replace(/[#\?].*/,"").replace(/[^\/]+$/,function(e,t,n){return/[^\/]$/.test(e)?"":e}).replace(/\/+$/,"")+"/";return e},h.getFullUrl=function(e,t){var n=e,r=e.substring(0,1);return t=typeof t=="undefined"?!0:t,/[a-z]+\:\/\//.test(e)||(r==="/"?n=h.getRootUrl()+e.replace(/^\/+/,""):r==="#"?n=h.getPageUrl().replace(/#.*/,"")+e:r==="?"?n=h.getPageUrl().replace(/[\?#].*/,"")+e:t?n=h.getBaseUrl()+e.replace(/^(\.\/)+/,""):n=h.getBasePageUrl()+e.replace(/^(\.\/)+/,"")),n.replace(/\#$/,"")},h.getShortUrl=function(e){var t=e,n=h.getBaseUrl(),r=h.getRootUrl();return h.emulated.pushState&&(t=t.replace(n,"")),t=t.replace(r,"/"),h.isTraditionalAnchor(t)&&(t="./"+t),t=t.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),t},h.getLocationHref=function(e){return e=e||r,e.URL===e.location.href?e.location.href:e.location.href===decodeURIComponent(e.URL)?e.URL:e.location.hash&&decodeURIComponent(e.location.href.replace(/^[^#]+/,""))===e.location.hash?e.location.href:e.URL.indexOf("#")==-1&&e.location.href.indexOf("#")!=-1?e.location.href:e.URL||e.location.href},h.store={},h.idToState=h.idToState||{},h.stateToId=h.stateToId||{},h.urlToId=h.urlToId||{},h.storedStates=h.storedStates||[],h.savedStates=h.savedStates||[],h.normalizeStore=function(){h.store.idToState=h.store.idToState||{},h.store.urlToId=h.store.urlToId||{},h.store.stateToId=h.store.stateToId||{}},h.getState=function(e,t){typeof e=="undefined"&&(e=!0),typeof t=="undefined"&&(t=!0);var n=h.getLastSavedState();return!n&&t&&(n=h.createStateObject()),e&&(n=h.cloneObject(n),n.url=n.cleanUrl||n.url),n},h.getIdByState=function(e){var t=h.extractId(e.url),n;if(!t){n=h.getStateString(e);if(typeof h.stateToId[n]!="undefined")t=h.stateToId[n];else if(typeof h.store.stateToId[n]!="undefined")t=h.store.stateToId[n];else{for(;;){t=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof h.idToState[t]=="undefined"&&typeof h.store.idToState[t]=="undefined")break}h.stateToId[n]=t,h.idToState[t]=e}}return t},h.normalizeState=function(e){var t,n;if(!e||typeof e!="object")e={};if(typeof e.normalized!="undefined")return e;if(!e.data||typeof e.data!="object")e.data={};return t={},t.normalized=!0,t.title=e.title||"",t.url=h.getFullUrl(e.url?e.url:h.getLocationHref()),t.hash=h.getShortUrl(t.url),t.data=h.cloneObject(e.data),t.id=h.getIdByState(t),t.cleanUrl=t.url.replace(/\??\&_suid.*/,""),t.url=t.cleanUrl,n=!h.isEmptyObject(t.data),(t.title||n)&&h.options.disableSuid!==!0&&(t.hash=h.getShortUrl(t.url).replace(/\??\&_suid.*/,""),/\?/.test(t.hash)||(t.hash+="?"),t.hash+="&_suid="+t.id),t.hashedUrl=h.getFullUrl(t.hash),(h.emulated.pushState||h.bugs.safariPoll)&&h.hasUrlDuplicate(t)&&(t.url=t.hashedUrl),t},h.createStateObject=function(e,t,n){var r={data:e,title:t,url:n};return r=h.normalizeState(r),r},h.getStateById=function(e){e=String(e);var n=h.idToState[e]||h.store.idToState[e]||t;return n},h.getStateString=function(e){var t,n,r;return t=h.normalizeState(e),n={data:t.data,title:e.title,url:e.url},r=l.stringify(n),r},h.getStateId=function(e){var t,n;return t=h.normalizeState(e),n=t.id,n},h.getHashByState=function(e){var t,n;return t=h.normalizeState(e),n=t.hash,n},h.extractId=function(e){var t,n,r,i;return e.indexOf("#")!=-1?i=e.split("#")[0]:i=e,n=/(.*)\&_suid=([0-9]+)$/.exec(i),r=n?n[1]||e:e,t=n?String(n[2]||""):"",t||!1},h.isTraditionalAnchor=function(e){var t=!/[\/\?\.]/.test(e);return t},h.extractState=function(e,t){var n=null,r,i;return t=t||!1,r=h.extractId(e),r&&(n=h.getStateById(r)),n||(i=h.getFullUrl(e),r=h.getIdByUrl(i)||!1,r&&(n=h.getStateById(r)),!n&&t&&!h.isTraditionalAnchor(e)&&(n=h.createStateObject(null,null,i))),n},h.getIdByUrl=function(e){var n=h.urlToId[e]||h.store.urlToId[e]||t;return n},h.getLastSavedState=function(){return h.savedStates[h.savedStates.length-1]||t},h.getLastStoredState=function(){return h.storedStates[h.storedStates.length-1]||t},h.hasUrlDuplicate=function(e){var t=!1,n;return n=h.extractState(e.url),t=n&&n.id!==e.id,t},h.storeState=function(e){return h.urlToId[e.url]=e.id,h.storedStates.push(h.cloneObject(e)),e},h.isLastSavedState=function(e){var t=!1,n,r,i;return h.savedStates.length&&(n=e.id,r=h.getLastSavedState(),i=r.id,t=n===i),t},h.saveState=function(e){return h.isLastSavedState(e)?!1:(h.savedStates.push(h.cloneObject(e)),!0)},h.getStateByIndex=function(e){var t=null;return typeof e=="undefined"?t=h.savedStates[h.savedStates.length-1]:e<0?t=h.savedStates[h.savedStates.length+e]:t=h.savedStates[e],t},h.getCurrentIndex=function(){var e=null;return h.savedStates.length<1?e=0:e=h.savedStates.length-1,e},h.getHash=function(e){var t=h.getLocationHref(e),n;return n=h.getHashByUrl(t),n},h.unescapeHash=function(e){var t=h.normalizeHash(e);return t=decodeURIComponent(t),t},h.normalizeHash=function(e){var t=e.replace(/[^#]*#/,"").replace(/#.*/,"");return t},h.setHash=function(e,t){var n,i;return t!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.setHash,args:arguments,queue:t}),!1):(h.busy(!0),n=h.extractState(e,!0),n&&!h.emulated.pushState?h.pushState(n.data,n.title,n.url,!1):h.getHash()!==e&&(h.bugs.setHash?(i=h.getPageUrl(),h.pushState(null,null,i+"#"+e,!1)):r.location.hash=e),h)},h.escapeHash=function(t){var n=h.normalizeHash(t);return n=e.encodeURIComponent(n),h.bugs.hashEscape||(n=n.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),n},h.getHashByUrl=function(e){var t=String(e).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return t=h.unescapeHash(t),t},h.setTitle=function(e){var t=e.title,n;t||(n=h.getStateByIndex(0),n&&n.url===e.url&&(t=n.title||h.options.initialTitle));try{r.getElementsByTagName("title")[0].innerHTML=t.replace("<","<").replace(">",">").replace(" & "," & ")}catch(i){}return r.title=t,h},h.queues=[],h.busy=function(e){typeof e!="undefined"?h.busy.flag=e:typeof h.busy.flag=="undefined"&&(h.busy.flag=!1);if(!h.busy.flag){u(h.busy.timeout);var t=function(){var e,n,r;if(h.busy.flag)return;for(e=h.queues.length-1;e>=0;--e){n=h.queues[e];if(n.length===0)continue;r=n.shift(),h.fireQueueItem(r),h.busy.timeout=o(t,h.options.busyDelay)}};h.busy.timeout=o(t,h.options.busyDelay)}return h.busy.flag},h.busy.flag=!1,h.fireQueueItem=function(e){return e.callback.apply(e.scope||h,e.args||[])},h.pushQueue=function(e){return h.queues[e.queue||0]=h.queues[e.queue||0]||[],h.queues[e.queue||0].push(e),h},h.queue=function(e,t){return typeof e=="function"&&(e={callback:e}),typeof t!="undefined"&&(e.queue=t),h.busy()?h.pushQueue(e):h.fireQueueItem(e),h},h.clearQueue=function(){return h.busy.flag=!1,h.queues=[],h},h.stateChanged=!1,h.doubleChecker=!1,h.doubleCheckComplete=function(){return h.stateChanged=!0,h.doubleCheckClear(),h},h.doubleCheckClear=function(){return h.doubleChecker&&(u(h.doubleChecker),h.doubleChecker=!1),h},h.doubleCheck=function(e){return h.stateChanged=!1,h.doubleCheckClear(),h.bugs.ieDoubleCheck&&(h.doubleChecker=o(function(){return h.doubleCheckClear(),h.stateChanged||e(),!0},h.options.doubleCheckInterval)),h},h.safariStatePoll=function(){var t=h.extractState(h.getLocationHref()),n;if(!h.isLastSavedState(t))return n=t,n||(n=h.createStateObject()),h.Adapter.trigger(e,"popstate"),h;return},h.back=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.back,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.back(!1)}),p.go(-1),!0)},h.forward=function(e){return e!==!1&&h.busy()?(h.pushQueue({scope:h,callback:h.forward,args:arguments,queue:e}),!1):(h.busy(!0),h.doubleCheck(function(){h.forward(!1)}),p.go(1),!0)},h.go=function(e,t){var n;if(e>0)for(n=1;n<=e;++n)h.forward(t);else{if(!(e<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(n=-1;n>=e;--n)h.back(t)}return h};if(h.emulated.pushState){var v=function(){};h.pushState=h.pushState||v,h.replaceState=h.replaceState||v}else h.onPopState=function(t,n){var r=!1,i=!1,s,o;return h.doubleCheckComplete(),s=h.getHash(),s?(o=h.extractState(s||h.getLocationHref(),!0),o?h.replaceState(o.data,o.title,o.url,!1):(h.Adapter.trigger(e,"anchorchange"),h.busy(!1)),h.expectedStateId=!1,!1):(r=h.Adapter.extractEventData("state",t,n)||!1,r?i=h.getStateById(r):h.expectedStateId?i=h.getStateById(h.expectedStateId):i=h.extractState(h.getLocationHref()),i||(i=h.createStateObject(null,null,h.getLocationHref())),h.expectedStateId=!1,h.isLastSavedState(i)?(h.busy(!1),!1):(h.storeState(i),h.saveState(i),h.setTitle(i),h.Adapter.trigger(e,"statechange"),h.busy(!1),!0))},h.Adapter.bind(e,"popstate",h.onPopState),h.pushState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.pushState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.pushState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0},h.replaceState=function(t,n,r,i){if(h.getHashByUrl(r)&&h.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(i!==!1&&h.busy())return h.pushQueue({scope:h,callback:h.replaceState,args:arguments,queue:i}),!1;h.busy(!0);var s=h.createStateObject(t,n,r);return h.isLastSavedState(s)?h.busy(!1):(h.storeState(s),h.expectedStateId=s.id,p.replaceState(s.id,s.title,s.url),h.Adapter.trigger(e,"popstate")),!0};if(s){try{h.store=l.parse(s.getItem("History.store"))||{}}catch(m){h.store={}}h.normalizeStore()}else h.store={},h.normalizeStore();h.Adapter.bind(e,"unload",h.clearAllIntervals),h.saveState(h.storeState(h.extractState(h.getLocationHref(),!0))),s&&(h.onUnload=function(){var e,t,n;try{e=l.parse(s.getItem("History.store"))||{}}catch(r){e={}}e.idToState=e.idToState||{},e.urlToId=e.urlToId||{},e.stateToId=e.stateToId||{};for(t in h.idToState){if(!h.idToState.hasOwnProperty(t))continue;e.idToState[t]=h.idToState[t]}for(t in h.urlToId){if(!h.urlToId.hasOwnProperty(t))continue;e.urlToId[t]=h.urlToId[t]}for(t in h.stateToId){if(!h.stateToId.hasOwnProperty(t))continue;e.stateToId[t]=h.stateToId[t]}h.store=e,h.normalizeStore(),n=l.stringify(e);try{s.setItem("History.store",n)}catch(i){if(i.code!==DOMException.QUOTA_EXCEEDED_ERR)throw i;s.length&&(s.removeItem("History.store"),s.setItem("History.store",n))}},h.intervalList.push(a(h.onUnload,h.options.storeInterval)),h.Adapter.bind(e,"beforeunload",h.onUnload),h.Adapter.bind(e,"unload",h.onUnload));if(!h.emulated.pushState){h.bugs.safariPoll&&h.intervalList.push(a(h.safariStatePoll,h.options.safariPollInterval));if(i.vendor==="Apple Computer, Inc."||(i.appCodeName||"")==="Mozilla")h.Adapter.bind(e,"hashchange",function(){h.Adapter.trigger(e,"popstate")}),h.getHash()&&h.Adapter.onDomLoad(function(){h.Adapter.trigger(e,"hashchange")})}},(!h.options||!h.options.delayInit)&&h.init()}(window) \ No newline at end of file diff --git a/js/plugins/imagesloaded.js b/js/plugins/imagesloaded.js new file mode 100644 index 0000000..824dbad --- /dev/null +++ b/js/plugins/imagesloaded.js @@ -0,0 +1,2 @@ +// ImagesLoaded +!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return-1==n.indexOf(t)&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return-1!=n&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=0,o=i[n];t=t||[];for(var r=this._onceEvents&&this._onceEvents[e];o;){var s=r&&r[o];s&&(this.off(e,o),delete r[o]),o.apply(this,t),n+=s?0:1,o=i[n]}return this}},t.allOff=t.removeAllListeners=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){var t=[];if(Array.isArray(e))t=e;else if("number"==typeof e.length)for(var i=0;ie;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See http://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);r.isBoxSizeOuter=s=200==t(o.width),i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;is?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i}); \ No newline at end of file diff --git a/js/plugins/owl.js b/js/plugins/owl.js new file mode 100644 index 0000000..d162d9a --- /dev/null +++ b/js/plugins/owl.js @@ -0,0 +1,7 @@ +/** + * Owl Carousel v2.3.1 + * Copyright 2013-2018 David Deutsch + * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE + */ +!function(a,b,c,d){function e(b,c){this.settings=null,this.options=a.extend({},e.Defaults,c),this.$element=a(b),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},a.each(["onResize","onThrottledResize"],a.proxy(function(b,c){this._handlers[c]=a.proxy(this[c],this)},this)),a.each(e.Plugins,a.proxy(function(a,b){this._plugins[a.charAt(0).toLowerCase()+a.slice(1)]=new b(this)},this)),a.each(e.Workers,a.proxy(function(b,c){this._pipe.push({filter:c.filter,run:a.proxy(c.run,this)})},this)),this.setup(),this.initialize()}e.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:b,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"owl-refresh",loadedClass:"owl-loaded",loadingClass:"owl-loading",rtlClass:"owl-rtl",responsiveClass:"owl-responsive",dragClass:"owl-drag",itemClass:"owl-item",stageClass:"owl-stage",stageOuterClass:"owl-stage-outer",grabClass:"owl-grab"},e.Width={Default:"default",Inner:"inner",Outer:"outer"},e.Type={Event:"event",State:"state"},e.Plugins={},e.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(a){a.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(a){var b=this.settings.margin||"",c=!this.settings.autoWidth,d=this.settings.rtl,e={width:"auto","margin-left":d?b:"","margin-right":d?"":b};!c&&this.$stage.children().css(e),a.css=e}},{filter:["width","items","settings"],run:function(a){var b=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,c=null,d=this._items.length,e=!this.settings.autoWidth,f=[];for(a.items={merge:!1,width:b};d--;)c=this._mergers[d],c=this.settings.mergeFit&&Math.min(c,this.settings.items)||c,a.items.merge=c>1||a.items.merge,f[d]=e?b*c:this._items[d].width();this._widths=f}},{filter:["items","settings"],run:function(){var b=[],c=this._items,d=this.settings,e=Math.max(2*d.items,4),f=2*Math.ceil(c.length/2),g=d.loop&&c.length?d.rewind?e:Math.max(e,f):0,h="",i="";for(g/=2;g>0;)b.push(this.normalize(b.length/2,!0)),h+=c[b[b.length-1]][0].outerHTML,b.push(this.normalize(c.length-1-(b.length-1)/2,!0)),i=c[b[b.length-1]][0].outerHTML+i,g-=1;this._clones=b,a(h).addClass("cloned").appendTo(this.$stage),a(i).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var a=this.settings.rtl?1:-1,b=this._clones.length+this._items.length,c=-1,d=0,e=0,f=[];++c",h)||this.op(b,"<",g)&&this.op(b,">",h))&&i.push(c);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+i.join("), :eq(")+")").addClass("active"),this.$stage.children(".center").removeClass("center"),this.settings.center&&this.$stage.children().eq(this.current()).addClass("center")}}],e.prototype.initialize=function(){if(this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")){var b,c,e;b=this.$element.find("img"),c=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:d,e=this.$element.children(c).width(),b.length&&e<=0&&this.preloadAutoWidthImages(b)}this.$element.addClass(this.options.loadingClass),this.$stage=a("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('
'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},e.prototype.setup=function(){var b=this.viewport(),c=this.options.responsive,d=-1,e=null;c?(a.each(c,function(a){a<=b&&a>d&&(d=Number(a))}),e=a.extend({},this.options,c[d]),"function"==typeof e.stagePadding&&(e.stagePadding=e.stagePadding()),delete e.responsive,e.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+d))):e=a.extend({},this.options),this.trigger("change",{property:{name:"settings",value:e}}),this._breakpoint=d,this.settings=e,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},e.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},e.prototype.prepare=function(b){var c=this.trigger("prepare",{content:b});return c.data||(c.data=a("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(b)),this.trigger("prepared",{content:c.data}),c.data},e.prototype.update=function(){for(var b=0,c=this._pipe.length,d=a.proxy(function(a){return this[a]},this._invalidated),e={};b0)&&this._pipe[b].run(e),b++;this._invalidated={},!this.is("valid")&&this.enter("valid")},e.prototype.width=function(a){switch(a=a||e.Width.Default){case e.Width.Inner:case e.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},e.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},e.prototype.onThrottledResize=function(){b.clearTimeout(this.resizeTimer),this.resizeTimer=b.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},e.prototype.onResize=function(){return!!this._items.length&&(this._width!==this.$element.width()&&(!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))))},e.prototype.registerEventHandlers=function(){a.support.transition&&this.$stage.on(a.support.transition.end+".owl.core",a.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(b,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",function(){return!1})),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",a.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",a.proxy(this.onDragEnd,this)))},e.prototype.onDragStart=function(b){var d=null;3!==b.which&&(a.support.transform?(d=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","),d={x:d[16===d.length?12:4],y:d[16===d.length?13:5]}):(d=this.$stage.position(),d={x:this.settings.rtl?d.left+this.$stage.width()-this.width()+this.settings.margin:d.left,y:d.top}),this.is("animating")&&(a.support.transform?this.animate(d.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===b.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=a(b.target),this._drag.stage.start=d,this._drag.stage.current=d,this._drag.pointer=this.pointer(b),a(c).on("mouseup.owl.core touchend.owl.core",a.proxy(this.onDragEnd,this)),a(c).one("mousemove.owl.core touchmove.owl.core",a.proxy(function(b){var d=this.difference(this._drag.pointer,this.pointer(b));a(c).on("mousemove.owl.core touchmove.owl.core",a.proxy(this.onDragMove,this)),Math.abs(d.x)0^this.settings.rtl?"left":"right";a(c).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==d.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(e.x,0!==d.x?f:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=f,(Math.abs(d.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",function(){return!1})),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},e.prototype.closest=function(b,c){var d=-1,e=30,f=this.width(),g=this.coordinates();return this.settings.freeDrag||a.each(g,a.proxy(function(a,h){return"left"===c&&b>h-e&&bh-f-e&&b",g[a+1]||h-f)&&(d="left"===c?a+1:a),-1===d},this)),this.settings.loop||(this.op(b,">",g[this.minimum()])?d=b=this.minimum():this.op(b,"<",g[this.maximum()])&&(d=b=this.maximum())),d},e.prototype.animate=function(b){var c=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),c&&(this.enter("animating"),this.trigger("translate")),a.support.transform3d&&a.support.transition?this.$stage.css({transform:"translate3d("+b+"px,0px,0px)",transition:this.speed()/1e3+"s"}):c?this.$stage.animate({left:b+"px"},this.speed(),this.settings.fallbackEasing,a.proxy(this.onTransitionEnd,this)):this.$stage.css({left:b+"px"})},e.prototype.is=function(a){return this._states.current[a]&&this._states.current[a]>0},e.prototype.current=function(a){if(a===d)return this._current;if(0===this._items.length)return d;if(a=this.normalize(a),this._current!==a){var b=this.trigger("change",{property:{name:"position",value:a}});b.data!==d&&(a=this.normalize(b.data)),this._current=a,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},e.prototype.invalidate=function(b){return"string"===a.type(b)&&(this._invalidated[b]=!0,this.is("valid")&&this.leave("valid")),a.map(this._invalidated,function(a,b){return b})},e.prototype.reset=function(a){(a=this.normalize(a))!==d&&(this._speed=0,this._current=a,this.suppress(["translate","translated"]),this.animate(this.coordinates(a)),this.release(["translate","translated"]))},e.prototype.normalize=function(a,b){var c=this._items.length,e=b?0:this._clones.length;return!this.isNumeric(a)||c<1?a=d:(a<0||a>=c+e)&&(a=((a-e/2)%c+c)%c+e/2),a},e.prototype.relative=function(a){return a-=this._clones.length/2,this.normalize(a,!0)},e.prototype.maximum=function(a){var b,c,d,e=this.settings,f=this._coordinates.length;if(e.loop)f=this._clones.length/2+this._items.length-1;else if(e.autoWidth||e.merge){if(b=this._items.length)for(c=this._items[--b].width(),d=this.$element.width();b--&&!((c+=this._items[b].width()+this.settings.margin)>d););f=b+1}else f=e.center?this._items.length-1:this._items.length-e.items;return a&&(f-=this._clones.length/2),Math.max(f,0)},e.prototype.minimum=function(a){return a?0:this._clones.length/2},e.prototype.items=function(a){return a===d?this._items.slice():(a=this.normalize(a,!0),this._items[a])},e.prototype.mergers=function(a){return a===d?this._mergers.slice():(a=this.normalize(a,!0),this._mergers[a])},e.prototype.clones=function(b){var c=this._clones.length/2,e=c+this._items.length,f=function(a){return a%2==0?e+a/2:c-(a+1)/2};return b===d?a.map(this._clones,function(a,b){return f(b)}):a.map(this._clones,function(a,c){return a===b?f(c):null})},e.prototype.speed=function(a){return a!==d&&(this._speed=a),this._speed},e.prototype.coordinates=function(b){var c,e=1,f=b-1;return b===d?a.map(this._coordinates,a.proxy(function(a,b){return this.coordinates(b)},this)):(this.settings.center?(this.settings.rtl&&(e=-1,f=b+1),c=this._coordinates[b],c+=(this.width()-c+(this._coordinates[f]||0))/2*e):c=this._coordinates[f]||0,c=Math.ceil(c))},e.prototype.duration=function(a,b,c){return 0===c?0:Math.min(Math.max(Math.abs(b-a),1),6)*Math.abs(c||this.settings.smartSpeed)},e.prototype.to=function(a,b){var c=this.current(),d=null,e=a-this.relative(c),f=(e>0)-(e<0),g=this._items.length,h=this.minimum(),i=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(e)>g/2&&(e+=-1*f*g),a=c+e,(d=((a-h)%g+g)%g+h)!==a&&d-e<=i&&d-e>0&&(c=d-e,a=d,this.reset(c))):this.settings.rewind?(i+=1,a=(a%i+i)%i):a=Math.max(h,Math.min(i,a)),this.speed(this.duration(c,a,b)),this.current(a),this.$element.is(":visible")&&this.update()},e.prototype.next=function(a){a=a||!1,this.to(this.relative(this.current())+1,a)},e.prototype.prev=function(a){a=a||!1,this.to(this.relative(this.current())-1,a)},e.prototype.onTransitionEnd=function(a){if(a!==d&&(a.stopPropagation(),(a.target||a.srcElement||a.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},e.prototype.viewport=function(){var d;return this.options.responsiveBaseElement!==b?d=a(this.options.responsiveBaseElement).width():b.innerWidth?d=b.innerWidth:c.documentElement&&c.documentElement.clientWidth?d=c.documentElement.clientWidth:console.warn("Can not detect viewport width."),d},e.prototype.replace=function(b){this.$stage.empty(),this._items=[],b&&(b=b instanceof jQuery?b:a(b)),this.settings.nestedItemSelector&&(b=b.find("."+this.settings.nestedItemSelector)),b.filter(function(){return 1===this.nodeType}).each(a.proxy(function(a,b){b=this.prepare(b),this.$stage.append(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)},this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},e.prototype.add=function(b,c){var e=this.relative(this._current);c=c===d?this._items.length:this.normalize(c,!0),b=b instanceof jQuery?b:a(b),this.trigger("add",{content:b,position:c}),b=this.prepare(b),0===this._items.length||c===this._items.length?(0===this._items.length&&this.$stage.append(b),0!==this._items.length&&this._items[c-1].after(b),this._items.push(b),this._mergers.push(1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[c].before(b),this._items.splice(c,0,b),this._mergers.splice(c,0,1*b.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[e]&&this.reset(this._items[e].index()),this.invalidate("items"),this.trigger("added",{content:b,position:c})},e.prototype.remove=function(a){(a=this.normalize(a,!0))!==d&&(this.trigger("remove",{content:this._items[a],position:a}),this._items[a].remove(),this._items.splice(a,1),this._mergers.splice(a,1),this.invalidate("items"),this.trigger("removed",{content:null,position:a}))},e.prototype.preloadAutoWidthImages=function(b){b.each(a.proxy(function(b,c){this.enter("pre-loading"),c=a(c),a(new Image).one("load",a.proxy(function(a){c.attr("src",a.target.src),c.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()},this)).attr("src",c.attr("src")||c.attr("data-src")||c.attr("data-src-retina"))},this))},e.prototype.destroy=function(){this.$element.off(".owl.core"),this.$stage.off(".owl.core"),a(c).off(".owl.core"),!1!==this.settings.responsive&&(b.clearTimeout(this.resizeTimer),this.off(b,"resize",this._handlers.onThrottledResize));for(var d in this._plugins)this._plugins[d].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$stage.remove(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},e.prototype.op=function(a,b,c){var d=this.settings.rtl;switch(b){case"<":return d?a>c:a":return d?ac;case">=":return d?a<=c:a>=c;case"<=":return d?a>=c:a<=c}},e.prototype.on=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},e.prototype.off=function(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)},e.prototype.trigger=function(b,c,d,f,g){var h={item:{count:this._items.length,index:this.current()}},i=a.camelCase(a.grep(["on",b,d],function(a){return a}).join("-").toLowerCase()),j=a.Event([b,"owl",d||"carousel"].join(".").toLowerCase(),a.extend({relatedTarget:this},h,c));return this._supress[b]||(a.each(this._plugins,function(a,b){b.onTrigger&&b.onTrigger(j)}),this.register({type:e.Type.Event,name:b}),this.$element.trigger(j),this.settings&&"function"==typeof this.settings[i]&&this.settings[i].call(this,j)),j},e.prototype.enter=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]===d&&(this._states.current[b]=0),this._states.current[b]++},this))},e.prototype.leave=function(b){a.each([b].concat(this._states.tags[b]||[]),a.proxy(function(a,b){this._states.current[b]--},this))},e.prototype.register=function(b){if(b.type===e.Type.Event){if(a.event.special[b.name]||(a.event.special[b.name]={}),!a.event.special[b.name].owl){var c=a.event.special[b.name]._default;a.event.special[b.name]._default=function(a){return!c||!c.apply||a.namespace&&-1!==a.namespace.indexOf("owl")?a.namespace&&a.namespace.indexOf("owl")>-1:c.apply(this,arguments)},a.event.special[b.name].owl=!0}}else b.type===e.Type.State&&(this._states.tags[b.name]?this._states.tags[b.name]=this._states.tags[b.name].concat(b.tags):this._states.tags[b.name]=b.tags,this._states.tags[b.name]=a.grep(this._states.tags[b.name],a.proxy(function(c,d){return a.inArray(c,this._states.tags[b.name])===d},this)))},e.prototype.suppress=function(b){a.each(b,a.proxy(function(a,b){this._supress[b]=!0},this))},e.prototype.release=function(b){a.each(b,a.proxy(function(a,b){delete this._supress[b]},this))},e.prototype.pointer=function(a){var c={x:null,y:null};return a=a.originalEvent||a||b.event,a=a.touches&&a.touches.length?a.touches[0]:a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:a,a.pageX?(c.x=a.pageX,c.y=a.pageY):(c.x=a.clientX,c.y=a.clientY),c},e.prototype.isNumeric=function(a){return!isNaN(parseFloat(a))},e.prototype.difference=function(a,b){return{x:a.x-b.x,y:a.y-b.y}},a.fn.owlCarousel=function(b){var c=Array.prototype.slice.call(arguments,1);return this.each(function(){var d=a(this),f=d.data("owl.carousel");f||(f=new e(this,"object"==typeof b&&b),d.data("owl.carousel",f),a.each(["next","prev","to","destroy","refresh","replace","add","remove"],function(b,c){f.register({type:e.Type.Event,name:c}),f.$element.on(c+".owl.carousel.core",a.proxy(function(a){a.namespace&&a.relatedTarget!==this&&(this.suppress([c]),f[c].apply(this,[].slice.call(arguments,1)),this.release([c]))},f))})),"string"==typeof b&&"_"!==b.charAt(0)&&f[b].apply(f,c)})},a.fn.owlCarousel.Constructor=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoRefresh&&this.watch()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoRefresh:!0,autoRefreshInterval:500},e.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=b.setInterval(a.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},e.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},e.prototype.destroy=function(){var a,c;b.clearInterval(this._interval);for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoRefresh=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":a.proxy(function(b){if(b.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(b.property&&"position"==b.property.name||"initialized"==b.type))for(var c=this._core.settings,e=c.center&&Math.ceil(c.items/2)||c.items,f=c.center&&-1*e||0,g=(b.property&&b.property.value!==d?b.property.value:this._core.current())+f,h=this._core.clones().length,i=a.proxy(function(a,b){this.load(b)},this);f++-1||(e.each(a.proxy(function(c,d){var e,f=a(d),g=b.devicePixelRatio>1&&f.attr("data-src-retina")||f.attr("data-src");this._core.trigger("load",{element:f,url:g},"lazy"),f.is("img")?f.one("load.owl.lazy",a.proxy(function(){f.css("opacity",1),this._core.trigger("loaded",{element:f,url:g},"lazy")},this)).attr("src",g):(e=new Image,e.onload=a.proxy(function(){f.css({"background-image":'url("'+g+'")',opacity:"1"}),this._core.trigger("loaded",{element:f,url:g},"lazy")},this),e.src=g)},this)),this._loaded.push(d.get(0)))},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this._core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Lazy=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&this.update()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&"position"==a.property.name&&this.update()},this),"loaded.owl.lazy":a.proxy(function(a){a.namespace&&this._core.settings.autoHeight&&a.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};e.Defaults={autoHeight:!1,autoHeightClass:"owl-height"},e.prototype.update=function(){var b=this._core._current,c=b+this._core.settings.items,d=this._core.$stage.children().toArray().slice(b,c),e=[],f=0;a.each(d,function(b,c){e.push(a(c).height())}),f=Math.max.apply(null,e),this._core.$stage.parent().height(f).addClass(this._core.settings.autoHeightClass)},e.prototype.destroy=function(){var a,b;for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.AutoHeight=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})},this),"resize.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.video&&this.isInFullScreen()&&a.preventDefault()},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .owl-video-frame").remove()},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"===a.property.name&&this._playing&&this.stop()},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find(".owl-video");c.length&&(c.css("display","none"),this.fetch(c,a(b.content)))}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".owl-video-play-icon",a.proxy(function(a){this.play(a)},this))};e.Defaults={video:!1,videoHeight:!1,videoWidth:!1},e.prototype.fetch=function(a,b){var c=function(){return a.attr("data-vimeo-id")?"vimeo":a.attr("data-vzaar-id")?"vzaar":"youtube"}(),d=a.attr("data-vimeo-id")||a.attr("data-youtube-id")||a.attr("data-vzaar-id"),e=a.attr("data-width")||this._core.settings.videoWidth,f=a.attr("data-height")||this._core.settings.videoHeight,g=a.attr("href");if(!g)throw new Error("Missing video URL.");if(d=g.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/),d[3].indexOf("youtu")>-1)c="youtube";else if(d[3].indexOf("vimeo")>-1)c="vimeo";else{if(!(d[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");c="vzaar"}d=d[6],this._videos[g]={type:c,id:d,width:e,height:f},b.attr("data-video",g),this.thumbnail(a,this._videos[g])},e.prototype.thumbnail=function(b,c){var d,e,f,g=c.width&&c.height?'style="width:'+c.width+"px;height:"+c.height+'px;"':"",h=b.find("img"),i="src",j="",k=this._core.settings,l=function(a){e='
',d=k.lazyLoad?'
':'
',b.after(d),b.after(e)};if(b.wrap('
"),this._core.settings.lazyLoad&&(i="data-src",j="owl-lazy"),h.length)return l(h.attr(i)),h.remove(),!1;"youtube"===c.type?(f="//img.youtube.com/vi/"+c.id+"/hqdefault.jpg",l(f)):"vimeo"===c.type?a.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a[0].thumbnail_large,l(f)}}):"vzaar"===c.type&&a.ajax({type:"GET",url:"//vzaar.com/api/videos/"+c.id+".json",jsonp:"callback",dataType:"jsonp",success:function(a){f=a.framegrab_url,l(f)}})},e.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".owl-video-frame").remove(),this._playing.removeClass("owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},e.prototype.play=function(b){var c,d=a(b.target),e=d.closest("."+this._core.settings.itemClass),f=this._videos[e.attr("data-video")],g=f.width||"100%",h=f.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),e=this._core.items(this._core.relative(e.index())),this._core.reset(e.index()),"youtube"===f.type?c='':"vimeo"===f.type?c='':"vzaar"===f.type&&(c=''),a('
'+c+"
").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]) +;for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._call=null,this._time=0,this._timeout=0,this._paused=!0,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._paused&&(this._time=0)},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype._next=function(d){this._call=b.setTimeout(a.proxy(this._next,this,d),this._timeout*(Math.round(this.read()/this._timeout)+1)-this.read()),this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(d||this._core.settings.autoplaySpeed)},e.prototype.read=function(){return(new Date).getTime()-this._time},e.prototype.play=function(c,d){var e;this._core.is("rotating")||this._core.enter("rotating"),c=c||this._core.settings.autoplayTimeout,e=Math.min(this._time%(this._timeout||c),c),this._paused?(this._time=this.read(),this._paused=!1):b.clearTimeout(this._call),this._time+=this.read()%c-e,this._timeout=c,this._call=b.setTimeout(a.proxy(this._next,this,d),c-e)},e.prototype.stop=function(){this._core.is("rotating")&&(this._time=0,this._paused=!0,b.clearTimeout(this._call),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&!this._paused&&(this._time=this.read(),this._paused=!0,b.clearTimeout(this._call))},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
'+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:['',''],navSpeed:!1,navElement:'button role="presentation"',navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("