2025-2-26-fixed
This commit is contained in:
18
themes/next/layout/_scripts/index.swig
Normal file
18
themes/next/layout/_scripts/index.swig
Normal file
@ -0,0 +1,18 @@
|
||||
{% include 'vendors.swig' %}
|
||||
|
||||
{{- next_js('utils.js') }}
|
||||
{%- if theme.motion.enable %}
|
||||
{{- next_js('motion.js') }}
|
||||
{%- endif %}
|
||||
|
||||
{%- set scheme_script = 'schemes/' + theme.scheme | lower + '.swig' %}
|
||||
{% include scheme_script %}
|
||||
|
||||
{{- next_js('next-boot.js') }}
|
||||
{%- if theme.bookmark.enable %}
|
||||
{{- next_js('bookmark.js') }}
|
||||
{%- endif %}
|
||||
{%- if theme.pjax %}
|
||||
{% include 'pjax.swig' %}
|
||||
{%- endif %}
|
||||
{% include 'three.swig' %}
|
||||
22
themes/next/layout/_scripts/noscript.swig
Normal file
22
themes/next/layout/_scripts/noscript.swig
Normal file
@ -0,0 +1,22 @@
|
||||
<noscript>
|
||||
<style>
|
||||
.use-motion .brand,
|
||||
.use-motion .menu-item,
|
||||
.sidebar-inner,
|
||||
.use-motion .post-block,
|
||||
.use-motion .pagination,
|
||||
.use-motion .comments,
|
||||
.use-motion .post-header,
|
||||
.use-motion .post-body,
|
||||
.use-motion .collection-header { opacity: initial; }
|
||||
|
||||
.use-motion .site-title,
|
||||
.use-motion .site-subtitle {
|
||||
opacity: initial;
|
||||
top: initial;
|
||||
}
|
||||
|
||||
.use-motion .logo-line-before i { left: initial; }
|
||||
.use-motion .logo-line-after i { right: initial; }
|
||||
</style>
|
||||
</noscript>
|
||||
154
themes/next/layout/_scripts/pages/schedule.swig
Normal file
154
themes/next/layout/_scripts/pages/schedule.swig
Normal file
@ -0,0 +1,154 @@
|
||||
<script{{ pjax }}>
|
||||
(function() {
|
||||
// Initialization
|
||||
var calendar = {
|
||||
orderBy : 'startTime',
|
||||
showLocation: false,
|
||||
offsetMax : 72,
|
||||
offsetMin : 4,
|
||||
showDeleted : false,
|
||||
singleEvents: true,
|
||||
maxResults : 250
|
||||
};
|
||||
|
||||
// Read config form theme config file
|
||||
Object.assign(calendar, {{ theme.calendar | json }});
|
||||
|
||||
var now = new Date();
|
||||
var timeMax = new Date();
|
||||
var timeMin = new Date();
|
||||
|
||||
timeMax.setHours(now.getHours() + calendar.offsetMax);
|
||||
timeMin.setHours(now.getHours() - calendar.offsetMin);
|
||||
|
||||
// Build URL
|
||||
const params = {
|
||||
key : calendar.api_key,
|
||||
orderBy : calendar.orderBy,
|
||||
timeMax : timeMax.toISOString(),
|
||||
timeMin : timeMin.toISOString(),
|
||||
showDeleted : calendar.showDeleted,
|
||||
singleEvents: calendar.singleEvents,
|
||||
maxResults : calendar.maxResults
|
||||
};
|
||||
|
||||
var request_url = 'https://www.googleapis.com/calendar/v3/calendars/' + calendar.calendar_id + '/events?' + Object.entries(params).map(([key, value]) => `${key}=${encodeURIComponent(value)}`).join('&');
|
||||
|
||||
fetchData();
|
||||
var fetchDataTimer = setInterval(fetchData, 60000);
|
||||
window.addEventListener('pjax:send', () => {
|
||||
clearInterval(fetchDataTimer);
|
||||
});
|
||||
|
||||
function fetchData() {
|
||||
var eventList = document.querySelector('.event-list');
|
||||
if (!eventList) return;
|
||||
|
||||
fetch(request_url).then(response => {
|
||||
return response.json();
|
||||
}).then(data => {
|
||||
if (data.items.length === 0) {
|
||||
eventList.innerHTML = '<hr>';
|
||||
return;
|
||||
}
|
||||
// Clean the event list
|
||||
eventList.innerHTML = '';
|
||||
var prevEnd = 0; // used to decide where to insert an <hr>
|
||||
|
||||
data.items.forEach(event => {
|
||||
// Parse data
|
||||
var utc = new Date().getTimezoneOffset() * 60000;
|
||||
var start = event.start.dateTime = new Date(event.start.dateTime || (new Date(event.start.date).getTime() + utc));
|
||||
var end = event.end.dateTime = new Date(event.end.dateTime || (new Date(event.end.date).getTime() + utc));
|
||||
|
||||
tense = judgeTense(now, start, end); // 0:now 1:future -1:past
|
||||
|
||||
if (tense === 1 && prevEnd < now) {
|
||||
eventList.innerHTML += '<hr>';
|
||||
}
|
||||
|
||||
eventDOM = buildEventDOM(tense, event);
|
||||
eventList.innerHTML += eventDOM;
|
||||
|
||||
prevEnd = end;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getRelativeTime(current, previous) {
|
||||
var msPerMinute = 60 * 1000;
|
||||
var msPerHour = msPerMinute * 60;
|
||||
var msPerDay = msPerHour * 24;
|
||||
var msPerMonth = msPerDay * 30;
|
||||
var msPerYear = msPerDay * 365;
|
||||
|
||||
var elapsed = current - previous;
|
||||
var tense = elapsed > 0 ? 'ago' : 'later';
|
||||
|
||||
elapsed = Math.abs(elapsed);
|
||||
|
||||
if ( elapsed < msPerHour ) {
|
||||
return Math.round(elapsed / msPerMinute) + ' minutes ' + tense;
|
||||
}
|
||||
else if ( elapsed < msPerDay ) {
|
||||
return Math.round(elapsed / msPerHour) + ' hours ' + tense;
|
||||
}
|
||||
else if ( elapsed < msPerMonth ) {
|
||||
return 'about ' + Math.round(elapsed / msPerDay) + ' days ' + tense;
|
||||
}
|
||||
else if ( elapsed < msPerYear ) {
|
||||
return 'about ' + Math.round(elapsed / msPerMonth) + ' months ' + tense;
|
||||
}
|
||||
else {
|
||||
return 'about' + Math.round(elapsed / msPerYear) + ' years' + tense;
|
||||
}
|
||||
}
|
||||
|
||||
function judgeTense(now, eventStart, eventEnd) {
|
||||
if (eventEnd < now) { return -1; }
|
||||
else if (eventStart > now) { return 1; }
|
||||
else { return 0; }
|
||||
}
|
||||
|
||||
function buildEventDOM(tense, event) {
|
||||
var tenseClass = '';
|
||||
var start = event.start.dateTime;
|
||||
var end = event.end.dateTime;
|
||||
switch(tense) {
|
||||
case 0 : // now
|
||||
tenseClass = 'event-now';
|
||||
break;
|
||||
case 1 : // future
|
||||
tenseClass = 'event-future';
|
||||
break;
|
||||
case -1: // past
|
||||
tenseClass = 'event-past';
|
||||
break;
|
||||
default:
|
||||
throw 'Time data error';
|
||||
}
|
||||
var durationFormat = {
|
||||
weekday: 'short',
|
||||
hour : '2-digit',
|
||||
minute : '2-digit'
|
||||
};
|
||||
var relativeTimeStr = (tense === 0) ? 'NOW' : getRelativeTime(now, start);
|
||||
var durationStr = start.toLocaleTimeString([], durationFormat) + ' - ' + end.toLocaleTimeString([], durationFormat);
|
||||
|
||||
var locationDOM = '';
|
||||
if (calendar.showLocation && event.location) {
|
||||
locationDOM = '<span class="event-location event-details">' + event.location + '</span>';
|
||||
}
|
||||
|
||||
var eventContent = `<div class="event ${tenseClass}">
|
||||
<h2 class="event-summary">
|
||||
${event.summary}
|
||||
<span class="event-relative-time">${relativeTimeStr}</span>
|
||||
</h2>
|
||||
${locationDOM}
|
||||
<span class="event-duration event-details">${durationStr}</span>
|
||||
</div>`;
|
||||
return eventContent;
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
58
themes/next/layout/_scripts/pjax.swig
Normal file
58
themes/next/layout/_scripts/pjax.swig
Normal file
@ -0,0 +1,58 @@
|
||||
<script>
|
||||
var pjax = new Pjax({
|
||||
selectors: [
|
||||
'head title',
|
||||
'#page-configurations',
|
||||
'.content-wrap',
|
||||
'.post-toc-wrap',
|
||||
'.languages',
|
||||
'#pjax'
|
||||
],
|
||||
switches: {
|
||||
'.post-toc-wrap': Pjax.switches.innerHTML
|
||||
},
|
||||
analytics: false,
|
||||
cacheBust: false,
|
||||
scrollTo : !CONFIG.bookmark.enable
|
||||
});
|
||||
|
||||
window.addEventListener('pjax:success', () => {
|
||||
document.querySelectorAll('script[data-pjax], script#page-configurations, #pjax script').forEach(element => {
|
||||
var code = element.text || element.textContent || element.innerHTML || '';
|
||||
var parent = element.parentNode;
|
||||
parent.removeChild(element);
|
||||
var script = document.createElement('script');
|
||||
if (element.id) {
|
||||
script.id = element.id;
|
||||
}
|
||||
if (element.className) {
|
||||
script.className = element.className;
|
||||
}
|
||||
if (element.type) {
|
||||
script.type = element.type;
|
||||
}
|
||||
if (element.src) {
|
||||
script.src = element.src;
|
||||
// Force synchronous loading of peripheral JS.
|
||||
script.async = false;
|
||||
}
|
||||
if (element.dataset.pjax !== undefined) {
|
||||
script.dataset.pjax = '';
|
||||
}
|
||||
if (code !== '') {
|
||||
script.appendChild(document.createTextNode(code));
|
||||
}
|
||||
parent.appendChild(script);
|
||||
});
|
||||
NexT.boot.refresh();
|
||||
// Define Motion Sequence & Bootstrap Motion.
|
||||
if (CONFIG.motion.enable) {
|
||||
NexT.motion.integrator
|
||||
.init()
|
||||
.add(NexT.motion.middleWares.subMenu)
|
||||
.add(NexT.motion.middleWares.postList)
|
||||
.bootstrap();
|
||||
}
|
||||
NexT.utils.updateSidebarPosition();
|
||||
});
|
||||
</script>
|
||||
1
themes/next/layout/_scripts/schemes/gemini.swig
Normal file
1
themes/next/layout/_scripts/schemes/gemini.swig
Normal file
@ -0,0 +1 @@
|
||||
{{- next_js('schemes/pisces.js') }}
|
||||
1
themes/next/layout/_scripts/schemes/mist.swig
Normal file
1
themes/next/layout/_scripts/schemes/mist.swig
Normal file
@ -0,0 +1 @@
|
||||
{{- next_js('schemes/muse.js') }}
|
||||
1
themes/next/layout/_scripts/schemes/muse.swig
Normal file
1
themes/next/layout/_scripts/schemes/muse.swig
Normal file
@ -0,0 +1 @@
|
||||
{{- next_js('schemes/muse.js') }}
|
||||
1
themes/next/layout/_scripts/schemes/pisces.swig
Normal file
1
themes/next/layout/_scripts/schemes/pisces.swig
Normal file
@ -0,0 +1 @@
|
||||
{{- next_js('schemes/pisces.js') }}
|
||||
16
themes/next/layout/_scripts/three.swig
Normal file
16
themes/next/layout/_scripts/three.swig
Normal file
@ -0,0 +1,16 @@
|
||||
{%- if theme.three.enable %}
|
||||
{%- set three_uri = theme.vendors.three or next_vendors('three/three.min.js') %}
|
||||
<script defer src="{{ three_uri }}"></script>
|
||||
{%- if theme.three.three_waves %}
|
||||
{%- set waves_uri = theme.vendors.three_waves or next_vendors('three/three-waves.min.js') %}
|
||||
<script defer src="{{ waves_uri }}"></script>
|
||||
{%- endif %}
|
||||
{%- if theme.three.canvas_lines %}
|
||||
{%- set lines_uri = theme.vendors.canvas_lines or next_vendors('three/canvas_lines.min.js') %}
|
||||
<script defer src="{{ lines_uri }}"></script>
|
||||
{%- endif %}
|
||||
{%- if theme.three.canvas_sphere %}
|
||||
{%- set sphere_uri = theme.vendors.canvas_sphere or next_vendors('three/canvas_sphere.min.js') %}
|
||||
<script defer src="{{ sphere_uri }}"></script>
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
47
themes/next/layout/_scripts/vendors.swig
Normal file
47
themes/next/layout/_scripts/vendors.swig
Normal file
@ -0,0 +1,47 @@
|
||||
{%- set js_vendors = {} %}
|
||||
{%- set js_vendors = js_vendors | attr('anime', 'anime.min.js') %}
|
||||
|
||||
{%- if theme.pjax %}
|
||||
{%- set js_vendors = js_vendors | attr('pjax', 'pjax/pjax.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.fancybox %}
|
||||
{%- set js_vendors = js_vendors | attr('jquery', '//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js') %}
|
||||
{%- set js_vendors = js_vendors | attr('fancybox', '//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.mediumzoom %}
|
||||
{%- set js_vendors = js_vendors | attr('mediumzoom', '//cdn.jsdelivr.net/npm/medium-zoom@1/dist/medium-zoom.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.lazyload %}
|
||||
{%- set js_vendors = js_vendors | attr('lazyload', '//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.pangu %}
|
||||
{%- set js_vendors = js_vendors | attr('pangu', '//cdn.jsdelivr.net/npm/pangu@4/dist/browser/pangu.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.motion.enable %}
|
||||
{%- set js_vendors = js_vendors | attr('velocity', 'velocity/velocity.min.js') %}
|
||||
{%- set js_vendors = js_vendors | attr('velocity_ui', 'velocity/velocity.ui.min.js') %}
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.canvas_nest.enable %}
|
||||
{%- if theme.canvas_nest.onmobile %}
|
||||
{%- set canvas_nest_uri = theme.vendors.canvas_nest or next_vendors('canvas-nest/canvas-nest.min.js') %}
|
||||
{% else %}
|
||||
{%- set canvas_nest_uri = theme.vendors.canvas_nest_nomobile or next_vendors('canvas-nest/canvas-nest-nomobile.min.js') %}
|
||||
{%- endif %}
|
||||
<script color='{{ theme.canvas_nest.color }}' opacity='{{ theme.canvas_nest.opacity }}' zIndex='{{ theme.canvas_nest.zIndex }}' count='{{ theme.canvas_nest.count }}' src="{{ canvas_nest_uri }}"></script>
|
||||
{%- endif %}
|
||||
|
||||
{%- if theme.canvas_ribbon.enable %}
|
||||
{%- set canvas_ribbon_uri = theme.vendors.canvas_ribbon or next_vendors('canvas-ribbon/canvas-ribbon.js') %}
|
||||
<script size="{{ theme.canvas_ribbon.size }}" alpha="{{ theme.canvas_ribbon.alpha }}" zIndex="{{ theme.canvas_ribbon.zIndex }}" src="{{ canvas_ribbon_uri }}"></script>
|
||||
{%- endif %}
|
||||
|
||||
{%- for name, internal in js_vendors %}
|
||||
{%- set internal_script = next_vendors(internal) %}
|
||||
<script src="{{ theme.vendors[name] or internal_script }}"></script>
|
||||
{%- endfor %}
|
||||
Reference in New Issue
Block a user