Improve local datetime display
- Protect author's location privacy - Reduce locale configuration parameters
This commit is contained in:
parent
a24545ed60
commit
a5d38e7fbc
26 changed files with 165 additions and 196 deletions
|
@ -12,6 +12,9 @@ baseurl: ''
|
||||||
# otherwise, the layout language will use the default value of 'en'.
|
# otherwise, the layout language will use the default value of 'en'.
|
||||||
lang: en
|
lang: en
|
||||||
|
|
||||||
|
# Additional parameters for datetime localization, optional. › https://github.com/iamkun/dayjs/tree/dev/src/locale
|
||||||
|
prefer_datetime_locale:
|
||||||
|
|
||||||
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
||||||
timezone: Asia/Shanghai
|
timezone: Asia/Shanghai
|
||||||
|
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: Trending Tags
|
trending_tags: Trending Tags
|
||||||
toc: Contents
|
toc: Contents
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%a, %b %e, %Y, %l:%M %p %z'
|
|
||||||
post:
|
|
||||||
long: '%b %e, %Y'
|
|
||||||
short: '%b %e'
|
|
||||||
archive_month: '%b'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: By
|
written_by: By
|
||||||
posted: Posted
|
posted: Posted
|
||||||
updated: Updated
|
updated: Updated
|
||||||
timeago:
|
|
||||||
day: days ago
|
|
||||||
hour: hours ago
|
|
||||||
minute: minutes ago
|
|
||||||
just_now: just now
|
|
||||||
words: words
|
words: words
|
||||||
pageview_measure: views
|
pageview_measure: views
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: Tagar Terpopuler
|
trending_tags: Tagar Terpopuler
|
||||||
toc: Konten
|
toc: Konten
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: "%a, %e %b, %Y, %l:%M %p"
|
|
||||||
post:
|
|
||||||
long: "%e %b, %Y"
|
|
||||||
short: "%e %b"
|
|
||||||
archive_month: "%b"
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: Oleh
|
written_by: Oleh
|
||||||
posted: Diterbitkan
|
posted: Diterbitkan
|
||||||
updated: Diperbarui
|
updated: Diperbarui
|
||||||
timeago:
|
|
||||||
day: hari yang lalu
|
|
||||||
hour: jam yang lalu
|
|
||||||
minute: menit yang lalu
|
|
||||||
just_now: baru saja
|
|
||||||
words: kata
|
words: kata
|
||||||
pageview_measure: dilihat
|
pageview_measure: dilihat
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: 인기 태그
|
trending_tags: 인기 태그
|
||||||
toc: 바로가기
|
toc: 바로가기
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%F, %R %z'
|
|
||||||
post:
|
|
||||||
long: '%Y년 %m월 %d일'
|
|
||||||
short: '%m월 %d일'
|
|
||||||
archive_month: '%b월'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: By
|
written_by: By
|
||||||
posted: 게시
|
posted: 게시
|
||||||
updated: 업데이트
|
updated: 업데이트
|
||||||
timeago:
|
|
||||||
day: 일 전
|
|
||||||
hour: 시간 전
|
|
||||||
minute: 분 전
|
|
||||||
just_now: 방금
|
|
||||||
words: 단어
|
words: 단어
|
||||||
pageview_measure: 조회
|
pageview_measure: 조회
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: ခေတ်စားနေသည့်တက်ဂ်များ
|
trending_tags: ခေတ်စားနေသည့်တက်ဂ်များ
|
||||||
toc: အကြောင်းအရာများ
|
toc: အကြောင်းအရာများ
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%a, %b %e, %Y, %l:%M %p %z'
|
|
||||||
post:
|
|
||||||
long: '%b %e, %Y'
|
|
||||||
short: '%b %e'
|
|
||||||
archive_month: '%b'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: ကရေးသားခဲ့သည်။
|
written_by: ကရေးသားခဲ့သည်။
|
||||||
posted: တင်ထားခဲ့သည်။
|
posted: တင်ထားခဲ့သည်။
|
||||||
updated: မွမ်းမံထားခဲ့သည်။
|
updated: မွမ်းမံထားခဲ့သည်။
|
||||||
timeago:
|
|
||||||
day: လွန်ခဲ့သော ရက်များတွင်း
|
|
||||||
hour: လွန်ခဲ့သော နာရီပိုင်းတွင်း
|
|
||||||
minute: လွန်ခဲ့သော မိနစ်အနည်းငယ်က
|
|
||||||
just_now: အခုလေးတင်
|
|
||||||
words: စကားလုံးများ
|
words: စကားလုံးများ
|
||||||
pageview_measure: အမြင်များ
|
pageview_measure: အမြင်များ
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: Популярные теги
|
trending_tags: Популярные теги
|
||||||
toc: Содержание
|
toc: Содержание
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%a, %b %e, %Y, %l:%M %p %z'
|
|
||||||
post:
|
|
||||||
long: '%b %e, %Y'
|
|
||||||
short: '%b %e'
|
|
||||||
archive_month: '%b'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: Автор
|
written_by: Автор
|
||||||
posted: Время публикации
|
posted: Время публикации
|
||||||
updated: Обновлено
|
updated: Обновлено
|
||||||
timeago:
|
|
||||||
day: дней назад
|
|
||||||
hour: часов назад
|
|
||||||
minute: минут назад
|
|
||||||
just_now: только что
|
|
||||||
words: слов
|
words: слов
|
||||||
pageview_measure: просмотров
|
pageview_measure: просмотров
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: Популярні теги
|
trending_tags: Популярні теги
|
||||||
toc: Зміст
|
toc: Зміст
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%a, %b %e, %Y, %l:%M %p %z'
|
|
||||||
post:
|
|
||||||
long: '%b %e, %Y'
|
|
||||||
short: '%b %e'
|
|
||||||
archive_month: '%b'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -62,11 +54,6 @@ post:
|
||||||
written_by: Автор
|
written_by: Автор
|
||||||
posted: Час публікації
|
posted: Час публікації
|
||||||
updated: Оновлено
|
updated: Оновлено
|
||||||
timeago:
|
|
||||||
day: днів тому
|
|
||||||
hour: годин тому
|
|
||||||
minute: хвилин тому
|
|
||||||
just_now: щойно
|
|
||||||
words: слів
|
words: слів
|
||||||
pageview_measure: переглядів
|
pageview_measure: переглядів
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -27,14 +27,6 @@ panel:
|
||||||
trending_tags: 热门标签
|
trending_tags: 热门标签
|
||||||
toc: 文章内容
|
toc: 文章内容
|
||||||
|
|
||||||
# The liquid date format › http://strftime.net/
|
|
||||||
date_format:
|
|
||||||
tooltip: '%F, %R %z'
|
|
||||||
post:
|
|
||||||
long: '%F'
|
|
||||||
short: '%m-%d'
|
|
||||||
archive_month: '%m月'
|
|
||||||
|
|
||||||
copyright:
|
copyright:
|
||||||
# Shown at the bottom of the post
|
# Shown at the bottom of the post
|
||||||
license:
|
license:
|
||||||
|
@ -61,11 +53,6 @@ post:
|
||||||
written_by: 作者
|
written_by: 作者
|
||||||
posted: 发表于
|
posted: 发表于
|
||||||
updated: 更新于
|
updated: 更新于
|
||||||
timeago:
|
|
||||||
day: 天前
|
|
||||||
hour: 小时前
|
|
||||||
minute: 分钟前
|
|
||||||
just_now: 刚刚
|
|
||||||
words: 字
|
words: 字
|
||||||
pageview_measure: 次浏览
|
pageview_measure: 次浏览
|
||||||
read_time:
|
read_time:
|
||||||
|
|
|
@ -6,13 +6,12 @@
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
|
||||||
{% if page.layout == 'home' or page.layout == 'post' %}
|
<!-- Allow having a localized datetime different from the appearance language -->
|
||||||
|
{% if site.prefer_datetime_locale %}
|
||||||
|
<meta name="prefer-datetime-locale" content="{{ site.prefer_datetime_locale }}">
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- i18n for `_javascript/utils/timeago.js` -->
|
{% if page.layout == 'home' or page.layout == 'post' %}
|
||||||
<meta name="day-prompt" content="{{ site.data.locales[lang].post.timeago.day }}">
|
|
||||||
<meta name="hour-prompt" content="{{ site.data.locales[lang].post.timeago.hour }}">
|
|
||||||
<meta name="minute-prompt" content="{{ site.data.locales[lang].post.timeago.minute }}">
|
|
||||||
<meta name="justnow-prompt" content="{{ site.data.locales[lang].post.timeago.just_now }}">
|
|
||||||
|
|
||||||
{% if site.google_analytics.pv.proxy_endpoint %}
|
{% if site.google_analytics.pv.proxy_endpoint %}
|
||||||
<meta name="pv-proxy-endpoint" content="{{ site.google_analytics.pv.proxy_endpoint }}">
|
<meta name="pv-proxy-endpoint" content="{{ site.google_analytics.pv.proxy_endpoint }}">
|
||||||
|
|
|
@ -17,11 +17,30 @@
|
||||||
<script src="https://cdn.jsdelivr.net/combine/npm/lozad/dist/lozad.min.js,npm/magnific-popup@1/dist/jquery.magnific-popup.min.js,npm/clipboard@2/dist/clipboard.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/combine/npm/lozad/dist/lozad.min.js,npm/magnific-popup@1/dist/jquery.magnific-popup.min.js,npm/clipboard@2/dist/clipboard.min.js"></script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if page.layout == 'home'
|
||||||
|
or page.layout == 'post'
|
||||||
|
or page.layout == 'archives'
|
||||||
|
or page.layout == 'category'
|
||||||
|
or page.layout == 'tag' %}
|
||||||
|
|
||||||
|
{% if site.prefer_datetime_locale %}
|
||||||
|
{% assign locale = site.prefer_datetime_locale | downcase %}
|
||||||
|
{% else %}
|
||||||
|
{% assign locale = site.lang | split: '-' | first %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<script src="https://cdn.jsdelivr.net/combine/npm/dayjs@1,npm/dayjs@1/locale/{{ locale }}.min.js,npm/dayjs@1/plugin/relativeTime.min.js,npm/dayjs@1/plugin/localizedFormat.min.js"></script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if page.layout == 'home'
|
{% if page.layout == 'home'
|
||||||
or page.layout == 'categories'
|
or page.layout == 'categories'
|
||||||
or page.layout == 'post'
|
or page.layout == 'post'
|
||||||
or page.layout == 'page' %}
|
or page.layout == 'page' %}
|
||||||
{% assign type = page.layout %}
|
{% assign type = page.layout %}
|
||||||
|
{% elsif page.layout == 'archives'
|
||||||
|
or page.layout == 'category'
|
||||||
|
or page.layout == 'tag' %}
|
||||||
|
{% assign type = "misc" %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% assign type = "commons" %}
|
{% assign type = "commons" %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
{% comment %}
|
|
||||||
Remove the zero padding from a month/day string
|
|
||||||
{% endcomment %}
|
|
||||||
|
|
||||||
{% assign ret = include.date_str %}
|
|
||||||
{% assign _first_chat = ret | slice: 0 %}
|
|
||||||
|
|
||||||
{% if _first_chat == '0' %}
|
|
||||||
{% assign _last_idx = ret.size | minus: 1 %}
|
|
||||||
{% assign ret = ret | slice: 1, _last_idx %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{{ ret | replace: ' 0', ' ' }}
|
|
|
@ -3,24 +3,13 @@
|
||||||
See: ${JS_ROOT}/utils/timeago.js
|
See: ${JS_ROOT}/utils/timeago.js
|
||||||
-->
|
-->
|
||||||
|
|
||||||
{% assign tooltip_df = site.data.locales[lang].date_format.tooltip %}
|
|
||||||
{% assign post_long_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
{% assign post_short_df = site.data.locales[lang].date_format.post.short %}
|
|
||||||
|
|
||||||
<em class="timeago{% if include.class %} {{ include.class }}{% endif %}"
|
<em class="timeago{% if include.class %} {{ include.class }}{% endif %}"
|
||||||
date="{{ include.date | date_to_xmlschema }}"
|
data-ts="{{ include.date | date: '%s' }}"
|
||||||
{% if include.tooltip %}
|
{% if include.tooltip %}
|
||||||
data-toggle="tooltip"
|
data-toggle="tooltip" data-placement="bottom" data-tooltip-df="llll"
|
||||||
data-placement="bottom"
|
{% endif %}
|
||||||
title="{{ include.date | date: tooltip_df }}"
|
{% if include.capitalize %}
|
||||||
|
data-capitalize="true"
|
||||||
{% endif %}>
|
{% endif %}>
|
||||||
|
{{ include.date | date: '%Y-%m-%d' }}
|
||||||
{%- assign this_year = site.time | date: "%Y" -%}
|
|
||||||
{%- assign post_year = include.date | date: "%Y" -%}
|
|
||||||
|
|
||||||
{%- if post_year == this_year -%}
|
|
||||||
{{ include.date | date: post_short_df }}
|
|
||||||
{%- else -%}
|
|
||||||
{{ include.date | date: post_long_df }}
|
|
||||||
{%- endif -%}
|
|
||||||
</em>
|
</em>
|
||||||
|
|
19
_javascript/commons/locale-helper.js
Normal file
19
_javascript/commons/locale-helper.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/**
|
||||||
|
* A tool for locale datetime
|
||||||
|
*/
|
||||||
|
|
||||||
|
const LocaleHelper = (function () {
|
||||||
|
const $preferLocale = $('meta[name="prefer-datetime-locale"]');
|
||||||
|
const locale = $preferLocale.length > 0 ?
|
||||||
|
$preferLocale.attr('content').toLowerCase() : $('html').attr('lang').substr(0, 2);
|
||||||
|
const attrTimestamp = 'data-ts';
|
||||||
|
const attrDateFormat = 'data-df';
|
||||||
|
|
||||||
|
return {
|
||||||
|
locale: () => locale,
|
||||||
|
attrTimestamp: () => attrTimestamp,
|
||||||
|
attrDateFormat: () => attrDateFormat,
|
||||||
|
getTimestamp: ($elem) => Number($elem.attr(attrTimestamp)), // unix timestamp
|
||||||
|
getDateFormat: ($elem) => $elem.attr(attrDateFormat)
|
||||||
|
};
|
||||||
|
}());
|
20
_javascript/utils/locale-datetime.js
Normal file
20
_javascript/utils/locale-datetime.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
/**
|
||||||
|
* Update month/day to locale datetime
|
||||||
|
*
|
||||||
|
* Requirement: <https://github.com/iamkun/dayjs>
|
||||||
|
*/
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
dayjs.locale(LocaleHelper.locale());
|
||||||
|
dayjs.extend(window.dayjs_plugin_localizedFormat);
|
||||||
|
|
||||||
|
$(`[${LocaleHelper.attrTimestamp()}]`).each(function () {
|
||||||
|
const date = dayjs.unix(LocaleHelper.getTimestamp($(this)));
|
||||||
|
const df = LocaleHelper.getDateFormat($(this));
|
||||||
|
const text = date.format(df);
|
||||||
|
|
||||||
|
$(this).text(text);
|
||||||
|
$(this).removeAttr(LocaleHelper.attrTimestamp());
|
||||||
|
$(this).removeAttr(LocaleHelper.attrDateFormat());
|
||||||
|
});
|
||||||
|
});
|
|
@ -1,77 +1,87 @@
|
||||||
/*
|
/**
|
||||||
* Calculate the Timeago
|
* Calculate the Timeago
|
||||||
|
*
|
||||||
|
* Requirement: <https://github.com/iamkun/dayjs>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
const timeagoElem = $(".timeago");
|
const attrTimestamp = LocaleHelper.attrTimestamp();
|
||||||
let tasks = timeagoElem.length;
|
const attrCapitalize = 'data-capitalize';
|
||||||
|
const $timeago = $(".timeago");
|
||||||
|
|
||||||
|
let timeagoTasks = $timeago.length;
|
||||||
let intervalId = void 0;
|
let intervalId = void 0;
|
||||||
|
|
||||||
const dPrompt = $("meta[name=day-prompt]").attr("content");
|
dayjs.locale(LocaleHelper.locale());
|
||||||
const hrPrompt = $("meta[name=hour-prompt]").attr("content");
|
dayjs.extend(window.dayjs_plugin_relativeTime);
|
||||||
const minPrompt = $("meta[name=minute-prompt]").attr("content");
|
dayjs.extend(window.dayjs_plugin_localizedFormat);
|
||||||
const justnowPrompt = $("meta[name=justnow-prompt]").attr("content");
|
|
||||||
|
|
||||||
function timeago(date, initDate) {
|
function relativetime($elem) {
|
||||||
let now = new Date();
|
const now = dayjs();
|
||||||
let past = new Date(date);
|
const past = dayjs.unix(LocaleHelper.getTimestamp($elem));
|
||||||
|
|
||||||
if (past.getFullYear() !== now.getFullYear()
|
let diffMonth = now.diff(past, 'month', true);
|
||||||
|| past.getMonth() !== now.getMonth()) {
|
if (diffMonth > 10) { // year ago range: 11 months to 17months
|
||||||
return initDate;
|
$elem.removeAttr(attrTimestamp);
|
||||||
|
return past.format('ll'); // see: https://day.js.org/docs/en/display/format#list-of-localized-formats
|
||||||
}
|
}
|
||||||
|
|
||||||
let seconds = Math.floor((now - past) / 1000);
|
let diffMinute = now.diff(past, 'minute', true);
|
||||||
|
if (diffMinute > 44) { // an hour ago range: 45 to 89 minutes
|
||||||
let day = Math.floor(seconds / 86400);
|
$elem.removeAttr(attrTimestamp);
|
||||||
if (day >= 1) {
|
|
||||||
return ` ${day} ${dPrompt}`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let hour = Math.floor(seconds / 3600);
|
return past.fromNow();
|
||||||
if (hour >= 1) {
|
|
||||||
return ` ${hour} ${hrPrompt}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
let minute = Math.floor(seconds / 60);
|
|
||||||
if (minute >= 1) {
|
|
||||||
return ` ${minute} ${minPrompt}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
return justnowPrompt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTimeago() {
|
function updateTimeago() {
|
||||||
$(".timeago").each(function() {
|
$timeago.each(function() {
|
||||||
if ($(this)[0].hasAttribute("date") === false) {
|
if (typeof $(this).attr(attrTimestamp) === 'undefined') {
|
||||||
tasks -= 1;
|
timeagoTasks -= 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let date = $(this).attr("date");
|
let relativeTime = relativetime($(this));
|
||||||
let initDate = $(this).text();
|
const capitalize = $(this).attr(attrCapitalize);
|
||||||
let relativeDate = timeago(date, initDate);
|
if (typeof capitalize !== 'undefined' && capitalize === 'true') {
|
||||||
|
relativeTime = relativeTime.replace(/^\w/, (c) => c.toUpperCase());
|
||||||
if (relativeDate === initDate) {
|
|
||||||
$(this).removeAttr("date");
|
|
||||||
} else {
|
|
||||||
$(this).text(relativeDate);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($(this).text() !== relativeTime) {
|
||||||
|
$(this).text(relativeTime);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (tasks === 0 && typeof intervalId !== "undefined") {
|
if (timeagoTasks === 0 && typeof intervalId !== "undefined") {
|
||||||
clearInterval(intervalId); /* stop interval */
|
clearInterval(intervalId); /* stop interval */
|
||||||
}
|
}
|
||||||
return tasks;
|
|
||||||
|
return timeagoTasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tasks === 0) {
|
function setupTooltips() {
|
||||||
|
$timeago.each(function() {
|
||||||
|
const tooltip = $(this).attr('data-toggle');
|
||||||
|
if (typeof tooltip === 'undefined' || tooltip !== 'tooltip') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateTimeago() > 0) { /* run immediately */
|
const df = $(this).attr('data-tooltip-df');
|
||||||
intervalId = setInterval(updateTimeago, 60000); /* run every minute */
|
const ts = LocaleHelper.getTimestamp($(this));
|
||||||
|
const dateStr = dayjs.unix(ts).format(df);
|
||||||
|
$(this).attr('data-original-title', dateStr);
|
||||||
|
$(this).removeAttr('data-tooltip-df');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (timeagoTasks === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setupTooltips();
|
||||||
|
|
||||||
|
if (updateTimeago()) { /* run immediately */
|
||||||
|
intervalId = setInterval(updateTimeago, 60 * 1000); /* run every minute */
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,11 +18,11 @@ layout: page
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li>
|
<li>
|
||||||
<div>
|
<div>
|
||||||
{% capture this_day %}{{ post.date | date: "%d" }}{% endcapture %}
|
{% assign ts = post.date | date: '%s' %}
|
||||||
{% capture _mth_df %}{{ site.data.locales[lang].date_format.post.archive_month }}{% endcapture %}
|
<span class="date day" data-ts="{{ ts }}" data-df="DD">{{ post.date | date: "%d" }}</span>
|
||||||
{% capture this_month %}{{ post.date | date: _mth_df }}{% endcapture %}
|
<span class="date month small text-muted" data-ts="{{ ts }}" data-df="MMM">
|
||||||
<span class="date day">{{ this_day }}</span>
|
{{ post.date | date: '%m' }}
|
||||||
<span class="date month small text-muted">{% include no-zero-date.html date_str=this_month %}</span>
|
</span>
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -13,13 +13,13 @@ layout: page
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<ul class="post-content pl-0">
|
<ul class="post-content pl-0">
|
||||||
{% assign post_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
|
|
||||||
{% for post in page.posts %}
|
{% for post in page.posts %}
|
||||||
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
<span class="dash flex-grow-1"></span>
|
<span class="dash flex-grow-1"></span>
|
||||||
<span class="text-muted small">{{ post.date | date: post_df }}</span>
|
<span class="text-muted small" data-ts="{{ post.date | date: '%s' }}" data-df="ll">
|
||||||
|
{{ post.date | date: '%Y-%m-%d' }}
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -62,7 +62,7 @@ layout: page
|
||||||
<div class="mr-auto">
|
<div class="mr-auto">
|
||||||
<!-- posted date -->
|
<!-- posted date -->
|
||||||
<i class="far fa-calendar fa-fw"></i>
|
<i class="far fa-calendar fa-fw"></i>
|
||||||
{% include timeago.html date=post.date tooltip=true %}
|
{% include timeago.html date=post.date tooltip=true capitalize=true %}
|
||||||
|
|
||||||
<!-- time to read -->
|
<!-- time to read -->
|
||||||
<i class="far fa-clock fa-fw"></i>
|
<i class="far fa-clock fa-fw"></i>
|
||||||
|
|
|
@ -12,13 +12,13 @@ layout: page
|
||||||
<span class="lead text-muted pl-2">{{ page.posts | size }}</span>
|
<span class="lead text-muted pl-2">{{ page.posts | size }}</span>
|
||||||
</h1>
|
</h1>
|
||||||
<ul class="post-content pl-0">
|
<ul class="post-content pl-0">
|
||||||
{% assign post_df = site.data.locales[lang].date_format.post.long %}
|
|
||||||
|
|
||||||
{% for post in page.posts %}
|
{% for post in page.posts %}
|
||||||
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
<li class="d-flex justify-content-between pl-md-3 pr-md-3">
|
||||||
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
<a href="{{ post.url | relative_url }}">{{ post.title }}</a>
|
||||||
<span class="dash flex-grow-1"></span>
|
<span class="dash flex-grow-1"></span>
|
||||||
<span class="text-muted small">{{ post.date | date: post_df }}</span>
|
<span class="text-muted small" data-ts="{{ post.date | date: '%s' }}" data-df="ll">
|
||||||
|
{{ post.date | date: '%Y-%m-%d' }}
|
||||||
|
</span>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
2
assets/js/dist/categories.min.js
vendored
2
assets/js/dist/categories.min.js
vendored
|
@ -3,4 +3,4 @@
|
||||||
* © 2019 Cotes Chung
|
* © 2019 Cotes Chung
|
||||||
* MIT Licensed
|
* MIT Licensed
|
||||||
*/
|
*/
|
||||||
$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(o=>{const e=$(o.target);let t=e.prop("tagName")==="button".toUpperCase()?e:e.parent();t.blur(),flipMode()})});const ScrollHelper=function(){const o=$("body"),e="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let l=0,a=!1,r=!1;return{hideTopbar:()=>o.attr(e,!1),showTopbar:()=>o.attr(e,!0),addScrollUpTask:()=>{l+=1,a=a||!0},popScrollUpTask:()=>--l,hasScrollUpTask:()=>0<l,topbarLocked:()=>!0===a,unlockTopbar:()=>a=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}();$(function(){const o=$("#sidebar-trigger"),e=$("#search-trigger"),t=$("#search-cancel"),l=$("#search-cleaner"),a=$("#main"),r=$("#topbar-title"),s=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),c=$("#search-input"),d=$("#search-hints"),p=function(){let o=0;return{block(){o=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(o)},getOffset(){return o}}}(),f={on(){o.addClass("unloaded"),r.addClass("unloaded"),e.addClass("unloaded"),s.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),s.removeClass("d-flex"),o.removeClass("unloaded"),r.removeClass("unloaded"),e.removeClass("unloaded")}},u=function(){let o=!1;return{on(){o||(p.block(),n.removeClass("unloaded"),a.addClass("unloaded"),o=!0)},off(){o&&(i.empty(),d.hasClass("unloaded")&&d.removeClass("unloaded"),n.addClass("unloaded"),l.removeClass("visible"),a.removeClass("unloaded"),p.release(),c.val(""),o=!1)},isVisible(){return o}}}();function h(){return t.hasClass("loaded")}e.click(function(){f.on(),u.on(),c.focus()}),t.click(function(){f.off(),u.off()}),c.focus(function(){s.addClass("input-focus")}),c.focusout(function(){s.removeClass("input-focus")}),c.on("keyup",function(o){8===o.keyCode&&""===c.val()?h()?d.removeClass("unloaded"):u.off():""!==c.val()&&(u.on(),l.hasClass("visible")||l.addClass("visible"),h()&&d.addClass("unloaded"))}),l.on("click",function(){c.val(""),h()?(d.removeClass("unloaded"),i.empty()):u.off(),c.focus(),l.removeClass("visible")})}),$(function(){var o=function(){const o="sidebar-display";let e=!1;const t=$("body");return{toggle(){!1===e?t.attr(o,""):t.removeAttr(o),e=!e}}}();$("#sidebar-trigger").click(o.toggle),$("#mask").click(o.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const e=$("#search-input"),t=ScrollHelper.getTopbarHeight();let o,l=0;function a(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var o=screen.orientation.type;"landscape-primary"!==o&&"landscape-secondary"!==o||a()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&a()}),$(window).scroll(()=>{o=o||!0}),setInterval(()=>{o&&(function(){var o=$(this).scrollTop();if(!(Math.abs(l-o)<=t)){if(o>l)ScrollHelper.hideTopbar(),e.is(":focus")&&e.blur();else if(o+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}l=o}}(),o=!1)},250)}),$(function(){var e="div.post>h1:first-of-type";const t=$(e),s=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!s.is(":hidden")){const n=s.text().trim();let l=t.text().trim(),a=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(l)&&(l=l.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&s.text(l);let o=new IntersectionObserver(o=>{var e,t;a?(e=$(window).scrollTop(),t=r<e,r=e,o=o[0],t?0===o.intersectionRatio&&s.text(l):1===o.intersectionRatio&&s.text(n)):a=!0},{rootMargin:"-48px 0px 0px 0px",threshold:[0,1]});o.observe(document.querySelector(e)),s.click(function(){$("body,html").animate({scrollTop:0},800)})}}),$(function(){const o=$(".collapse");o.on("hide.bs.collapse",function(){var o="h_"+$(this).attr("id").substring("l_".length);o&&($(`#${o} .far.fa-folder-open`).attr("class","far fa-folder fa-fw"),$(`#${o} i.fas`).addClass("rotate"),$("#"+o).removeClass("hide-border-bottom"))}),o.on("show.bs.collapse",function(){var o="h_"+$(this).attr("id").substring("l_".length);o&&($(`#${o} .far.fa-folder`).attr("class","far fa-folder-open fa-fw"),$(`#${o} i.fas`).removeClass("rotate"),$("#"+o).addClass("hide-border-bottom"))})});
|
$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))});const LocaleHelper=function(){const e=$('meta[name="prefer-datetime-locale"]'),o=0<e.length?e.attr("content").toLowerCase():$("html").attr("lang").substr(0,2),t="data-ts",a="data-df";return{locale:()=>o,attrTimestamp:()=>t,attrDateFormat:()=>a,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(a)}}();$(function(){$(".mode-toggle").click(e=>{const o=$(e.target);let t=o.prop("tagName")==="button".toUpperCase()?o:o.parent();t.blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),o="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(o,!1),showTopbar:()=>e.attr(o,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0<a,topbarLocked:()=>!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}();$(function(){const e=$("#sidebar-trigger"),o=$("#search-trigger"),t=$("#search-cancel"),a=$("#search-cleaner"),l=$("#main"),r=$("#topbar-title"),s=$("#search-wrapper"),n=$("#search-result-wrapper"),i=$("#search-results"),c=$("#search-input"),d=$("#search-hints"),p=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),f={on(){e.addClass("unloaded"),r.addClass("unloaded"),o.addClass("unloaded"),s.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),s.removeClass("d-flex"),e.removeClass("unloaded"),r.removeClass("unloaded"),o.removeClass("unloaded")}},u=function(){let e=!1;return{on(){e||(p.block(),n.removeClass("unloaded"),l.addClass("unloaded"),e=!0)},off(){e&&(i.empty(),d.hasClass("unloaded")&&d.removeClass("unloaded"),n.addClass("unloaded"),a.removeClass("visible"),l.removeClass("unloaded"),p.release(),c.val(""),e=!1)},isVisible(){return e}}}();function h(){return t.hasClass("loaded")}o.click(function(){f.on(),u.on(),c.focus()}),t.click(function(){f.off(),u.off()}),c.focus(function(){s.addClass("input-focus")}),c.focusout(function(){s.removeClass("input-focus")}),c.on("keyup",function(e){8===e.keyCode&&""===c.val()?h()?d.removeClass("unloaded"):u.off():""!==c.val()&&(u.on(),a.hasClass("visible")||a.addClass("visible"),h()&&d.addClass("unloaded"))}),a.on("click",function(){c.val(""),h()?(d.removeClass("unloaded"),i.empty()):u.off(),c.focus(),a.removeClass("visible")})}),$(function(){var e=function(){const e="sidebar-display";let o=!1;const t=$("body");return{toggle(){!1===o?t.attr(e,""):t.removeAttr(e),o=!o}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const o=$("#search-input"),t=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=t)){if(e>a)ScrollHelper.hideTopbar(),o.is(":focus")&&o.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var o="div.post>h1:first-of-type";const t=$(o),s=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!s.is(":hidden")){const n=s.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&s.text(a);let e=new IntersectionObserver(e=>{var o,t;l?(o=$(window).scrollTop(),t=r<o,r=o,e=e[0],t?0===e.intersectionRatio&&s.text(a):1===e.intersectionRatio&&s.text(n)):l=!0},{rootMargin:"-48px 0px 0px 0px",threshold:[0,1]});e.observe(document.querySelector(o)),s.click(function(){$("body,html").animate({scrollTop:0},800)})}}),$(function(){const e=$(".collapse");e.on("hide.bs.collapse",function(){var e="h_"+$(this).attr("id").substring("l_".length);e&&($(`#${e} .far.fa-folder-open`).attr("class","far fa-folder fa-fw"),$(`#${e} i.fas`).addClass("rotate"),$("#"+e).removeClass("hide-border-bottom"))}),e.on("show.bs.collapse",function(){var e="h_"+$(this).attr("id").substring("l_".length);e&&($(`#${e} .far.fa-folder`).attr("class","far fa-folder-open fa-fw"),$(`#${e} i.fas`).removeClass("rotate"),$("#"+e).addClass("hide-border-bottom"))})});
|
2
assets/js/dist/commons.min.js
vendored
2
assets/js/dist/commons.min.js
vendored
|
@ -3,4 +3,4 @@
|
||||||
* © 2019 Cotes Chung
|
* © 2019 Cotes Chung
|
||||||
* MIT Licensed
|
* MIT Licensed
|
||||||
*/
|
*/
|
||||||
$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))}),$(function(){$(".mode-toggle").click(e=>{const o=$(e.target);let t=o.prop("tagName")==="button".toUpperCase()?o:o.parent();t.blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),o="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let l=0,a=!1,r=!1;return{hideTopbar:()=>e.attr(o,!1),showTopbar:()=>e.attr(o,!0),addScrollUpTask:()=>{l+=1,a=a||!0},popScrollUpTask:()=>--l,hasScrollUpTask:()=>0<l,topbarLocked:()=>!0===a,unlockTopbar:()=>a=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}();$(function(){const e=$("#sidebar-trigger"),o=$("#search-trigger"),t=$("#search-cancel"),l=$("#search-cleaner"),a=$("#main"),r=$("#topbar-title"),n=$("#search-wrapper"),s=$("#search-result-wrapper"),i=$("#search-results"),c=$("#search-input"),d=$("#search-hints"),p=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),u={on(){e.addClass("unloaded"),r.addClass("unloaded"),o.addClass("unloaded"),n.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),n.removeClass("d-flex"),e.removeClass("unloaded"),r.removeClass("unloaded"),o.removeClass("unloaded")}},f=function(){let e=!1;return{on(){e||(p.block(),s.removeClass("unloaded"),a.addClass("unloaded"),e=!0)},off(){e&&(i.empty(),d.hasClass("unloaded")&&d.removeClass("unloaded"),s.addClass("unloaded"),l.removeClass("visible"),a.removeClass("unloaded"),p.release(),c.val(""),e=!1)},isVisible(){return e}}}();function h(){return t.hasClass("loaded")}o.click(function(){u.on(),f.on(),c.focus()}),t.click(function(){u.off(),f.off()}),c.focus(function(){n.addClass("input-focus")}),c.focusout(function(){n.removeClass("input-focus")}),c.on("keyup",function(e){8===e.keyCode&&""===c.val()?h()?d.removeClass("unloaded"):f.off():""!==c.val()&&(f.on(),l.hasClass("visible")||l.addClass("visible"),h()&&d.addClass("unloaded"))}),l.on("click",function(){c.val(""),h()?(d.removeClass("unloaded"),i.empty()):f.off(),c.focus(),l.removeClass("visible")})}),$(function(){var e=function(){const e="sidebar-display";let o=!1;const t=$("body");return{toggle(){!1===o?t.attr(e,""):t.removeAttr(e),o=!o}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const o=$("#search-input"),t=ScrollHelper.getTopbarHeight();let e,l=0;function a(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||a()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&a()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(function(){var e=$(this).scrollTop();if(!(Math.abs(l-e)<=t)){if(e>l)ScrollHelper.hideTopbar(),o.is(":focus")&&o.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}l=e}}(),e=!1)},250)}),$(function(){var o="div.post>h1:first-of-type";const t=$(o),n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let l=t.text().trim(),a=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(l)&&(l=l.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(l);let e=new IntersectionObserver(e=>{var o,t;a?(o=$(window).scrollTop(),t=r<o,r=o,e=e[0],t?0===e.intersectionRatio&&n.text(l):1===e.intersectionRatio&&n.text(s)):a=!0},{rootMargin:"-48px 0px 0px 0px",threshold:[0,1]});e.observe(document.querySelector(o)),n.click(function(){$("body,html").animate({scrollTop:0},800)})}});
|
$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))});const LocaleHelper=function(){const e=$('meta[name="prefer-datetime-locale"]'),o=0<e.length?e.attr("content").toLowerCase():$("html").attr("lang").substr(0,2),t="data-ts",a="data-df";return{locale:()=>o,attrTimestamp:()=>t,attrDateFormat:()=>a,getTimestamp:e=>Number(e.attr(t)),getDateFormat:e=>e.attr(a)}}();$(function(){$(".mode-toggle").click(e=>{const o=$(e.target);let t=o.prop("tagName")==="button".toUpperCase()?o:o.parent();t.blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),o="data-topbar-visible",t=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(o,!1),showTopbar:()=>e.attr(o,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0<a,topbarLocked:()=>!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>t,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}();$(function(){const e=$("#sidebar-trigger"),o=$("#search-trigger"),t=$("#search-cancel"),a=$("#search-cleaner"),l=$("#main"),r=$("#topbar-title"),n=$("#search-wrapper"),s=$("#search-result-wrapper"),i=$("#search-results"),c=$("#search-input"),d=$("#search-hints"),p=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),u={on(){e.addClass("unloaded"),r.addClass("unloaded"),o.addClass("unloaded"),n.addClass("d-flex"),t.addClass("loaded")},off(){t.removeClass("loaded"),n.removeClass("d-flex"),e.removeClass("unloaded"),r.removeClass("unloaded"),o.removeClass("unloaded")}},f=function(){let e=!1;return{on(){e||(p.block(),s.removeClass("unloaded"),l.addClass("unloaded"),e=!0)},off(){e&&(i.empty(),d.hasClass("unloaded")&&d.removeClass("unloaded"),s.addClass("unloaded"),a.removeClass("visible"),l.removeClass("unloaded"),p.release(),c.val(""),e=!1)},isVisible(){return e}}}();function h(){return t.hasClass("loaded")}o.click(function(){u.on(),f.on(),c.focus()}),t.click(function(){u.off(),f.off()}),c.focus(function(){n.addClass("input-focus")}),c.focusout(function(){n.removeClass("input-focus")}),c.on("keyup",function(e){8===e.keyCode&&""===c.val()?h()?d.removeClass("unloaded"):f.off():""!==c.val()&&(f.on(),a.hasClass("visible")||a.addClass("visible"),h()&&d.addClass("unloaded"))}),a.on("click",function(){c.val(""),h()?(d.removeClass("unloaded"),i.empty()):f.off(),c.focus(),a.removeClass("visible")})}),$(function(){var e=function(){const e="sidebar-display";let o=!1;const t=$("body");return{toggle(){!1===o?t.attr(e,""):t.removeAttr(e),o=!o}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const o=$("#search-input"),t=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=t)){if(e>a)ScrollHelper.hideTopbar(),o.is(":focus")&&o.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var o="div.post>h1:first-of-type";const t=$(o),n=$("#topbar-title");if(0!==t.length&&!t.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=t.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),t.offset().top<$(window).scrollTop()&&n.text(a);let e=new IntersectionObserver(e=>{var o,t;l?(o=$(window).scrollTop(),t=r<o,r=o,e=e[0],t?0===e.intersectionRatio&&n.text(a):1===e.intersectionRatio&&n.text(s)):l=!0},{rootMargin:"-48px 0px 0px 0px",threshold:[0,1]});e.observe(document.querySelector(o)),n.click(function(){$("body,html").animate({scrollTop:0},800)})}});
|
2
assets/js/dist/home.min.js
vendored
2
assets/js/dist/home.min.js
vendored
File diff suppressed because one or more lines are too long
6
assets/js/dist/misc.min.js
vendored
Normal file
6
assets/js/dist/misc.min.js
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
/*!
|
||||||
|
* Chirpy v5.0.2 (https://github.com/cotes2020/jekyll-theme-chirpy/)
|
||||||
|
* © 2019 Cotes Chung
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
$(function(){$(window).scroll(()=>{50<$(this).scrollTop()&&"none"===$("#sidebar-trigger").css("display")?$("#back-to-top").fadeIn():$("#back-to-top").fadeOut()}),$("#back-to-top").click(()=>($("body,html").animate({scrollTop:0},800),!1))});const LocaleHelper=function(){const e=$('meta[name="prefer-datetime-locale"]'),t=0<e.length?e.attr("content").toLowerCase():$("html").attr("lang").substr(0,2),o="data-ts",a="data-df";return{locale:()=>t,attrTimestamp:()=>o,attrDateFormat:()=>a,getTimestamp:e=>Number(e.attr(o)),getDateFormat:e=>e.attr(a)}}();$(function(){$(".mode-toggle").click(e=>{const t=$(e.target);let o=t.prop("tagName")==="button".toUpperCase()?t:t.parent();o.blur(),flipMode()})});const ScrollHelper=function(){const e=$("body"),t="data-topbar-visible",o=$("#topbar-wrapper").outerHeight();let a=0,l=!1,r=!1;return{hideTopbar:()=>e.attr(t,!1),showTopbar:()=>e.attr(t,!0),addScrollUpTask:()=>{a+=1,l=l||!0},popScrollUpTask:()=>--a,hasScrollUpTask:()=>0<a,topbarLocked:()=>!0===l,unlockTopbar:()=>l=!1,getTopbarHeight:()=>o,orientationLocked:()=>!0===r,lockOrientation:()=>r=!0,unLockOrientation:()=>r=!1}}();$(function(){const e=$("#sidebar-trigger"),t=$("#search-trigger"),o=$("#search-cancel"),a=$("#search-cleaner"),l=$("#main"),r=$("#topbar-title"),n=$("#search-wrapper"),s=$("#search-result-wrapper"),i=$("#search-results"),c=$("#search-input"),d=$("#search-hints"),p=function(){let e=0;return{block(){e=window.scrollY,$("html,body").scrollTop(0)},release(){$("html,body").scrollTop(e)},getOffset(){return e}}}(),u={on(){e.addClass("unloaded"),r.addClass("unloaded"),t.addClass("unloaded"),n.addClass("d-flex"),o.addClass("loaded")},off(){o.removeClass("loaded"),n.removeClass("d-flex"),e.removeClass("unloaded"),r.removeClass("unloaded"),t.removeClass("unloaded")}},f=function(){let e=!1;return{on(){e||(p.block(),s.removeClass("unloaded"),l.addClass("unloaded"),e=!0)},off(){e&&(i.empty(),d.hasClass("unloaded")&&d.removeClass("unloaded"),s.addClass("unloaded"),a.removeClass("visible"),l.removeClass("unloaded"),p.release(),c.val(""),e=!1)},isVisible(){return e}}}();function m(){return o.hasClass("loaded")}t.click(function(){u.on(),f.on(),c.focus()}),o.click(function(){u.off(),f.off()}),c.focus(function(){n.addClass("input-focus")}),c.focusout(function(){n.removeClass("input-focus")}),c.on("keyup",function(e){8===e.keyCode&&""===c.val()?m()?d.removeClass("unloaded"):f.off():""!==c.val()&&(f.on(),a.hasClass("visible")||a.addClass("visible"),m()&&d.addClass("unloaded"))}),a.on("click",function(){c.val(""),m()?(d.removeClass("unloaded"),i.empty()):f.off(),c.focus(),a.removeClass("visible")})}),$(function(){var e=function(){const e="sidebar-display";let t=!1;const o=$("body");return{toggle(){!1===t?o.attr(e,""):o.removeAttr(e),t=!t}}}();$("#sidebar-trigger").click(e.toggle),$("#mask").click(e.toggle)}),$(function(){$('[data-toggle="tooltip"]').tooltip()}),$(function(){const t=$("#search-input"),o=ScrollHelper.getTopbarHeight();let e,a=0;function l(){0!==$(window).scrollTop()&&(ScrollHelper.lockOrientation(),ScrollHelper.hideTopbar())}screen.orientation?screen.orientation.onchange=()=>{var e=screen.orientation.type;"landscape-primary"!==e&&"landscape-secondary"!==e||l()}:$(window).on("orientationchange",()=>{$(window).width()<$(window).height()&&l()}),$(window).scroll(()=>{e=e||!0}),setInterval(()=>{e&&(function(){var e=$(this).scrollTop();if(!(Math.abs(a-e)<=o)){if(e>a)ScrollHelper.hideTopbar(),t.is(":focus")&&t.blur();else if(e+$(window).height()<$(document).height()){if(ScrollHelper.hasScrollUpTask())return;ScrollHelper.topbarLocked()?ScrollHelper.unlockTopbar():ScrollHelper.orientationLocked()?ScrollHelper.unLockOrientation():ScrollHelper.showTopbar()}a=e}}(),e=!1)},250)}),$(function(){var t="div.post>h1:first-of-type";const o=$(t),n=$("#topbar-title");if(0!==o.length&&!o.hasClass("dynamic-title")&&!n.is(":hidden")){const s=n.text().trim();let a=o.text().trim(),l=!1,r=0;($("#page-category").length||$("#page-tag").length)&&/\s/.test(a)&&(a=a.replace(/[0-9]/g,"").trim()),o.offset().top<$(window).scrollTop()&&n.text(a);let e=new IntersectionObserver(e=>{var t,o;l?(t=$(window).scrollTop(),o=r<t,r=t,e=e[0],o?0===e.intersectionRatio&&n.text(a):1===e.intersectionRatio&&n.text(s)):l=!0},{rootMargin:"-48px 0px 0px 0px",threshold:[0,1]});e.observe(document.querySelector(t)),n.click(function(){$("body,html").animate({scrollTop:0},800)})}}),$(function(){dayjs.locale(LocaleHelper.locale()),dayjs.extend(window.dayjs_plugin_localizedFormat),$(`[${LocaleHelper.attrTimestamp()}]`).each(function(){const e=dayjs.unix(LocaleHelper.getTimestamp($(this)));var t=LocaleHelper.getDateFormat($(this)),t=e.format(t);$(this).text(t),$(this).removeAttr(LocaleHelper.attrTimestamp()),$(this).removeAttr(LocaleHelper.attrDateFormat())})});
|
2
assets/js/dist/page.min.js
vendored
2
assets/js/dist/page.min.js
vendored
File diff suppressed because one or more lines are too long
2
assets/js/dist/post.min.js
vendored
2
assets/js/dist/post.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -11,7 +11,7 @@ const insert = require('gulp-insert');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
const JS_SRC = '_javascript';
|
const JS_SRC = '_javascript';
|
||||||
const JS_DEST = `assets/js/dist/`;
|
const JS_DEST = `assets/js/dist`;
|
||||||
|
|
||||||
function concatJs(files, output) {
|
function concatJs(files, output) {
|
||||||
return src(files)
|
return src(files)
|
||||||
|
@ -72,12 +72,21 @@ const pageJs = () => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const miscJs = () => {
|
||||||
|
return concatJs([
|
||||||
|
`${JS_SRC}/commons/*.js`,
|
||||||
|
`${JS_SRC}/utils/locale-datetime.js`
|
||||||
|
], 'misc'
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
// GA pageviews report
|
// GA pageviews report
|
||||||
const pvreportJs = () => {
|
const pvreportJs = () => {
|
||||||
return concatJs(`${JS_SRC}/utils/pageviews.js`, 'pvreport');
|
return concatJs(`${JS_SRC}/utils/pageviews.js`, 'pvreport');
|
||||||
};
|
};
|
||||||
|
|
||||||
const buildJs = parallel(commonsJs, homeJs, postJs, categoriesJs, pageJs, pvreportJs);
|
const buildJs = parallel(
|
||||||
|
commonsJs, homeJs, postJs, categoriesJs, pageJs, miscJs, pvreportJs);
|
||||||
|
|
||||||
exports.build = series(buildJs, minifyJs);
|
exports.build = series(buildJs, minifyJs);
|
||||||
|
|
||||||
|
@ -86,8 +95,7 @@ exports.liveRebuild = () => {
|
||||||
|
|
||||||
watch([
|
watch([
|
||||||
`${ JS_SRC }/commons/*.js`,
|
`${ JS_SRC }/commons/*.js`,
|
||||||
`${ JS_SRC }/utils/*.js`,
|
`${ JS_SRC }/utils/*.js`
|
||||||
`${ JS_SRC }/lib/*.js`
|
|
||||||
],
|
],
|
||||||
buildJs
|
buildJs
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue