$(document).ready(function() {
'use strict';
$('body').addClass('js-enabled');
// =====================
// Koenig Gallery
// =====================
var gallery_images = document.querySelectorAll('.kg-gallery-image img');
gallery_images.forEach(function (image) {
var container = image.closest('.kg-gallery-image');
var width = image.attributes.width.value;
var height = image.attributes.height.value;
var ratio = width / height;
container.style.flex = ratio + ' 1 0%';
});
// =====================
// Decode HTML entities returned by Ghost translations
// Input: Plus d'articles
// Output: Plus d'articles
// =====================
function decoding_translation_chars(string) {
return $('<textarea/>').html(string).text();
}
// =====================
// Off Canvas menu
// =====================
$('.js-off-canvas-toggle').click(function(e) {
e.preventDefault();
$('.js-off-canvas-content, .js-off-canvas-container').toggleClass('is-active');
});
// =====================
// Post Card Images Fade
// =====================
$('.js-fadein').viewportChecker({
classToAdd: 'is-inview', // Class to add to the elements when they are visible
offset: 100,
removeClassAfterAnimation: true
});
// =====================
// Responsive videos
// =====================
$('.c-content').fitVids({
'customSelector': [ 'iframe[src*="ted.com"]' ,
'iframe[src*="player.twitch.tv"]' ,
'iframe[src*="dailymotion.com"]' ,
'iframe[src*="facebook.com"]'
]
});
// =====================
// Images zoom
// =====================
$('.c-post img').attr('data-action', 'zoom');
// If the image is inside a link, remove zoom
$('.c-post a img').removeAttr('data-action');
// =====================
// Clipboard URL Copy
// =====================
var clipboard = new ClipboardJS('.c-share__link--clipboard');
clipboard.on('success', function(e) {
var element = $(e.trigger);
element.addClass('tooltipped tooltipped-s');
element.attr('aria-label', clipboard_copied_text);
element.mouseleave(function() {
$(this).removeAttr('aria-label');
$(this).removeClass('tooltipped tooltipped-s');
});
});
// =====================
// Search
// =====================
var search_field = $('.js-search-input'),
search_results = $('.js-search-results'),
toggle_search = $('.js-search-toggle'),
search_result_template = "\
<a href={{link}} class='c-search-result'>\
<div class='c-search-result__content'>\
<h3 class='c-search-result__title'>{{title}}</h3>\
<time class='c-search-result__date'>{{pubDate}}</time>\
</div>\
<div class='c-search-result__media'>\
<div class='c-search-result__image is-inview' style='background-image: url({{featureImage}})'></div>\
</div>\
</a>";
toggle_search.click(function(e) {
e.preventDefault();
$('.js-search').addClass('is-active');
// If off-canvas is active, just disable it
$('.js-off-canvas-container').removeClass('is-active');
setTimeout(function() {
search_field.focus();
}, 500);
});
$('.c-search, .js-search-close, .js-search-close .icon').on('click keyup', function(event) {
if (event.target == this || event.target.className == 'js-search-close' || event.target.className == 'icon' || event.keyCode == 27) {
$('.c-search').removeClass('is-active');
}
});
search_field.ghostHunter({
results: search_results,
onKeyUp : true,
result_template : search_result_template,
zeroResultsInfo : false,
includepages : true,
+ onPageLoad: false,
displaySearchInfo: false,
before: function() {
search_results.fadeIn();
}
});
// =====================
// Ajax Load More
// =====================
var pagination_next_url = $('link[rel=next]').attr('href'),
$load_posts_button = $('.js-load-posts');
$load_posts_button.click(function(e) {
e.preventDefault();
var request_next_link =
pagination_next_url.split(/page/)[0] +
'page/' +
pagination_next_page_number +
'/';
$.ajax({
url: request_next_link,
beforeSend: function() {
$load_posts_button.text(decoding_translation_chars(pagination_loading_text));
$load_posts_button.addClass('c-btn--loading');
}
}).done(function(data) {
var posts = $('.js-post-card-wrap', data);
$('.js-grid').append(posts);
$('.js-fadein').viewportChecker({
classToAdd: 'is-inview', // Class to add to the elements when they are visible
offset: 100,
removeClassAfterAnimation: true
});
$load_posts_button.text(decoding_translation_chars(pagination_more_posts_text));
$load_posts_button.removeClass('c-btn--loading');
pagination_next_page_number++;
// If you are on the last pagination page, hide the load more button
if (pagination_next_page_number > pagination_available_pages_number) {
$load_posts_button.addClass('c-btn--disabled').attr('disabled', true);
}
});
});
});
/**
* ghostHunter - 0.4.0
* Copyright (C) 2014 Jamal Neufeld (jamal@i11u.me)
* MIT Licensed
* @license
**/
(function( $ ) {
//This is the main plugin definition
$.fn.ghostHunter = function( options ) {
//Here we use jQuery's extend to set default values if they weren't set by the user
var opts = $.extend( {}, $.fn.ghostHunter.defaults, options );
if ( opts.results )
{
pluginMethods.init( this , opts );
return pluginMethods;
}
};
$.fn.ghostHunter.defaults = {
resultsData : false,
onPageLoad : true,
onKeyUp : false,
result_template : "<a href='{{link}}'><p><h2>{{title}}</h2><h4>{{prettyPubDate}}</h4></p></a>",
info_template : "<p>Number of posts found: {{amount}}</p>",
displaySearchInfo : true,
zeroResultsInfo : true,
before : false,
onComplete : false,
includepages : false,
filterfields : false
};
var prettyDate = function(date) {
var d = new Date(date);
var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
return d.getDate() + '.' + monthNames[d.getMonth()].substr(0, 3) + '.' + d.getFullYear();
};
var pluginMethods = {
isInit : false,
init : function( target , opts ){
var that = this;
this.target = target;
this.results = opts.results;
this.blogData = {};
this.result_template = opts.result_template;
this.info_template = opts.info_template;
this.zeroResultsInfo = opts.zeroResultsInfo;
this.displaySearchInfo = opts.displaySearchInfo;
this.before = opts.before;
this.onComplete = opts.onComplete;
this.includepages = opts.includepages;
this.filterfields = opts.filterfields;
//This is where we'll build the index for later searching. It's not a big deal to build it on every load as it takes almost no space without data
this.index = lunr(function () {
this.use(lunr.multiLanguage('en', 'ru', 'fr', 'de', 'es', 'pt', 'it', 'fi', 'du', 'da'))
this.field('title', {boost: 10})
this.field('description')
this.field('link')
- // this.field('plaintext', {boost: 5})
this.field('pubDate')
this.field('tag')
this.ref('id')
});
if ( opts.onPageLoad ) {
function miam () {
that.loadAPI();
}
window.setTimeout(miam, 1);
} else {
target.focus(function(){
that.loadAPI();
});
}
target.closest("form").submit(function(e){
e.preventDefault();
that.find(target.val());
});
if( opts.onKeyUp ) {
target.keyup(function() {
that.find(target.val());
});
}
},
loadAPI : function() {
if(this.isInit) return false;
/*
Here we load all of the blog posts to the index.
This function will not call on load to avoid unnecessary heavy
operations on a page if a visitor never ends up searching anything.
*/
var index = this.index,
blogData = this.blogData;
var url = "/ghost/api/v2/content/posts/?key=" + search_api_key + "&limit=all&formats=plaintext";
// TODO, add pages to the query
if ( this.includepages ) {
// url += "&filter=page:true"
}
$.get(url).done(function(data) {
searchData = data.posts;
searchData.forEach(function(arrayItem) {
var parsedData = {
id: String(arrayItem.id),
title: String(arrayItem.title),
description: String(arrayItem.meta_description),
- // plaintext: String(arrayItem.plaintext),
pubDate: String(arrayItem.created_at),
featureImage: String(arrayItem.feature_image),
link: String(arrayItem.url)
}
parsedData.prettyPubDate = prettyDate(parsedData.pubDate);
var tempdate = prettyDate(parsedData.pubDate);
index.add(parsedData)
blogData[arrayItem.id] = {title: arrayItem.title, description: arrayItem.meta_description, pubDate: tempdate, link: arrayItem.url, featureImage: arrayItem.feature_image};
});
});
this.isInit = true;
},
find: function(value) {
var searchResult = this.index.search(value);
var results = $(this.results);
var resultsData = [];
results.empty();
if(this.before) {
this.before();
};
if(this.zeroResultsInfo || searchResult.length > 0) {
if(this.displaySearchInfo) results.append(this.format(this.info_template,{"amount":searchResult.length}));
}
for (var i = 0; i < searchResult.length; i++) {
var lunrref = searchResult[i].ref;
var postData = this.blogData[lunrref];
results.append(this.format(this.result_template,postData));
resultsData.push(postData);
}
if(this.onComplete) {
this.onComplete(resultsData);
};
},
clear : function() {
$(this.results).empty();
this.target.val("");
},
format : function (t, d) {
return t.replace(/{{([^{}]*)}}/g, function (a, b) {
var r = d[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
});
}
}
})( jQuery );