Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/AmazingRise/hugo-theme-diary.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/static/js
diff options
context:
space:
mode:
authoramazingrise <8315221+AmazingRise@users.noreply.github.com>2021-08-14 08:31:24 +0300
committeramazingrise <8315221+AmazingRise@users.noreply.github.com>2021-08-14 08:31:24 +0300
commitfd04f1bdeace19dc58104d691774d57851e6eaef (patch)
treef7981b8ff85c6471d782e01d6148a45f83e805df /static/js
parentb228ec6adb3416022cf20f2c74b3a64098646494 (diff)
Remove Vue.js from source code.
Diffstat (limited to 'static/js')
-rw-r--r--static/js/journal.js295
-rw-r--r--static/js/loadCSS.js79
-rw-r--r--static/js/toc-collapse.js60
3 files changed, 295 insertions, 139 deletions
diff --git a/static/js/journal.js b/static/js/journal.js
index e69de29..6b4a91f 100644
--- a/static/js/journal.js
+++ b/static/js/journal.js
@@ -0,0 +1,295 @@
+var debounce = function (func, wait, options) {
+ let lastArgs, lastThis, maxWait, result, timerId, lastCallTime;
+
+ let lastInvokeTime = 0;
+ let leading = false;
+ let maxing = false;
+ let trailing = true;
+
+ // Bypass `requestAnimationFrame` by explicitly setting `wait=0`.
+ const useRAF =
+ !wait && wait !== 0 && typeof root.requestAnimationFrame === "function";
+
+ if (typeof func !== "function") {
+ throw new TypeError("Expected a function");
+ }
+ function isObject(value) {
+ const type = typeof value;
+ return value != null && (type === "object" || type === "function");
+ }
+
+ wait = +wait || 0;
+ if (isObject(options)) {
+ leading = !!options.leading;
+ maxing = "maxWait" in options;
+ maxWait = maxing ? Math.max(+options.maxWait || 0, wait) : maxWait;
+ trailing = "trailing" in options ? !!options.trailing : trailing;
+ }
+
+ function invokeFunc(time) {
+ const args = lastArgs;
+ const thisArg = lastThis;
+
+ lastArgs = lastThis = undefined;
+ lastInvokeTime = time;
+ result = func.apply(thisArg, args);
+ return result;
+ }
+
+ function startTimer(pendingFunc, wait) {
+ if (useRAF) {
+ root.cancelAnimationFrame(timerId);
+ return root.requestAnimationFrame(pendingFunc);
+ }
+ return setTimeout(pendingFunc, wait);
+ }
+
+ function cancelTimer(id) {
+ if (useRAF) {
+ return root.cancelAnimationFrame(id);
+ }
+ clearTimeout(id);
+ }
+
+ function leadingEdge(time) {
+ // Reset any `maxWait` timer.
+ lastInvokeTime = time;
+ // Start the timer for the trailing edge.
+ timerId = startTimer(timerExpired, wait);
+ // Invoke the leading edge.
+ return leading ? invokeFunc(time) : result;
+ }
+
+ function remainingWait(time) {
+ const timeSinceLastCall = time - lastCallTime;
+ const timeSinceLastInvoke = time - lastInvokeTime;
+ const timeWaiting = wait - timeSinceLastCall;
+
+ return maxing
+ ? Math.min(timeWaiting, maxWait - timeSinceLastInvoke)
+ : timeWaiting;
+ }
+
+ function shouldInvoke(time) {
+ const timeSinceLastCall = time - lastCallTime;
+ const timeSinceLastInvoke = time - lastInvokeTime;
+
+ // Either this is the first call, activity has stopped and we're at the
+ // trailing edge, the system time has gone backwards and we're treating
+ // it as the trailing edge, or we've hit the `maxWait` limit.
+ return (
+ lastCallTime === undefined ||
+ timeSinceLastCall >= wait ||
+ timeSinceLastCall < 0 ||
+ (maxing && timeSinceLastInvoke >= maxWait)
+ );
+ }
+
+ function timerExpired() {
+ const time = Date.now();
+ if (shouldInvoke(time)) {
+ return trailingEdge(time);
+ }
+ // Restart the timer.
+ timerId = startTimer(timerExpired, remainingWait(time));
+ }
+
+ function trailingEdge(time) {
+ timerId = undefined;
+
+ // Only invoke if we have `lastArgs` which means `func` has been
+ // debounced at least once.
+ if (trailing && lastArgs) {
+ return invokeFunc(time);
+ }
+ lastArgs = lastThis = undefined;
+ return result;
+ }
+
+ function cancel() {
+ if (timerId !== undefined) {
+ cancelTimer(timerId);
+ }
+ lastInvokeTime = 0;
+ lastArgs = lastCallTime = lastThis = timerId = undefined;
+ }
+
+ function flush() {
+ return timerId === undefined ? result : trailingEdge(Date.now());
+ }
+
+ function pending() {
+ return timerId !== undefined;
+ }
+
+ function debounced(...args) {
+ const time = Date.now();
+ const isInvoking = shouldInvoke(time);
+
+ lastArgs = args;
+ lastThis = this;
+ lastCallTime = time;
+
+ if (isInvoking) {
+ if (timerId === undefined) {
+ return leadingEdge(lastCallTime);
+ }
+ if (maxing) {
+ // Handle invocations in a tight loop.
+ timerId = startTimer(timerExpired, wait);
+ return invokeFunc(lastCallTime);
+ }
+ }
+ if (timerId === undefined) {
+ timerId = startTimer(timerExpired, wait);
+ }
+ return result;
+ }
+ debounced.cancel = cancel;
+ debounced.flush = flush;
+ debounced.pending = pending;
+ return debounced;
+};
+
+const navBar = document.getElementById("navBar");
+const navBackground = document.getElementById("navBackground");
+const navTitle = document.getElementById("navTitle");
+const extraContainer = document.getElementById("extraContainer");
+const streamContainer = document.getElementById("streamContainer");
+
+// Scroll
+
+var sgn = function (t, x) {
+ let k = 1 / (1 - 2 * t);
+ if (x <= t) return 0;
+ else if (x >= 1 - t) return 1;
+ else {
+ return k * (x - t);
+ }
+};
+
+var handleScroll = function () {
+ //let scrollY = window.scrollY;
+ let pageHeadHeight = function () {
+ return document.getElementById("pageHead").offsetHeight;
+ };
+
+ let navBarHeight = function () {
+ return document.getElementById("navBar").offsetHeight;
+ };
+ let navOpacity = sgn(
+ 0.0,
+ Math.min(
+ 1,
+ Math.max(0, window.scrollY / (pageHeadHeight() - navBarHeight() * 0.8))
+ )
+ );
+ if (navOpacity >= 1) {
+ navBackground.style.opacity = 1;
+ navTitle.style.opacity = 1;
+ } else {
+ navBackground.style.opacity = 0;
+ navTitle.style.opacity = 0;
+ }
+
+ if (typeof spy !== "undefined") {
+ spy();
+ }
+};
+
+window.addEventListener(
+ "scroll",
+ debounce(handleScroll, 100, { maxWait: 100 }),
+ false
+);
+
+document.querySelectorAll("table").forEach(function (elem) {
+ elem.classList.add("table-striped");
+ elem.classList.add("table");
+ elem.classList.add("table-responsive");
+ elem.classList.add("table-hover");
+});
+
+// Night mode
+
+var night = document.cookie.replace(
+ /(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/,
+ "$1"
+);
+
+var isDarkMode = false;
+
+if (night == "") {
+ if (
+ window.matchMedia &&
+ window.matchMedia("(prefers-color-scheme: dark)").matches
+ ) {
+ isDarkMode = true;
+ }
+} else {
+ // If night is not empty
+ if (night == "1") {
+ isDarkMode = true;
+ }
+}
+
+var toggleDarkMode = function () {
+ isDarkMode = !isDarkMode;
+ let icon = document.getElementById("darkModeToggleIcon");
+ let icon2 = document.getElementById("darkModeToggleIcon2");
+ if (isDarkMode == true) {
+ document.cookie = "night=1;path=/";
+ document.body.classList.add("night");
+ icon.innerText = "light_mode";
+ icon2.innerText = "light_mode";
+ } else {
+ document.cookie = "night=0;path=/";
+ document.body.classList.remove("night");
+ icon.innerText = "dark_mode";
+ icon2.innerText = "dark_mode";
+ }
+};
+
+document
+ .getElementById("darkModeToggleButton")
+ .addEventListener("click", function () {
+ toggleDarkMode();
+ });
+
+document
+ .getElementById("darkModeToggleButton2")
+ .addEventListener("click", function () {
+ toggleDarkMode();
+ });
+
+// Drawer
+
+var openDrawer = function () {
+ document.getElementsByTagName("html")[0].style.overflow = "hidden";
+ document
+ .getElementById("drawer-mask")
+ .classList.add("single-column-drawer-mask");
+ document
+ .getElementById("drawer")
+ .classList.add("single-column-drawer-container-active");
+};
+
+document
+ .getElementById("nav_dropdown_btn")
+ .addEventListener("click", function () {
+ openDrawer();
+ });
+
+var closeDrawer = function () {
+ document.getElementsByTagName("html")[0].style.overflow = "unset";
+ document
+ .getElementById("drawer-mask")
+ .classList.remove("single-column-drawer-mask");
+ document
+ .getElementById("drawer")
+ .classList.remove("single-column-drawer-container-active");
+};
+
+document.getElementById("drawer-mask").addEventListener("click", function () {
+ closeDrawer();
+});
diff --git a/static/js/loadCSS.js b/static/js/loadCSS.js
deleted file mode 100644
index 0ba961a..0000000
--- a/static/js/loadCSS.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*! loadCSS. [c]2017 Filament Group, Inc. MIT License */
-(function(w){
- "use strict";
- /* exported loadCSS */
- var loadCSS = function( href, before, media ){
- // Arguments explained:
- // `href` [REQUIRED] is the URL for your CSS file.
- // `before` [OPTIONAL] is the element the script should use as a reference for injecting our stylesheet <link> before
- // By default, loadCSS attempts to inject the link after the last stylesheet or script in the DOM. However, you might desire a more specific location in your document.
- // `media` [OPTIONAL] is the media type or query of the stylesheet. By default it will be 'all'
- var doc = w.document;
- var ss = doc.createElement( "link" );
- var ref;
- if( before ){
- ref = before;
- }
- else {
- var refs = ( doc.body || doc.getElementsByTagName( "head" )[ 0 ] ).childNodes;
- ref = refs[ refs.length - 1];
- }
-
- var sheets = doc.styleSheets;
- ss.rel = "stylesheet";
- ss.href = href;
- // temporarily set media to something inapplicable to ensure it'll fetch without blocking render
- ss.media = "only x";
-
- // wait until body is defined before injecting link. This ensures a non-blocking load in IE11.
- function ready( cb ){
- if( doc.body ){
- return cb();
- }
- setTimeout(function(){
- ready( cb );
- });
- }
- // Inject link
- // Note: the ternary preserves the existing behavior of "before" argument, but we could choose to change the argument to "after" in a later release and standardize on ref.nextSibling for all refs
- // Note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
- ready( function(){
- ref.parentNode.insertBefore( ss, ( before ? ref : ref.nextSibling ) );
- });
- // A method (exposed on return object for external use) that mimics onload by polling document.styleSheets until it includes the new sheet.
- var onloadcssdefined = function( cb ){
- var resolvedHref = ss.href;
- var i = sheets.length;
- while( i-- ){
- if( sheets[ i ].href === resolvedHref ){
- return cb();
- }
- }
- setTimeout(function() {
- onloadcssdefined( cb );
- });
- };
-
- function loadCB(){
- if( ss.addEventListener ){
- ss.removeEventListener( "load", loadCB );
- }
- ss.media = media || "all";
- }
-
- // once loaded, set link's media back to `all` so that the stylesheet applies once it loads
- if( ss.addEventListener ){
- ss.addEventListener( "load", loadCB);
- }
- ss.onloadcssdefined = onloadcssdefined;
- onloadcssdefined( loadCB );
- return ss;
- };
- // commonjs
- if( typeof exports !== "undefined" ){
- exports.loadCSS = loadCSS;
- }
- else {
- w.loadCSS = loadCSS;
- }
-}( typeof global !== "undefined" ? global : this )); \ No newline at end of file
diff --git a/static/js/toc-collapse.js b/static/js/toc-collapse.js
deleted file mode 100644
index d9ffe1e..0000000
--- a/static/js/toc-collapse.js
+++ /dev/null
@@ -1,60 +0,0 @@
-var spy = function () {
- var elems = $(":header");
- if (elems.length == 0) {
- return;
- }
- var currentTop = $(window).scrollTop();
- var currentBottom = $(window).scrollTop() + $(window).height();
- var pageBottom = $('#EOF').offset().top;
-
- var meetUnread = false
- var currentIndex = elems.length - 1
- elems.each(function (idx) {
- var elemTop = $(this).offset().top;
- var id = $(this).attr('id');
- var navElem = $('#' + id + '-nav');
- if (currentTop + $(this).height() >= elemTop) {
- navElem.addClass('toc-active');
- } else {
- if (meetUnread == false) {
- meetUnread = true
- currentIndex = idx - 1
- }
- navElem.removeClass('toc-active');
- }
- })
- if (currentBottom >= pageBottom) {
- currentIndex = -1
- }
- //console.log(currentIndex);
- //Collapse them
- collapseOthers(currentIndex);
-}
-
-var onNavClick = function () {
- spy()
-}
-
-var collapseOthers = function (currentIndex) {
- if (currentIndex == -1) {
- $(".collapse").each(function (idx) {
- $(this).collapse("hide");
- });
- return;
- }
- var elems = $(":header");
- //console.log(currentIndex);
- currentId = "#" + elems[currentIndex].id + "-nav";
-
- $(currentId).parents(".collapse").each(function (idx) {
- $(this).collapse("show");
- });
- $(currentId).parent().next().filter(".collapse").collapse("show");
- $(".collapse").not($(currentId).parents()).not($(currentId).parent().next()).each(function (idx) {
- $(this).collapse("hide");
- });
-}
-
-//From https://github.com/lodash/lodash/blob/master/debounce.js
-// and https://github.com/lodash/lodash/blob/master/isObject.js
-