diff options
author | amazingrise <8315221+AmazingRise@users.noreply.github.com> | 2021-08-14 08:31:24 +0300 |
---|---|---|
committer | amazingrise <8315221+AmazingRise@users.noreply.github.com> | 2021-08-14 08:31:24 +0300 |
commit | fd04f1bdeace19dc58104d691774d57851e6eaef (patch) | |
tree | f7981b8ff85c6471d782e01d6148a45f83e805df /static/js | |
parent | b228ec6adb3416022cf20f2c74b3a64098646494 (diff) |
Remove Vue.js from source code.
Diffstat (limited to 'static/js')
-rw-r--r-- | static/js/journal.js | 295 | ||||
-rw-r--r-- | static/js/loadCSS.js | 79 | ||||
-rw-r--r-- | static/js/toc-collapse.js | 60 |
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 - |