- // ==UserScript==
- // @name Auto Scroll Button
- // @namespace https://github.com/Jkker/tampermonkey-auto-scroll
- // @version 1.1.1
- // @description Adds a button to scroll down the page when new content is loaded or by a certain interval
- // @author Jkker
- // @license MIT
- // @match *://*/*
- // @icon https://raw.githubusercontent.com/Jkker/tampermonkey-auto-scroll/master/src/icons/Unfold.svg
- // @grant none
- // @supportURL https://github.com/Jkker/tampermonkey-auto-scroll/issues
- // ==/UserScript==
-
- (function(global, factory) {
- typeof exports === "object" && typeof module !== "undefined" ? module.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, global["auto-scroll"] = factory());
- })(this, function() {
- "use strict";
- const app = "";
- function noop() {
- }
- function run(fn) {
- return fn();
- }
- function blank_object() {
- return /* @__PURE__ */ Object.create(null);
- }
- function run_all(fns) {
- fns.forEach(run);
- }
- function is_function(thing) {
- return typeof thing === "function";
- }
- function safe_not_equal(a, b) {
- return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
- }
- let src_url_equal_anchor;
- function src_url_equal(element_src, url) {
- if (!src_url_equal_anchor) {
- src_url_equal_anchor = document.createElement("a");
- }
- src_url_equal_anchor.href = url;
- return element_src === src_url_equal_anchor.href;
- }
- function is_empty(obj) {
- return Object.keys(obj).length === 0;
- }
- function append(target, node) {
- target.appendChild(node);
- }
- function insert(target, node, anchor) {
- target.insertBefore(node, anchor || null);
- }
- function detach(node) {
- node.parentNode.removeChild(node);
- }
- function element(name) {
- return document.createElement(name);
- }
- function text(data) {
- return document.createTextNode(data);
- }
- function space() {
- return text(" ");
- }
- function listen(node, event, handler, options) {
- node.addEventListener(event, handler, options);
- return () => node.removeEventListener(event, handler, options);
- }
- function attr(node, attribute, value) {
- if (value == null)
- node.removeAttribute(attribute);
- else if (node.getAttribute(attribute) !== value)
- node.setAttribute(attribute, value);
- }
- function children(element2) {
- return Array.from(element2.childNodes);
- }
- function set_input_value(input, value) {
- input.value = value == null ? "" : value;
- }
- let current_component;
- function set_current_component(component) {
- current_component = component;
- }
- const dirty_components = [];
- const binding_callbacks = [];
- const render_callbacks = [];
- const flush_callbacks = [];
- const resolved_promise = Promise.resolve();
- let update_scheduled = false;
- function schedule_update() {
- if (!update_scheduled) {
- update_scheduled = true;
- resolved_promise.then(flush);
- }
- }
- function add_render_callback(fn) {
- render_callbacks.push(fn);
- }
- const seen_callbacks = /* @__PURE__ */ new Set();
- let flushidx = 0;
- function flush() {
- const saved_component = current_component;
- do {
- while (flushidx < dirty_components.length) {
- const component = dirty_components[flushidx];
- flushidx++;
- set_current_component(component);
- update(component.$$);
- }
- set_current_component(null);
- dirty_components.length = 0;
- flushidx = 0;
- while (binding_callbacks.length)
- binding_callbacks.pop()();
- for (let i = 0; i < render_callbacks.length; i += 1) {
- const callback = render_callbacks[i];
- if (!seen_callbacks.has(callback)) {
- seen_callbacks.add(callback);
- callback();
- }
- }
- render_callbacks.length = 0;
- } while (dirty_components.length);
- while (flush_callbacks.length) {
- flush_callbacks.pop()();
- }
- update_scheduled = false;
- seen_callbacks.clear();
- set_current_component(saved_component);
- }
- function update($$) {
- if ($$.fragment !== null) {
- $$.update();
- run_all($$.before_update);
- const dirty = $$.dirty;
- $$.dirty = [-1];
- $$.fragment && $$.fragment.p($$.ctx, dirty);
- $$.after_update.forEach(add_render_callback);
- }
- }
- const outroing = /* @__PURE__ */ new Set();
- function transition_in(block, local) {
- if (block && block.i) {
- outroing.delete(block);
- block.i(local);
- }
- }
- function mount_component(component, target, anchor, customElement) {
- const { fragment, on_mount, on_destroy, after_update } = component.$$;
- fragment && fragment.m(target, anchor);
- if (!customElement) {
- add_render_callback(() => {
- const new_on_destroy = on_mount.map(run).filter(is_function);
- if (on_destroy) {
- on_destroy.push(...new_on_destroy);
- } else {
- run_all(new_on_destroy);
- }
- component.$$.on_mount = [];
- });
- }
- after_update.forEach(add_render_callback);
- }
- function destroy_component(component, detaching) {
- const $$ = component.$$;
- if ($$.fragment !== null) {
- run_all($$.on_destroy);
- $$.fragment && $$.fragment.d(detaching);
- $$.on_destroy = $$.fragment = null;
- $$.ctx = [];
- }
- }
- function make_dirty(component, i) {
- if (component.$$.dirty[0] === -1) {
- dirty_components.push(component);
- schedule_update();
- component.$$.dirty.fill(0);
- }
- component.$$.dirty[i / 31 | 0] |= 1 << i % 31;
- }
- function init(component, options, instance2, create_fragment2, not_equal, props, append_styles, dirty = [-1]) {
- const parent_component = current_component;
- set_current_component(component);
- const $$ = component.$$ = {
- fragment: null,
- ctx: null,
- props,
- update: noop,
- not_equal,
- bound: blank_object(),
- on_mount: [],
- on_destroy: [],
- on_disconnect: [],
- before_update: [],
- after_update: [],
- context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
- callbacks: blank_object(),
- dirty,
- skip_bound: false,
- root: options.target || parent_component.$$.root
- };
- append_styles && append_styles($$.root);
- let ready = false;
- $$.ctx = instance2 ? instance2(component, options.props || {}, (i, ret, ...rest) => {
- const value = rest.length ? rest[0] : ret;
- if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
- if (!$$.skip_bound && $$.bound[i])
- $$.bound[i](value);
- if (ready)
- make_dirty(component, i);
- }
- return ret;
- }) : [];
- $$.update();
- ready = true;
- run_all($$.before_update);
- $$.fragment = create_fragment2 ? create_fragment2($$.ctx) : false;
- if (options.target) {
- if (options.hydrate) {
- const nodes = children(options.target);
- $$.fragment && $$.fragment.l(nodes);
- nodes.forEach(detach);
- } else {
- $$.fragment && $$.fragment.c();
- }
- if (options.intro)
- transition_in(component.$$.fragment);
- mount_component(component, options.target, options.anchor, options.customElement);
- flush();
- }
- set_current_component(parent_component);
- }
- class SvelteComponent {
- $destroy() {
- destroy_component(this, 1);
- this.$destroy = noop;
- }
- $on(type, callback) {
- const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []);
- callbacks.push(callback);
- return () => {
- const index = callbacks.indexOf(callback);
- if (index !== -1)
- callbacks.splice(index, 1);
- };
- }
- $set($$props) {
- if (this.$$set && !is_empty($$props)) {
- this.$$.skip_bound = true;
- this.$$set($$props);
- this.$$.skip_bound = false;
- }
- }
- }
- const ArrowBackIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTZweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIiBvcGFjaXR5PSIuODciLz4KICA8cGF0aCBkPSJNMTcuNTEgMy44N0wxNS43MyAyLjEgNS44NCAxMmw5LjkgOS45IDEuNzctMS43N0w5LjM4IDEybDguMTMtOC4xM3oiLz4KPC9zdmc+";
- const SettingsIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjBweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTE5LjQzIDEyLjk4Yy4wNC0uMzIuMDctLjY0LjA3LS45OCAwLS4zNC0uMDMtLjY2LS4wNy0uOThsMi4xMS0xLjY1Yy4xOS0uMTUuMjQtLjQyLjEyLS42NGwtMi0zLjQ2Yy0uMDktLjE2LS4yNi0uMjUtLjQ0LS4yNS0uMDYgMC0uMTIuMDEtLjE3LjAzbC0yLjQ5IDFjLS41Mi0uNC0xLjA4LS43My0xLjY5LS45OGwtLjM4LTIuNjVDMTQuNDYgMi4xOCAxNC4yNSAyIDE0IDJoLTRjLS4yNSAwLS40Ni4xOC0uNDkuNDJsLS4zOCAyLjY1Yy0uNjEuMjUtMS4xNy41OS0xLjY5Ljk4bC0yLjQ5LTFjLS4wNi0uMDItLjEyLS4wMy0uMTgtLjAzLS4xNyAwLS4zNC4wOS0uNDMuMjVsLTIgMy40NmMtLjEzLjIyLS4wNy40OS4xMi42NGwyLjExIDEuNjVjLS4wNC4zMi0uMDcuNjUtLjA3Ljk4IDAgLjMzLjAzLjY2LjA3Ljk4bC0yLjExIDEuNjVjLS4xOS4xNS0uMjQuNDItLjEyLjY0bDIgMy40NmMuMDkuMTYuMjYuMjUuNDQuMjUuMDYgMCAuMTItLjAxLjE3LS4wM2wyLjQ5LTFjLjUyLjQgMS4wOC43MyAxLjY5Ljk4bC4zOCAyLjY1Yy4wMy4yNC4yNC40Mi40OS40Mmg0Yy4yNSAwIC40Ni0uMTguNDktLjQybC4zOC0yLjY1Yy42MS0uMjUgMS4xNy0uNTkgMS42OS0uOThsMi40OSAxYy4wNi4wMi4xMi4wMy4xOC4wMy4xNyAwIC4zNC0uMDkuNDMtLjI1bDItMy40NmMuMTItLjIyLjA3LS40OS0uMTItLjY0bC0yLjExLTEuNjV6bS0xLjk4LTEuNzFjLjA0LjMxLjA1LjUyLjA1LjczIDAgLjIxLS4wMi40My0uMDUuNzNsLS4xNCAxLjEzLjg5LjcgMS4wOC44NC0uNyAxLjIxLTEuMjctLjUxLTEuMDQtLjQyLS45LjY4Yy0uNDMuMzItLjg0LjU2LTEuMjUuNzNsLTEuMDYuNDMtLjE2IDEuMTMtLjIgMS4zNWgtMS40bC0uMTktMS4zNS0uMTYtMS4xMy0xLjA2LS40M2MtLjQzLS4xOC0uODMtLjQxLTEuMjMtLjcxbC0uOTEtLjctMS4wNi40My0xLjI3LjUxLS43LTEuMjEgMS4wOC0uODQuODktLjctLjE0LTEuMTNjLS4wMy0uMzEtLjA1LS41NC0uMDUtLjc0cy4wMi0uNDMuMDUtLjczbC4xNC0xLjEzLS44OS0uNy0xLjA4LS44NC43LTEuMjEgMS4yNy41MSAxLjA0LjQyLjktLjY4Yy40My0uMzIuODQtLjU2IDEuMjUtLjczbDEuMDYtLjQzLjE2LTEuMTMuMi0xLjM1aDEuMzlsLjE5IDEuMzUuMTYgMS4xMyAxLjA2LjQzYy40My4xOC44My40MSAxLjIzLjcxbC45MS43IDEuMDYtLjQzIDEuMjctLjUxLjcgMS4yMS0xLjA3Ljg1LS44OS43LjE0IDEuMTN6TTEyIDhjLTIuMjEgMC00IDEuNzktNCA0czEuNzkgNCA0IDQgNC0xLjc5IDQtNC0xLjc5LTQtNC00em0wIDZjLTEuMSAwLTItLjktMi0ycy45LTIgMi0yIDIgLjkgMiAyLS45IDItMiAyeiIvPgo8L3N2Zz4=";
- const StopIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTE2IDh2OEg4VjhoOG0yLTJINnYxMmgxMlY2eiIvPgo8L3N2Zz4=";
- const AutoScrollIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTEyIDUuODNMMTUuMTcgOWwxLjQxLTEuNDFMMTIgMyA3LjQxIDcuNTkgOC44MyA5IDEyIDUuODN6bTAgMTIuMzRMOC44MyAxNWwtMS40MSAxLjQxTDEyIDIxbDQuNTktNC41OUwxNS4xNyAxNSAxMiAxOC4xN3oiLz4KPC9zdmc+";
- const ClearIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTZweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMiAxOSA2LjQxeiIvPgo8L3N2Zz4=";
- const CheckIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTZweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMTZweCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0wIDBoMjR2MjRIMFYweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MUw5IDE2LjE3eiIvPjwvc3ZnPg==";
- const CloseIcon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjBweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjBweCIgZmlsbD0iI2ZmZiI+CiAgPHBhdGggZD0iTTAgMGgyNHYyNEgwVjB6IiBmaWxsPSJub25lIi8+CiAgPHBhdGggZD0iTTE5IDYuNDFMMTcuNTkgNSAxMiAxMC41OSA2LjQxIDUgNSA2LjQxIDEwLjU5IDEyIDUgMTcuNTkgNi40MSAxOSAxMiAxMy40MSAxNy41OSAxOSAxOSAxNy41OSAxMy40MSAxMiAxOSA2LjQxeiIvPgo8L3N2Zz4=";
- function create_if_block_1(ctx) {
- let button0;
- let img;
- let img_src_value;
- let t0;
- let button1;
- let t1;
- let t2;
- let button2;
- let t3;
- let t4;
- let button3;
- let t5;
- let mounted;
- let dispose;
- return {
- c() {
- button0 = element("button");
- img = element("img");
- t0 = space();
- button1 = element("button");
- t1 = text("Auto");
- t2 = space();
- button2 = element("button");
- t3 = text("500ms");
- t4 = space();
- button3 = element("button");
- t5 = text("1.5s");
- if (!src_url_equal(img.src, img_src_value = ctx[1] ? CloseIcon : SettingsIcon))
- attr(img, "src", img_src_value);
- attr(img, "alt", "Settings");
- attr(button0, "style", ctx[12].button);
- attr(button1, "style", ctx[12].button);
- attr(button2, "style", ctx[12].button);
- attr(button3, "style", ctx[12].button);
- },
- m(target, anchor) {
- insert(target, button0, anchor);
- append(button0, img);
- insert(target, t0, anchor);
- insert(target, button1, anchor);
- append(button1, t1);
- insert(target, t2, anchor);
- insert(target, button2, anchor);
- append(button2, t3);
- insert(target, t4, anchor);
- insert(target, button3, anchor);
- append(button3, t5);
- if (!mounted) {
- dispose = [
- listen(button0, "click", ctx[6]),
- listen(button1, "click", ctx[11]("resize")),
- listen(button2, "click", ctx[11]("interval", 500)),
- listen(button3, "click", ctx[11]("interval", 1500))
- ];
- mounted = true;
- }
- },
- p(ctx2, dirty) {
- if (dirty & 2 && !src_url_equal(img.src, img_src_value = ctx2[1] ? CloseIcon : SettingsIcon)) {
- attr(img, "src", img_src_value);
- }
- },
- d(detaching) {
- if (detaching)
- detach(button0);
- if (detaching)
- detach(t0);
- if (detaching)
- detach(button1);
- if (detaching)
- detach(t2);
- if (detaching)
- detach(button2);
- if (detaching)
- detach(t4);
- if (detaching)
- detach(button3);
- mounted = false;
- run_all(dispose);
- }
- };
- }
- function create_if_block(ctx) {
- let div1;
- let label;
- let t0;
- let t1;
- let div0;
- let input;
- let t2;
- let button;
- let img;
- let img_src_value;
- let t3;
- let style;
- let mounted;
- let dispose;
- return {
- c() {
- div1 = element("div");
- label = element("label");
- t0 = text("Stop scrolling if");
- t1 = space();
- div0 = element("div");
- input = element("input");
- t2 = space();
- button = element("button");
- img = element("img");
- t3 = space();
- style = element("style");
- style.textContent = "#auto-scroll-wait-until-element-input::placeholder{color:rgba(255, 255, 255, 0.8);}";
- attr(label, "style", ctx[12].inputLabel);
- attr(label, "for", "auto-scroll-wait-until-element-input");
- attr(input, "id", "auto-scroll-wait-until-element-input");
- attr(input, "style", ctx[12].input);
- input.autofocus = true;
- attr(input, "placeholder", "text appears");
- if (!src_url_equal(img.src, img_src_value = ctx[3] ? ClearIcon : CheckIcon))
- attr(img, "src", img_src_value);
- attr(img, "alt", "Clear input");
- attr(button, "style", ctx[12].inputButton);
- attr(div0, "style", ctx[12].inputContainer);
- attr(div1, "style", ctx[12].menu);
- },
- m(target, anchor) {
- insert(target, div1, anchor);
- append(div1, label);
- append(label, t0);
- append(div1, t1);
- append(div1, div0);
- append(div0, input);
- set_input_value(input, ctx[2]);
- append(div0, t2);
- append(div0, button);
- append(button, img);
- append(div0, t3);
- append(div0, style);
- input.focus();
- if (!mounted) {
- dispose = [
- listen(input, "input", ctx[13]),
- listen(input, "change", ctx[8]),
- listen(input, "input", ctx[9]),
- listen(input, "keypress", ctx[14]),
- listen(button, "click", function() {
- if (is_function(ctx[3] ? ctx[7] : ctx[8]))
- (ctx[3] ? ctx[7] : ctx[8]).apply(this, arguments);
- })
- ];
- mounted = true;
- }
- },
- p(new_ctx, dirty) {
- ctx = new_ctx;
- if (dirty & 4 && input.value !== ctx[2]) {
- set_input_value(input, ctx[2]);
- }
- if (dirty & 8 && !src_url_equal(img.src, img_src_value = ctx[3] ? ClearIcon : CheckIcon)) {
- attr(img, "src", img_src_value);
- }
- },
- d(detaching) {
- if (detaching)
- detach(div1);
- mounted = false;
- run_all(dispose);
- }
- };
- }
- function create_fragment(ctx) {
- let div1;
- let div0;
- let t0;
- let button;
- let img;
- let img_src_value;
- let div0_style_value;
- let t1;
- let mounted;
- let dispose;
- let if_block0 = ctx[0] && create_if_block_1(ctx);
- let if_block1 = ctx[0] && ctx[1] && create_if_block(ctx);
- return {
- c() {
- div1 = element("div");
- div0 = element("div");
- if (if_block0)
- if_block0.c();
- t0 = space();
- button = element("button");
- img = element("img");
- t1 = space();
- if (if_block1)
- if_block1.c();
- if (!src_url_equal(img.src, img_src_value = ctx[4] ? StopIcon : ctx[0] ? ArrowBackIcon : AutoScrollIcon))
- attr(img, "src", img_src_value);
- attr(img, "alt", "Logo");
- attr(button, "style", ctx[12].button);
- attr(div0, "style", div0_style_value = ctx[12].container + `left: ${ctx[0] ? "0" : "-8px"};`);
- },
- m(target, anchor) {
- insert(target, div1, anchor);
- append(div1, div0);
- if (if_block0)
- if_block0.m(div0, null);
- append(div0, t0);
- append(div0, button);
- append(button, img);
- append(div1, t1);
- if (if_block1)
- if_block1.m(div1, null);
- if (!mounted) {
- dispose = listen(button, "click", function() {
- if (is_function(ctx[4] ? ctx[10] : ctx[5]))
- (ctx[4] ? ctx[10] : ctx[5]).apply(this, arguments);
- });
- mounted = true;
- }
- },
- p(new_ctx, [dirty]) {
- ctx = new_ctx;
- if (ctx[0]) {
- if (if_block0) {
- if_block0.p(ctx, dirty);
- } else {
- if_block0 = create_if_block_1(ctx);
- if_block0.c();
- if_block0.m(div0, t0);
- }
- } else if (if_block0) {
- if_block0.d(1);
- if_block0 = null;
- }
- if (dirty & 17 && !src_url_equal(img.src, img_src_value = ctx[4] ? StopIcon : ctx[0] ? ArrowBackIcon : AutoScrollIcon)) {
- attr(img, "src", img_src_value);
- }
- if (dirty & 1 && div0_style_value !== (div0_style_value = ctx[12].container + `left: ${ctx[0] ? "0" : "-8px"};`)) {
- attr(div0, "style", div0_style_value);
- }
- if (ctx[0] && ctx[1]) {
- if (if_block1) {
- if_block1.p(ctx, dirty);
- } else {
- if_block1 = create_if_block(ctx);
- if_block1.c();
- if_block1.m(div1, null);
- }
- } else if (if_block1) {
- if_block1.d(1);
- if_block1 = null;
- }
- },
- i: noop,
- o: noop,
- d(detaching) {
- if (detaching)
- detach(div1);
- if (if_block0)
- if_block0.d();
- if (if_block1)
- if_block1.d();
- mounted = false;
- dispose();
- }
- };
- }
- function instance($$self, $$props, $$invalidate) {
- const getLastElementByText = (text2) => {
- const iter = document.evaluate(`//*[contains(text(),"${text2}")]`, document, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
- let curr, prev;
- try {
- curr = iter.iterateNext();
- while (curr) {
- prev = curr;
- curr = iter.iterateNext();
- }
- } catch (e) {
- console.error(`Auto Scroll Button Error: Document tree modified during iteration ${e}`);
- }
- return prev;
- };
- let menuOpen = false;
- const toggleMenu = () => $$invalidate(0, menuOpen = !menuOpen);
- let settingsOpen = false;
- const toggleSettings = () => $$invalidate(1, settingsOpen = !settingsOpen);
- let inputValue = "";
- let untilTarget;
- const clearScrollUntilCondition = () => $$invalidate(3, untilTarget = void 0);
- const activateScrollUntilCondition = () => {
- $$invalidate(3, untilTarget = inputValue);
- toggleSettings();
- };
- const onInput = () => {
- $$invalidate(3, untilTarget = void 0);
- };
- let lastFound = null;
- function checkStopCondition() {
- if (!untilTarget)
- return false;
- const last = getLastElementByText(untilTarget);
- if (!last)
- return false;
- if (last !== lastFound) {
- lastFound = last;
- last.scrollIntoView();
- return true;
- } else {
- return false;
- }
- }
- const scroll = () => {
- if (checkStopCondition()) {
- cancelCurrentScroll();
- return;
- }
- window.scroll({
- top: document.body.scrollHeight,
- left: 0,
- behavior: "smooth"
- });
- };
- const resizeObserver = new ResizeObserver(() => setTimeout(scroll, 100));
- let intervalId;
- let scrolling = false;
- const startScroll = (type, interval = 1e3) => {
- if (type === "resize")
- resizeObserver.observe(document.body);
- else if (type === "interval")
- intervalId = setInterval(scroll, interval);
- $$invalidate(4, scrolling = type);
- $$invalidate(0, menuOpen = !menuOpen);
- };
- const cancelScroll = (type) => {
- if (type === "resize")
- resizeObserver.unobserve(document.body);
- else if (type === "interval")
- clearInterval(intervalId);
- $$invalidate(4, scrolling = false);
- };
- const cancelCurrentScroll = () => {
- if (scrolling)
- cancelScroll(scrolling);
- };
- const toggleScroll = (type, intervalSecond = 1e3) => () => {
- if (scrolling) {
- cancelScroll(type);
- } else {
- startScroll(type, intervalSecond);
- }
- };
- const styles = {
- button: "height: 40px; padding: 8px; display: flex; justify-content: center; align-items: center; border: none; outline: none; background: transparent; cursor: pointer; color: white",
- menu: "position: fixed; bottom: 62px; left: 6px; background: rgba(0,0,0,0.4); backdrop-filter: blur(10px); padding: 8px; border-radius: 8px; padding-bottom: 12px;",
- inputLabel: "color: white; font-size: 15px",
- inputContainer: "display: flex; position: relative; margin-top: 8px",
- input: "height: 24px; border: 1px solid white; outline: none; background: transparent; border-radius: 4px; padding-left: 4px; padding-right: 32px; color: white",
- inputButton: "height: 100%; width: 28px; padding: 8px; display: flex; justify-content: center; align-items: center; border: none; outline: none; cursor: pointer; position: absolute; top: 0; right: 0; border-left: 1px solid white; background: transparent",
- container: "position: fixed; bottom: 16px; z-index: 99999999; background: rgba(0,0,0,0.4); backdrop-filter: blur(10px); display: flex; border-radius: 0 20px 20px 0;"
- };
- function input_input_handler() {
- inputValue = this.value;
- $$invalidate(2, inputValue);
- }
- const keypress_handler = (e) => {
- if (e.key === "Enter")
- activateScrollUntilCondition();
- };
- return [
- menuOpen,
- settingsOpen,
- inputValue,
- untilTarget,
- scrolling,
- toggleMenu,
- toggleSettings,
- clearScrollUntilCondition,
- activateScrollUntilCondition,
- onInput,
- cancelCurrentScroll,
- toggleScroll,
- styles,
- input_input_handler,
- keypress_handler
- ];
- }
- class App extends SvelteComponent {
- constructor(options) {
- super();
- init(this, options, instance, create_fragment, safe_not_equal, {});
- }
- }
- const main = new App({
- target: document.body
- });
- return main;
- });