forked from forgejo/forgejo
Use a general approach to access custom/static/builtin assets (#24022)
The idea is to use a Layered Asset File-system (modules/assetfs/layered.go) For example: when there are 2 layers: "custom", "builtin", when access to asset "my/page.tmpl", the Layered Asset File-system will first try to use "custom" assets, if not found, then use "builtin" assets. This approach will hugely simplify a lot of code, make them testable. Other changes: * Simplify the AssetsHandlerFunc code * Simplify the `gitea embedded` sub-command code --------- Co-authored-by: Jason Song <i@wolfogre.com> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
parent
42919ccb7c
commit
50a72e7a83
36 changed files with 689 additions and 1055 deletions
|
@ -4,6 +4,7 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
|
@ -18,3 +19,30 @@ func StopTimer(t *time.Timer) bool {
|
|||
}
|
||||
return stopped
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue