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
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])
|
|
}
|
|
}
|