chore(static): update js assets for eslint

This commit is contained in:
ppoffice 2019-12-26 00:41:50 -05:00
parent 02d1996215
commit dfccd95d49
9 changed files with 203 additions and 179 deletions

View File

@ -22,6 +22,14 @@ module.exports = class extends Migration {
delete result.meta; delete result.meta;
delete result.rss; delete result.rss;
if (result.logo === '/images/logo.svg') {
result.logo = result.logo.replace(/^\/images/, '/img');
}
if (result.head.favicon === '/img/favicon.svg') {
result.head.favicon = result.head.favicon.replace(/^\/images/, '/img');
}
if (result.search && Object.prototype.hasOwnProperty.call(result.search, 'type')) { if (result.search && Object.prototype.hasOwnProperty.call(result.search, 'type')) {
switch (result.search.type) { switch (result.search.type) {
case 'google-cse': case 'google-cse':

View File

@ -9,7 +9,7 @@ class OutdatedBrowser extends Component {
outdatedBrowser({ outdatedBrowser({
bgColor: '#f25648', bgColor: '#f25648',
color: '#ffffff', color: '#ffffff',
lowerThan: 'flex' lowerThan: 'object-fit' // display on IE11 or below
}); });
});`; });`;

View File

@ -49,7 +49,6 @@ module.exports = cacheComponent(RecentPosts, 'widget.recentposts', props => {
date: date(post.date), date: date(post.date),
dateXml: date_xml(post.date), dateXml: date_xml(post.date),
thumbnail: thumbnail ? get_thumbnail(post) : null, thumbnail: thumbnail ? get_thumbnail(post) : null,
// TODO: check if categories work
categories: post.categories.map(category => ({ categories: post.categories.map(category => ({
name: category.name, name: category.name,
url: url_for(category.path) url: url_for(category.path)

8
source/js/.eslintrc.json Normal file
View File

@ -0,0 +1,8 @@
{
"extends": "../../.eslintrc.json",
"env": {
"browser": true,
"jquery": true,
"node": false
}
}

View File

@ -1,35 +1,35 @@
(function () { (function() {
function $() { function $() {
return Array.prototype.slice.call(document.querySelectorAll.apply(document, arguments)); return Array.prototype.slice.call(document.querySelectorAll.apply(document, arguments));
} }
$('body > .navbar, body > .section, body > .footer').forEach(function (element) { $('body > .navbar, body > .section, body > .footer').forEach(element => {
element.style.transition = '0s'; element.style.transition = '0s';
element.style.opacity = '0'; element.style.opacity = '0';
}); });
document.querySelector('body > .navbar').style.transform = 'translateY(-100px)'; document.querySelector('body > .navbar').style.transform = 'translateY(-100px)';
['.column-main > .card', ['.column-main > .card',
'.column-left > .card, .column-right-shadow > .card', '.column-left > .card, .column-right-shadow > .card',
'.column-right > .card'].map(function (selector) { '.column-right > .card'].forEach(selector => {
$(selector).forEach(function (element) { $(selector).forEach(element => {
element.style.transition = '0s'; element.style.transition = '0s';
element.style.opacity = '0'; element.style.opacity = '0';
element.style.transform = 'scale(0.8)'; element.style.transform = 'scale(0.8)';
element.style.transformOrigin = 'center top'; element.style.transformOrigin = 'center top';
}); });
}); });
setTimeout(function () { setTimeout(() => {
$('body > .navbar, body > .section, body > .footer').forEach(function (element) { $('body > .navbar, body > .section, body > .footer').forEach(element => {
element.style.opacity = '1'; element.style.opacity = '1';
element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out'; element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out';
}); });
document.querySelector('body > .navbar').style.transform = 'translateY(0)'; document.querySelector('body > .navbar').style.transform = 'translateY(0)';
['.column-main > .card', ['.column-main > .card',
'.column-left > .card, .column-right-shadow > .card', '.column-left > .card, .column-right-shadow > .card',
'.column-right > .card'].map(function (selector) { '.column-right > .card'].forEach(selector => {
var i = 1; let i = 1;
$(selector).forEach(function (element) { $(selector).forEach(element => {
setTimeout(function () { setTimeout(() => {
element.style.opacity = '1'; element.style.opacity = '1';
element.style.transform = ''; element.style.transform = '';
element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out'; element.style.transition = 'opacity 0.3s ease-out, transform 0.3s ease-out';
@ -38,4 +38,4 @@
}); });
}); });
}); });
})(); }());

View File

@ -1,14 +1,14 @@
$(document).ready(function () { $(document).ready(() => {
var $button = $('#back-to-top'); const $button = $('#back-to-top');
var $footer = $('footer.footer'); const $footer = $('footer.footer');
var $mainColumn = $('.column-main'); const $mainColumn = $('.column-main');
var $leftSidebar = $('.column-left'); const $leftSidebar = $('.column-left');
var $rightSidebar = $('.column-right'); const $rightSidebar = $('.column-right');
var lastScrollTop = 0; let lastScrollTop = 0;
var rightMargin = 20; const rightMargin = 20;
var bottomMargin = 20; const bottomMargin = 20;
var lastState = null; let lastState = null;
var state = { const state = {
base: { base: {
classname: 'card has-text-centered', classname: 'card has-text-centered',
left: '', left: '',
@ -18,10 +18,10 @@ $(document).ready(function () {
} }
}; };
state['desktop-hidden'] = Object.assign({}, state.base, { state['desktop-hidden'] = Object.assign({}, state.base, {
classname: state.base.classname + ' rise-up', classname: state.base.classname + ' rise-up'
}); });
state['desktop-visible'] = Object.assign({}, state['desktop-hidden'], { state['desktop-visible'] = Object.assign({}, state['desktop-hidden'], {
classname: state['desktop-hidden'].classname + ' fade-in', classname: state['desktop-hidden'].classname + ' fade-in'
}); });
state['desktop-dock'] = Object.assign({}, state['desktop-visible'], { state['desktop-dock'] = Object.assign({}, state['desktop-visible'], {
classname: state['desktop-visible'].classname + ' fade-in', classname: state['desktop-visible'].classname + ' fade-in',
@ -33,21 +33,15 @@ $(document).ready(function () {
right: rightMargin right: rightMargin
}); });
state['mobile-visible'] = Object.assign({}, state['mobile-hidden'], { state['mobile-visible'] = Object.assign({}, state['mobile-hidden'], {
classname: state['mobile-hidden'].classname + ' rise-up', classname: state['mobile-hidden'].classname + ' rise-up'
}); });
function isStateEquals(prev, next) { function isStateEquals(prev, next) {
for (var prop in prev) { return ![].concat(Object.keys(prev), Object.keys(next)).some(key => {
if (!next.hasOwnProperty(prop) || next[prop] !== prev[prop]) { return !Object.prototype.hasOwnProperty.call(prev, key)
return false; || !Object.prototype.hasOwnProperty.call(next, key)
} || next[key] !== prev[key];
} });
for (var prop in next) {
if (!prev.hasOwnProperty(prop) || prev[prop] !== prev[prop]) {
return false;
}
}
return true;
} }
function applyState(state) { function applyState(state) {
@ -55,7 +49,7 @@ $(document).ready(function () {
return; return;
} }
$button.attr('class', state.classname); $button.attr('class', state.classname);
for (let prop in state) { for (const prop in state) {
if (prop === 'classname') { if (prop === 'classname') {
continue; continue;
} }
@ -88,7 +82,7 @@ $(document).ready(function () {
if (!hasRightSidebar()) { if (!hasRightSidebar()) {
return 0; return 0;
} }
return Math.max.apply(null, $rightSidebar.find('.widget').map(function () { return Math.max.apply(null, $rightSidebar.find('.widget').map(function() {
return $(this).offset().top + $(this).outerHeight(true); return $(this).offset().top + $(this).outerHeight(true);
})); }));
} }
@ -116,11 +110,11 @@ $(document).ready(function () {
function update() { function update() {
// desktop mode or tablet mode with only right sidebar enabled // desktop mode or tablet mode with only right sidebar enabled
if (isDesktop() || (isTablet() && !hasLeftSidebar() && hasRightSidebar())) { if (isDesktop() || (isTablet() && !hasLeftSidebar() && hasRightSidebar())) {
var nextState; let nextState;
var padding = ($mainColumn.outerWidth() - $mainColumn.width()) / 2; const padding = ($mainColumn.outerWidth() - $mainColumn.width()) / 2;
var maxLeft = $(window).width() - getButtonWidth() - rightMargin; const maxLeft = $(window).width() - getButtonWidth() - rightMargin;
var maxBottom = $footer.offset().top + getButtonHeight() / 2 + bottomMargin; const maxBottom = $footer.offset().top + (getButtonHeight() / 2) + bottomMargin;
if (getScrollTop() == 0 || getScrollBottom() < getRightSidebarBottom() + padding + getButtonHeight()) { if (getScrollTop() === 0 || getScrollBottom() < getRightSidebarBottom() + padding + getButtonHeight()) {
nextState = state['desktop-hidden']; nextState = state['desktop-hidden'];
} else if (getScrollBottom() < maxBottom) { } else if (getScrollBottom() < maxBottom) {
nextState = state['desktop-visible']; nextState = state['desktop-visible'];
@ -130,7 +124,7 @@ $(document).ready(function () {
}); });
} }
var left = $mainColumn.offset().left + $mainColumn.outerWidth() + padding; const left = $mainColumn.offset().left + $mainColumn.outerWidth() + padding;
nextState = Object.assign({}, nextState, { nextState = Object.assign({}, nextState, {
left: Math.min(left, maxLeft) left: Math.min(left, maxLeft)
}); });
@ -150,7 +144,7 @@ $(document).ready(function () {
$(window).resize(update); $(window).resize(update);
$(window).scroll(update); $(window).scroll(update);
$('#back-to-top').on('click', function () { $('#back-to-top').on('click', () => {
$('body, html').animate({ scrollTop: 0 }, 400); $('body, html').animate({ scrollTop: 0 }, 400);
}); });
}); });

View File

@ -1,11 +1,11 @@
document.addEventListener('DOMContentLoaded', function () { document.addEventListener('DOMContentLoaded', () => {
if (typeof ($.fn.lightGallery) === 'function') { if (typeof $.fn.lightGallery === 'function') {
$('.article').lightGallery({ selector: '.gallery-item' }); $('.article').lightGallery({ selector: '.gallery-item' });
} }
if (typeof ($.fn.justifiedGallery) === 'function') { if (typeof $.fn.justifiedGallery === 'function') {
if ($('.justified-gallery > p > .gallery-item').length) { if ($('.justified-gallery > p > .gallery-item').length) {
$('.justified-gallery > p > .gallery-item').unwrap(); $('.justified-gallery > p > .gallery-item').unwrap();
} }
$('.justified-gallery').justifiedGallery(); $('.justified-gallery').justifiedGallery();
} }
}); });

View File

@ -2,44 +2,43 @@
* Insight search plugin * Insight search plugin
* @author PPOffice { @link https://github.com/ppoffice } * @author PPOffice { @link https://github.com/ppoffice }
*/ */
(function ($, CONFIG) { (function($, CONFIG) {
var $main = $('.ins-search'); const $main = $('.ins-search');
var $input = $main.find('.ins-search-input'); const $input = $main.find('.ins-search-input');
var $wrapper = $main.find('.ins-section-wrapper'); const $wrapper = $main.find('.ins-section-wrapper');
var $container = $main.find('.ins-section-container'); const $container = $main.find('.ins-section-container');
$main.parent().remove('.ins-search'); $main.parent().remove('.ins-search');
$('body').append($main); $('body').append($main);
function section (title) { function section(title) {
return $('<section>').addClass('ins-section') return $('<section>').addClass('ins-section')
.append($('<header>').addClass('ins-section-header').text(title)); .append($('<header>').addClass('ins-section-header').text(title));
} }
function searchItem (icon, title, slug, preview, url) { function searchItem(icon, title, slug, preview, url) {
return $('<div>').addClass('ins-selectable').addClass('ins-search-item') return $('<div>').addClass('ins-selectable').addClass('ins-search-item')
.append($('<header>').append($('<i>').addClass('fa').addClass('fa-' + icon)) .append($('<header>').append($('<i>').addClass('fa').addClass('fa-' + icon))
.append($('<span>').addClass('ins-title').text(title != null && title !== '' ? title : CONFIG.TRANSLATION['UNTITLED'])) .append($('<span>').addClass('ins-title').text(title != null && title !== '' ? title : CONFIG.TRANSLATION.UNTITLED))
.append(slug ? $('<span>').addClass('ins-slug').text(slug) : null)) .append(slug ? $('<span>').addClass('ins-slug').text(slug) : null))
.append(preview ? $('<p>').addClass('ins-search-preview').text(preview) : null) .append(preview ? $('<p>').addClass('ins-search-preview').text(preview) : null)
.attr('data-url', url); .attr('data-url', url);
} }
function sectionFactory (type, array) { function sectionFactory(type, array) {
var sectionTitle; let $searchItems;
var $searchItems;
if (array.length === 0) return null; if (array.length === 0) return null;
sectionTitle = CONFIG.TRANSLATION[type]; const sectionTitle = CONFIG.TRANSLATION[type];
switch (type) { switch (type) {
case 'POSTS': case 'POSTS':
case 'PAGES': case 'PAGES':
$searchItems = array.map(function (item) { $searchItems = array.map(item => {
// Use config.root instead of permalink to fix url issue // Use config.root instead of permalink to fix url issue
return searchItem('file', item.title, null, item.text.slice(0, 150), item.link); return searchItem('file', item.title, null, item.text.slice(0, 150), item.link);
}); });
break; break;
case 'CATEGORIES': case 'CATEGORIES':
case 'TAGS': case 'TAGS':
$searchItems = array.map(function (item) { $searchItems = array.map(item => {
return searchItem(type === 'CATEGORIES' ? 'folder' : 'tag', item.name, item.slug, null, item.link); return searchItem(type === 'CATEGORIES' ? 'folder' : 'tag', item.name, item.slug, null, item.link);
}); });
break; break;
@ -49,10 +48,10 @@
return section(sectionTitle).append($searchItems); return section(sectionTitle).append($searchItems);
} }
function parseKeywords (keywords) { function parseKeywords(keywords) {
return keywords.split(' ').filter(function (keyword) { return keywords.split(' ').filter(keyword => {
return !!keyword; return !!keyword;
}).map(function (keyword) { }).map(keyword => {
return keyword.toUpperCase(); return keyword.toUpperCase();
}); });
} }
@ -62,34 +61,38 @@
* @param Object obj Object to be weighted * @param Object obj Object to be weighted
* @param Array<String> fields Object's fields to find matches * @param Array<String> fields Object's fields to find matches
*/ */
function filter (keywords, obj, fields) { function filter(keywords, obj, fields) {
var keywordArray = parseKeywords(keywords); const keywordArray = parseKeywords(keywords);
var containKeywords = keywordArray.filter(function (keyword) { const containKeywords = keywordArray.filter(keyword => {
var containFields = fields.filter(function (field) { const containFields = fields.filter(field => {
if (!obj.hasOwnProperty(field)) if (!Object.prototype.hasOwnProperty.call(obj, field)) {
return false; return false;
if (obj[field].toUpperCase().indexOf(keyword) > -1) }
if (obj[field].toUpperCase().indexOf(keyword) > -1) {
return true; return true;
}
return false;
}); });
if (containFields.length > 0) if (containFields.length > 0) {
return true; return true;
}
return false; return false;
}); });
return containKeywords.length === keywordArray.length; return containKeywords.length === keywordArray.length;
} }
function filterFactory (keywords) { function filterFactory(keywords) {
return { return {
POST: function (obj) { post: function(obj) {
return filter(keywords, obj, ['title', 'text']); return filter(keywords, obj, ['title', 'text']);
}, },
PAGE: function (obj) { page: function(obj) {
return filter(keywords, obj, ['title', 'text']); return filter(keywords, obj, ['title', 'text']);
}, },
CATEGORY: function (obj) { category: function(obj) {
return filter(keywords, obj, ['name', 'slug']); return filter(keywords, obj, ['name', 'slug']);
}, },
TAG: function (obj) { tag: function(obj) {
return filter(keywords, obj, ['name', 'slug']); return filter(keywords, obj, ['name', 'slug']);
} }
}; };
@ -101,13 +104,13 @@
* @param Array<String> fields Object's fields to find matches * @param Array<String> fields Object's fields to find matches
* @param Array<Integer> weights Weight of every field * @param Array<Integer> weights Weight of every field
*/ */
function weight (keywords, obj, fields, weights) { function weight(keywords, obj, fields, weights) {
var value = 0; let value = 0;
parseKeywords(keywords).forEach(function (keyword) { parseKeywords(keywords).forEach(keyword => {
var pattern = new RegExp(keyword, 'img'); // Global, Multi-line, Case-insensitive const pattern = new RegExp(keyword, 'img'); // Global, Multi-line, Case-insensitive
fields.forEach(function (field, index) { fields.forEach((field, index) => {
if (obj.hasOwnProperty(field)) { if (Object.prototype.hasOwnProperty.call(obj, field)) {
var matches = obj[field].match(pattern); const matches = obj[field].match(pattern);
value += matches ? matches.length * weights[index] : 0; value += matches ? matches.length * weights[index] : 0;
} }
}); });
@ -115,50 +118,50 @@
return value; return value;
} }
function weightFactory (keywords) { function weightFactory(keywords) {
return { return {
POST: function (obj) { post: function(obj) {
return weight(keywords, obj, ['title', 'text'], [3, 1]); return weight(keywords, obj, ['title', 'text'], [3, 1]);
}, },
PAGE: function (obj) { page: function(obj) {
return weight(keywords, obj, ['title', 'text'], [3, 1]); return weight(keywords, obj, ['title', 'text'], [3, 1]);
}, },
CATEGORY: function (obj) { category: function(obj) {
return weight(keywords, obj, ['name', 'slug'], [1, 1]); return weight(keywords, obj, ['name', 'slug'], [1, 1]);
}, },
TAG: function (obj) { tag: function(obj) {
return weight(keywords, obj, ['name', 'slug'], [1, 1]); return weight(keywords, obj, ['name', 'slug'], [1, 1]);
} }
}; };
} }
function search (json, keywords) { function search(json, keywords) {
var WEIGHTS = weightFactory(keywords); const weights = weightFactory(keywords);
var FILTERS = filterFactory(keywords); const filters = filterFactory(keywords);
var posts = json.posts; const posts = json.posts;
var pages = json.pages; const pages = json.pages;
var tags = json.tags; const tags = json.tags;
var categories = json.categories; const categories = json.categories;
return { return {
posts: posts.filter(FILTERS.POST).sort(function (a, b) { return WEIGHTS.POST(b) - WEIGHTS.POST(a); }).slice(0, 5), posts: posts.filter(filters.post).sort((a, b) => { return weights.post(b) - weights.post(a); }).slice(0, 5),
pages: pages.filter(FILTERS.PAGE).sort(function (a, b) { return WEIGHTS.PAGE(b) - WEIGHTS.PAGE(a); }).slice(0, 5), pages: pages.filter(filters.page).sort((a, b) => { return weights.page(b) - weights.page(a); }).slice(0, 5),
categories: categories.filter(FILTERS.CATEGORY).sort(function (a, b) { return WEIGHTS.CATEGORY(b) - WEIGHTS.CATEGORY(a); }).slice(0, 5), categories: categories.filter(filters.category).sort((a, b) => { return weights.category(b) - weights.category(a); }).slice(0, 5),
tags: tags.filter(FILTERS.TAG).sort(function (a, b) { return WEIGHTS.TAG(b) - WEIGHTS.TAG(a); }).slice(0, 5) tags: tags.filter(filters.tag).sort((a, b) => { return weights.tag(b) - weights.tag(a); }).slice(0, 5)
}; };
} }
function searchResultToDOM (searchResult) { function searchResultToDOM(searchResult) {
$container.empty(); $container.empty();
for (var key in searchResult) { for (const key in searchResult) {
$container.append(sectionFactory(key.toUpperCase(), searchResult[key])); $container.append(sectionFactory(key.toUpperCase(), searchResult[key]));
} }
} }
function scrollTo ($item) { function scrollTo($item) {
if ($item.length === 0) return; if ($item.length === 0) return;
var wrapperHeight = $wrapper[0].clientHeight; const wrapperHeight = $wrapper[0].clientHeight;
var itemTop = $item.position().top - $wrapper.scrollTop(); const itemTop = $item.position().top - $wrapper.scrollTop();
var itemBottom = $item[0].clientHeight + $item.position().top; const itemBottom = $item[0].clientHeight + $item.position().top;
if (itemBottom > wrapperHeight + $wrapper.scrollTop()) { if (itemBottom > wrapperHeight + $wrapper.scrollTop()) {
$wrapper.scrollTop(itemBottom - $wrapper[0].clientHeight); $wrapper.scrollTop(itemBottom - $wrapper[0].clientHeight);
} }
@ -167,59 +170,59 @@
} }
} }
function selectItemByDiff (value) { function selectItemByDiff(value) {
var $items = $.makeArray($container.find('.ins-selectable')); const $items = $.makeArray($container.find('.ins-selectable'));
var prevPosition = -1; let prevPosition = -1;
$items.forEach(function (item, index) { $items.forEach((item, index) => {
if ($(item).hasClass('active')) { if ($(item).hasClass('active')) {
prevPosition = index; prevPosition = index;
return;
} }
}); });
var nextPosition = ($items.length + prevPosition + value) % $items.length; const nextPosition = ($items.length + prevPosition + value) % $items.length;
$($items[prevPosition]).removeClass('active'); $($items[prevPosition]).removeClass('active');
$($items[nextPosition]).addClass('active'); $($items[nextPosition]).addClass('active');
scrollTo($($items[nextPosition])); scrollTo($($items[nextPosition]));
} }
function gotoLink ($item) { function gotoLink($item) {
if ($item && $item.length) { if ($item && $item.length) {
location.href = $item.attr('data-url'); location.href = $item.attr('data-url');
} }
} }
$.getJSON(CONFIG.CONTENT_URL, function (json) { $.getJSON(CONFIG.CONTENT_URL, json => {
if (location.hash.trim() === '#ins-search') { if (location.hash.trim() === '#ins-search') {
$main.addClass('show'); $main.addClass('show');
} }
$input.on('input', function () { $input.on('input', function() {
var keywords = $(this).val(); const keywords = $(this).val();
searchResultToDOM(search(json, keywords)); searchResultToDOM(search(json, keywords));
}); });
$input.trigger('input'); $input.trigger('input');
}); });
var touch = false; let touch = false;
$(document).on('click focus', '.navbar-main .search', function () { $(document).on('click focus', '.navbar-main .search', () => {
$main.addClass('show'); $main.addClass('show');
$main.find('.ins-search-input').focus(); $main.find('.ins-search-input').focus();
}).on('click touchend', '.ins-search-item', function (e) { }).on('click touchend', '.ins-search-item', function(e) {
if (e.type !== 'click' && !touch) { if (e.type !== 'click' && !touch) {
return; return;
} }
gotoLink($(this)); gotoLink($(this));
touch = false; touch = false;
}).on('click touchend', '.ins-close', function (e) { }).on('click touchend', '.ins-close', e => {
if (e.type !== 'click' && !touch) { if (e.type !== 'click' && !touch) {
return; return;
} }
$('.navbar-main').css('pointer-events', 'none'); $('.navbar-main').css('pointer-events', 'none');
setTimeout(function(){ setTimeout(() => {
$('.navbar-main').css('pointer-events', 'auto'); $('.navbar-main').css('pointer-events', 'auto');
}, 400); }, 400);
$main.removeClass('show'); $main.removeClass('show');
touch = false; touch = false;
}).on('keydown', function (e) { }).on('keydown', e => {
if (!$main.hasClass('show')) return; if (!$main.hasClass('show')) return;
switch (e.keyCode) { switch (e.keyCode) {
case 27: // ESC case 27: // ESC
@ -228,12 +231,12 @@
selectItemByDiff(-1); break; selectItemByDiff(-1); break;
case 40: // DOWN case 40: // DOWN
selectItemByDiff(1); break; selectItemByDiff(1); break;
case 13: //ENTER case 13: // ENTER
gotoLink($container.find('.ins-selectable.active').eq(0)); break; gotoLink($container.find('.ins-selectable.active').eq(0)); break;
} }
}).on('touchstart', function (e) { }).on('touchstart', e => {
touch = true; touch = true;
}).on('touchmove', function (e) { }).on('touchmove', e => {
touch = false; touch = false;
}); });
})(jQuery, window.INSIGHT_CONFIG); }(jQuery, window.INSIGHT_CONFIG));

View File

@ -1,7 +1,8 @@
(function ($) { /* eslint-disable node/no-unsupported-features/node-builtins */
(function($, moment, ClipboardJS, config) {
$('.columns .column-right-shadow').append($('.columns .column-right').children().clone()); $('.columns .column-right-shadow').append($('.columns .column-right').children().clone());
$('.article img:not(".not-gallery-item")').each(function () { $('.article img:not(".not-gallery-item")').each(function() {
// wrap images with link and add caption if possible // wrap images with link and add caption if possible
if ($(this).parent('a').length === 0) { if ($(this).parent('a').length === 0) {
$(this).wrap('<a class="gallery-item" href="' + $(this).attr('src') + '"></a>'); $(this).wrap('<a class="gallery-item" href="' + $(this).attr('src') + '"></a>');
@ -11,13 +12,13 @@
} }
}); });
if (typeof (moment) === 'function') { if (typeof moment === 'function') {
$('.article-meta time').each(function () { $('.article-meta time').each(function() {
$(this).text(moment($(this).attr('datetime')).fromNow()); $(this).text(moment($(this).attr('datetime')).fromNow());
}); });
} }
$('.article > .content > table').each(function () { $('.article > .content > table').each(function() {
if ($(this).width() > $(this).parent().width()) { if ($(this).width() > $(this).parent().width()) {
$(this).wrap('<div class="table-overflow"></div>'); $(this).wrap('<div class="table-overflow"></div>');
} }
@ -34,13 +35,24 @@
adjustNavbar(); adjustNavbar();
$(window).resize(adjustNavbar); $(window).resize(adjustNavbar);
function toggleFold(codeBlock, isFolded) {
const $toggle = $(codeBlock).find('.fold i');
!isFolded ? $(codeBlock).removeClass('folded') : $(codeBlock).addClass('folded');
!isFolded ? $toggle.removeClass('fa-angle-right') : $toggle.removeClass('fa-angle-down');
!isFolded ? $toggle.addClass('fa-angle-down') : $toggle.addClass('fa-angle-right');
}
function createFoldButton(fold) {
return '<span class="fold">' + (fold === 'unfolded' ? '<i class="fas fa-angle-down"></i>' : '<i class="fas fa-angle-right"></i>') + '</span>';
}
$('figure.highlight table').wrap('<div class="highlight-body">'); $('figure.highlight table').wrap('<div class="highlight-body">');
if (typeof (IcarusThemeSettings) !== 'undefined' && if (typeof config !== 'undefined'
typeof (IcarusThemeSettings.article) !== 'undefined' && && typeof config.article !== 'undefined'
typeof (IcarusThemeSettings.article.highlight) !== 'undefined') { && typeof config.article.highlight !== 'undefined') {
$('figure.highlight').addClass('hljs'); $('figure.highlight').addClass('hljs');
$('figure.highlight .code .line span').each(function () { $('figure.highlight .code .line span').each(function() {
const classes = $(this).attr('class').split(/\s+/); const classes = $(this).attr('class').split(/\s+/);
if (classes.length === 1) { if (classes.length === 1) {
$(this).addClass('hljs-' + classes[0]); $(this).addClass('hljs-' + classes[0]);
@ -48,10 +60,10 @@
} }
}); });
if (typeof (ClipboardJS) !== 'undefined' && IcarusThemeSettings.article.highlight.clipboard) { if (typeof ClipboardJS !== 'undefined' && config.article.highlight.clipboard) {
$('figure.highlight').each(function () { $('figure.highlight').each(function() {
var id = 'code-' + Date.now() + (Math.random() * 1000 | 0); const id = 'code-' + Date.now() + (Math.random() * 1000 | 0);
var button = '<a href="javascript:;" class="copy" title="Copy" data-clipboard-target="#' + id + ' .code"><i class="fas fa-copy"></i></a>'; const button = '<a href="javascript:;" class="copy" title="Copy" data-clipboard-target="#' + id + ' .code"><i class="fas fa-copy"></i></a>';
$(this).attr('id', id); $(this).attr('id', id);
if ($(this).find('figcaption').length) { if ($(this).find('figcaption').length) {
$(this).find('figcaption').prepend(button); $(this).find('figcaption').prepend(button);
@ -59,44 +71,44 @@
$(this).prepend('<figcaption>' + button + '</figcaption>'); $(this).prepend('<figcaption>' + button + '</figcaption>');
} }
}); });
new ClipboardJS('.highlight .copy'); new ClipboardJS('.highlight .copy'); // eslint-disable-line no-new
} }
var fold = IcarusThemeSettings.article.highlight.fold; const fold = config.article.highlight.fold;
if (fold.trim()) { if (fold.trim()) {
var button = '<span class="fold">' + (fold === 'unfolded' ? '<i class="fas fa-angle-down"></i>' : '<i class="fas fa-angle-right"></i>') + '</span>'; $('figure.highlight').each(function() {
$('figure.highlight').each(function () {
if ($(this).find('figcaption').length) { if ($(this).find('figcaption').length) {
$(this).find('figcaption').prepend(button); // fold individual code block
if ($(this).find('figcaption').find('span').length > 0) {
const span = $(this).find('figcaption').find('span').eq(0);
if (span[0].innerText.indexOf('>folded') > -1) {
span[0].innerText = span[0].innerText.replace('>folded', '');
$(this).find('figcaption').prepend(createFoldButton('folded'));
toggleFold(this, true);
return;
}
}
$(this).find('figcaption').prepend(createFoldButton(fold));
} else { } else {
$(this).prepend('<figcaption>' + button + '</figcaption>'); $(this).prepend('<figcaption>' + createFoldButton(fold) + '</figcaption>');
} }
});
function toggleFold(codeBlock, isFolded) {
var $toggle = $(codeBlock).find('.fold i');
!isFolded ? $(codeBlock).removeClass('folded') : $(codeBlock).addClass('folded');
!isFolded ? $toggle.removeClass('fa-angle-right') : $toggle.removeClass('fa-angle-down');
!isFolded ? $toggle.addClass('fa-angle-down') : $toggle.addClass('fa-angle-right');
}
$('figure.highlight').each(function () {
toggleFold(this, fold === 'folded'); toggleFold(this, fold === 'folded');
}); });
$('figure.highlight figcaption .fold').click(function () {
var $code = $(this).closest('figure.highlight'); $('figure.highlight figcaption .fold').click(function() {
const $code = $(this).closest('figure.highlight');
toggleFold($code.eq(0), !$code.hasClass('folded')); toggleFold($code.eq(0), !$code.hasClass('folded'));
}); });
} }
} }
var $toc = $('#toc'); const $toc = $('#toc');
if ($toc.length > 0) { if ($toc.length > 0) {
var $mask = $('<div>'); const $mask = $('<div>');
$mask.attr('id', 'toc-mask'); $mask.attr('id', 'toc-mask');
$('body').append($mask); $('body').append($mask);
function toggleToc() { function toggleToc() { // eslint-disable-line no-inner-declarations
$toc.toggleClass('is-active'); $toc.toggleClass('is-active');
$mask.toggleClass('is-active'); $mask.toggleClass('is-active');
} }
@ -137,20 +149,20 @@
return false; return false;
} }
if (typeof (IcarusThemeSettings) !== 'undefined' && if (typeof config !== 'undefined'
typeof (IcarusThemeSettings.site.url) !== 'undefined' && && typeof config.site.url !== 'undefined'
typeof (IcarusThemeSettings.site.external_link) !== 'undefined' && && typeof config.site.external_link !== 'undefined'
IcarusThemeSettings.site.external_link.enable) { && config.site.external_link.enable) {
$('.article .content a').filter(function (i, link) { $('.article .content a').filter((i, link) => {
return link.href && return link.href
!$(link).attr('href').startsWith('#') && && !$(link).attr('href').startsWith('#')
link.classList.length === 0 && && link.classList.length === 0
isExternalLink(link.href, && isExternalLink(link.href,
IcarusThemeSettings.site.url, config.site.url,
IcarusThemeSettings.site.external_link.exclude); config.site.external_link.exclude);
}).each(function (i, link) { }).each((i, link) => {
link.relList.add('noopener'); link.relList.add('noopener');
link.target = '_blank'; link.target = '_blank';
}); });
} }
})(jQuery); }(jQuery, window.moment, window.ClipboardJS, window.IcarusThemeSettings));