123456789101112131415161718192021222324252627282930313233343536 |
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // SPDX-License-Identifier: MIT
-
- package util
-
- import (
- "sync"
- "time"
- )
-
- func Debounce(d time.Duration) func(f func()) {
- type debouncer struct {
- mu sync.Mutex
- t *time.Timer
- }
- db := &debouncer{}
-
- return func(f func()) {
- db.mu.Lock()
- defer db.mu.Unlock()
-
- if db.t != nil {
- db.t.Stop()
- }
- var trigger *time.Timer
- trigger = time.AfterFunc(d, func() {
- db.mu.Lock()
- defer db.mu.Unlock()
- if trigger == db.t {
- f()
- db.t = nil
- }
- })
- db.t = trigger
- }
- }
|