You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

90 lines
2.2 KiB

module.exports = class Repository {
constructor (id, data) {
this.id = id
this.isLoaded = false
if (data) {
this.data = data
this.lang = this.data.lang || {}
this.loadCallbacks = null
}
}
file_get_contents (fileName, options, callback) {
let param = []
param.push('repo=' + encodeURIComponent(this.id))
param.push('file=' + encodeURIComponent(fileName))
param.push(config.categoriesRev)
param = param.length ? '?' + param.join('&') : ''
fetch('repo.php' + param)
.then(res => res.text())
.then(data => {
global.setTimeout(() => {
callback(null, data)
}, 0)
})
.catch(err => {
global.setTimeout(() => {
callback(err)
}, 0)
})
}
load (callback) {
if (this.loadCallbacks) {
return this.loadCallbacks.push(callback)
}
this.loadCallbacks = [callback]
var param = []
param.push('repo=' + encodeURIComponent(this.id))
param.push('lang=' + encodeURIComponent(ui_lang))
param.push(config.categoriesRev)
param = param.length ? '?' + param.join('&') : ''
fetch('repo.php' + param)
.then(res => res.json())
.then(data => {
this.data = data
this.lang = this.data.lang || {}
this.err = null
global.setTimeout(() => {
const cbs = this.loadCallbacks
this.loadCallbacks = null
cbs.forEach(cb => cb(null))
}, 0)
})
.catch(err => {
this.err = err
global.setTimeout(() => {
const cbs = this.loadCallbacks
this.loadCallbacks = null
cbs.forEach(cb => cb(err))
}, 0)
})
}
clearCache () {
this.data = null
}
getCategory (id, options, callback) {
if (!(id in this.data.categories)) {
return callback(new Error('Repository ' + this.id + ': Category "' + id + '" not defined'), null)
}
callback(null, this.data.categories[id])
}
getTemplate (id, options, callback) {
if (!(id in this.data.templates)) {
return callback(new Error('Repository ' + this.id + ': Template "' + id + '" not defined'), null)
}
callback(null, this.data.templates[id])
}
}