mirror of
https://github.com/yuukiwww/taiko-web.git
synced 2024-06-27 14:59:30 +02:00
- Files with filenames that end with .taikoweb.js can be imported and run to add custom functionality to the game - The plugin file is a javascript module script that should have a class in the default export - Currently supported methods in the class: name (string), load, start, stop, unload (functions) - The class can be extended from the Patch class to add automatic patching of variables and functions - Here are some of the plugins I made: https://github.com/KatieFrogs/taiko-web-plugins
55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
class IDB{
|
|
constructor(...args){
|
|
this.init(...args)
|
|
}
|
|
init(name, store){
|
|
this.name = name
|
|
this.store = store
|
|
}
|
|
start(){
|
|
if(this.db){
|
|
return Promise.resolve(this.db)
|
|
}
|
|
var request = indexedDB.open(this.name)
|
|
request.onupgradeneeded = event => {
|
|
var db = event.target.result
|
|
db.createObjectStore(this.store)
|
|
}
|
|
return this.promise(request).then(result => {
|
|
this.db = result
|
|
return this.db
|
|
}, target =>
|
|
console.warn("DB error", target)
|
|
)
|
|
}
|
|
promise(request){
|
|
return new Promise((resolve, reject) => {
|
|
return pageEvents.race(request, "success", "error").then(response => {
|
|
if(response.type === "success"){
|
|
return resolve(event.target.result)
|
|
}else{
|
|
return reject(event.target)
|
|
}
|
|
})
|
|
})
|
|
}
|
|
transaction(method, ...args){
|
|
return this.start().then(db =>
|
|
db.transaction(this.store, "readwrite").objectStore(this.store)[method](...args)
|
|
).then(this.promise.bind(this))
|
|
}
|
|
getItem(name){
|
|
return this.transaction("get", name)
|
|
}
|
|
setItem(name, value){
|
|
return this.transaction("put", value, name)
|
|
}
|
|
removeItem(name){
|
|
return this.transaction("delete", name)
|
|
}
|
|
removeDB(){
|
|
delete this.db
|
|
return indexedDB.deleteDatabase(this.name)
|
|
}
|
|
}
|