mirror of
https://github.com/lnbits/lnbits.git
synced 2025-10-04 18:33:10 +02:00
gave up on seperate js install file
This commit is contained in:
@@ -1,161 +0,0 @@
|
|||||||
new Vue({
|
|
||||||
el: '#vue',
|
|
||||||
data: function () {
|
|
||||||
return {
|
|
||||||
searchTerm: '',
|
|
||||||
tab: 'all',
|
|
||||||
filteredExtensions: null,
|
|
||||||
showUninstallDialog: false,
|
|
||||||
showUpgradeDialog: false,
|
|
||||||
selectedExtension: null,
|
|
||||||
selectedExtensionRepos: null,
|
|
||||||
maxStars: 5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
watch: {
|
|
||||||
searchTerm(term) {
|
|
||||||
this.filterExtensions(term, this.tab)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
handleTabChanged: function (tab) {
|
|
||||||
this.filterExtensions(this.searchTerm, tab)
|
|
||||||
},
|
|
||||||
filterExtensions(term, tab) {
|
|
||||||
// Filter the extensions list
|
|
||||||
function extensionNameContains(searchTerm) {
|
|
||||||
return function (extension) {
|
|
||||||
return (
|
|
||||||
extension.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
||||||
extension.shortDescription
|
|
||||||
?.toLowerCase()
|
|
||||||
.includes(searchTerm.toLowerCase())
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.filteredExtensions = this.extensions
|
|
||||||
.filter(e => (tab === 'installed' ? e.isInstalled : true))
|
|
||||||
.filter(e => (tab === 'featured' ? e.isFeatured : true))
|
|
||||||
.filter(extensionNameContains(term))
|
|
||||||
},
|
|
||||||
async installExtension(release) {
|
|
||||||
const extension = this.selectedExtension
|
|
||||||
try {
|
|
||||||
extension.inProgress = true
|
|
||||||
this.showUpgradeDialog = false
|
|
||||||
await LNbits.api.request(
|
|
||||||
'POST',
|
|
||||||
`/api/v1/extension?usr=${this.g.user.id}`,
|
|
||||||
this.g.user.wallets[0].adminkey,
|
|
||||||
{
|
|
||||||
ext_id: extension.id,
|
|
||||||
archive: release.archive,
|
|
||||||
source_repo: release.source_repo
|
|
||||||
}
|
|
||||||
)
|
|
||||||
window.location.href = [
|
|
||||||
"{{ url_for('install.extensions') }}",
|
|
||||||
'?usr=',
|
|
||||||
this.g.user.id
|
|
||||||
].join('')
|
|
||||||
} catch (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
extension.inProgress = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async uninstallExtension() {
|
|
||||||
const extension = this.selectedExtension
|
|
||||||
this.showUpgradeDialog = false
|
|
||||||
this.showUninstallDialog = false
|
|
||||||
try {
|
|
||||||
extension.inProgress = true
|
|
||||||
await LNbits.api.request(
|
|
||||||
'DELETE',
|
|
||||||
`/api/v1/extension/${extension.id}?usr=${this.g.user.id}`,
|
|
||||||
this.g.user.wallets[0].adminkey
|
|
||||||
)
|
|
||||||
window.location.href = [
|
|
||||||
"{{ url_for('install.extensions') }}",
|
|
||||||
'?usr=',
|
|
||||||
this.g.user.id
|
|
||||||
].join('')
|
|
||||||
} catch (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
extension.inProgress = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
toggleExtension: function (extension) {
|
|
||||||
const action = extension.isActive ? 'activate' : 'deactivate'
|
|
||||||
window.location.href = [
|
|
||||||
"{{ url_for('install.extensions') }}",
|
|
||||||
'?usr=',
|
|
||||||
this.g.user.id,
|
|
||||||
`&${action}=`,
|
|
||||||
extension.id
|
|
||||||
].join('')
|
|
||||||
},
|
|
||||||
|
|
||||||
showUninstall() {
|
|
||||||
this.showUpgradeDialog = false
|
|
||||||
this.showUninstallDialog = true
|
|
||||||
},
|
|
||||||
|
|
||||||
async showUpgrade(extension) {
|
|
||||||
this.selectedExtension = extension
|
|
||||||
this.showUpgradeDialog = true
|
|
||||||
this.selectedExtensionRepos = null
|
|
||||||
try {
|
|
||||||
const {data} = await LNbits.api.request(
|
|
||||||
'GET',
|
|
||||||
`/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`,
|
|
||||||
this.g.user.wallets[0].adminkey
|
|
||||||
)
|
|
||||||
|
|
||||||
this.selectedExtensionRepos = data.reduce((repos, release) => {
|
|
||||||
repos[release.source_repo] = repos[release.source_repo] || {
|
|
||||||
releases: [],
|
|
||||||
isInstalled: false
|
|
||||||
}
|
|
||||||
release.isInstalled = this.isInstalledVersion(
|
|
||||||
this.selectedExtension,
|
|
||||||
release
|
|
||||||
)
|
|
||||||
if (release.isInstalled) {
|
|
||||||
repos[release.source_repo].isInstalled = true
|
|
||||||
}
|
|
||||||
repos[release.source_repo].releases.push(release)
|
|
||||||
return repos
|
|
||||||
}, {})
|
|
||||||
} catch (error) {
|
|
||||||
LNbits.utils.notifyApiError(error)
|
|
||||||
extension.inProgress = false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
hasNewVersion: function (extension) {
|
|
||||||
if (extension.installedRelease && extension.latestRelease) {
|
|
||||||
return (
|
|
||||||
extension.installedRelease.version !== extension.latestRelease.version
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
isInstalledVersion: function (extension, release) {
|
|
||||||
if (extension.installedRelease) {
|
|
||||||
return (
|
|
||||||
extension.installedRelease.source_repo === release.source_repo &&
|
|
||||||
extension.installedRelease.version === release.version
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created() {
|
|
||||||
console.log(window.extensions)
|
|
||||||
console.log(window.user)
|
|
||||||
this.extensions = JSON.parse(window.extensions).map(e => ({
|
|
||||||
...e,
|
|
||||||
inProgress: false
|
|
||||||
}))
|
|
||||||
this.filteredExtensions = this.extensions.concat([])
|
|
||||||
},
|
|
||||||
mixins: [windowMixin]
|
|
||||||
})
|
|
@@ -97,13 +97,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<p>Extensions Manifests</p>
|
<p>Extension Sources</p>
|
||||||
<q-input
|
<q-input
|
||||||
filled
|
filled
|
||||||
v-model="formAddExtensionsManifest"
|
v-model="formAddExtensionsManifest"
|
||||||
@keydown.enter="addExtensionsManifest"
|
@keydown.enter="addExtensionsManifest"
|
||||||
type="text"
|
type="text"
|
||||||
label="Manifest URL"
|
label="Source URL (only use the official LNbits extension source, and sources you can trust)"
|
||||||
hint="Repositories from where the extensions can be downloaded"
|
hint="Repositories from where the extensions can be downloaded"
|
||||||
>
|
>
|
||||||
<q-btn @click="addExtensionsManifest" dense flat icon="add"></q-btn>
|
<q-btn @click="addExtensionsManifest" dense flat icon="add"></q-btn>
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context
|
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context
|
||||||
%} {{ window_vars(user, extensions) }} {% block scripts %}
|
%} {{ window_vars(user, extensions) }}{% block page %}
|
||||||
<script src="/core/static/js/install.js"></script>
|
|
||||||
{% endblock %} {% block page %}
|
|
||||||
<div class="row q-col-gutter-md q-mb-md">
|
<div class="row q-col-gutter-md q-mb-md">
|
||||||
<div class="col-sm-9 col-xs-12">
|
<div class="col-sm-9 col-xs-12">
|
||||||
<p class="text-h4 gt-sm">
|
<p class="text-h4 gt-sm">
|
||||||
Add Extensions <small v-if="!g.user.admin">(admin only)</small>
|
Add Extensions<small v-if="!g.user.admin">(admin only)</small>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -65,7 +63,7 @@
|
|||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<q-img
|
<q-img
|
||||||
v-if="extension.iconUrl"
|
v-if="extension.iconUrl"
|
||||||
:src="extension.iconUrl"
|
src="extension.iconUrl"
|
||||||
spinner-color="white"
|
spinner-color="white"
|
||||||
style="max-width: 100%"
|
style="max-width: 100%"
|
||||||
></q-img>
|
></q-img>
|
||||||
@@ -317,3 +315,172 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% block scripts %}
|
||||||
|
<script >
|
||||||
|
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
el: '#vue',
|
||||||
|
mixins: [windowMixin],
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
searchTerm: '',
|
||||||
|
tab: 'all',
|
||||||
|
filteredExtensions: null,
|
||||||
|
showUninstallDialog: false,
|
||||||
|
showUpgradeDialog: false,
|
||||||
|
selectedExtension: null,
|
||||||
|
selectedExtensionRepos: null,
|
||||||
|
maxStars: 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
searchTerm(term) {
|
||||||
|
this.filterExtensions(term, this.tab)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleTabChanged: function (tab) {
|
||||||
|
this.filterExtensions(this.searchTerm, tab)
|
||||||
|
},
|
||||||
|
filterExtensions(term, tab) {
|
||||||
|
// Filter the extensions list
|
||||||
|
function extensionNameContains(searchTerm) {
|
||||||
|
return function (extension) {
|
||||||
|
return (
|
||||||
|
extension.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
||||||
|
extension.shortDescription
|
||||||
|
?.toLowerCase()
|
||||||
|
.includes(searchTerm.toLowerCase())
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.filteredExtensions = this.extensions
|
||||||
|
.filter(e => (tab === 'installed' ? e.isInstalled : true))
|
||||||
|
.filter(e => (tab === 'featured' ? e.isFeatured : true))
|
||||||
|
.filter(extensionNameContains(term))
|
||||||
|
},
|
||||||
|
async installExtension(release) {
|
||||||
|
const extension = this.selectedExtension
|
||||||
|
try {
|
||||||
|
extension.inProgress = true
|
||||||
|
this.showUpgradeDialog = false
|
||||||
|
await LNbits.api.request(
|
||||||
|
'POST',
|
||||||
|
`/api/v1/extension?usr=${this.g.user.id}`,
|
||||||
|
this.g.user.wallets[0].adminkey,
|
||||||
|
{
|
||||||
|
ext_id: extension.id,
|
||||||
|
archive: release.archive,
|
||||||
|
source_repo: release.source_repo
|
||||||
|
}
|
||||||
|
)
|
||||||
|
window.location.href = [
|
||||||
|
"{{ url_for('install.extensions') }}",
|
||||||
|
'?usr=',
|
||||||
|
this.g.user.id
|
||||||
|
].join('')
|
||||||
|
} catch (error) {
|
||||||
|
LNbits.utils.notifyApiError(error)
|
||||||
|
extension.inProgress = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async uninstallExtension() {
|
||||||
|
const extension = this.selectedExtension
|
||||||
|
this.showUpgradeDialog = false
|
||||||
|
this.showUninstallDialog = false
|
||||||
|
try {
|
||||||
|
extension.inProgress = true
|
||||||
|
await LNbits.api.request(
|
||||||
|
'DELETE',
|
||||||
|
`/api/v1/extension/${extension.id}?usr=${this.g.user.id}`,
|
||||||
|
this.g.user.wallets[0].adminkey
|
||||||
|
)
|
||||||
|
window.location.href = [
|
||||||
|
"{{ url_for('install.extensions') }}",
|
||||||
|
'?usr=',
|
||||||
|
this.g.user.id
|
||||||
|
].join('')
|
||||||
|
} catch (error) {
|
||||||
|
LNbits.utils.notifyApiError(error)
|
||||||
|
extension.inProgress = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
toggleExtension: function (extension) {
|
||||||
|
const action = extension.isActive ? 'activate' : 'deactivate'
|
||||||
|
window.location.href = [
|
||||||
|
"{{ url_for('install.extensions') }}",
|
||||||
|
'?usr=',
|
||||||
|
this.g.user.id,
|
||||||
|
`&${action}=`,
|
||||||
|
extension.id
|
||||||
|
].join('')
|
||||||
|
},
|
||||||
|
|
||||||
|
showUninstall() {
|
||||||
|
this.showUpgradeDialog = false
|
||||||
|
this.showUninstallDialog = true
|
||||||
|
},
|
||||||
|
|
||||||
|
async showUpgrade(extension) {
|
||||||
|
this.selectedExtension = extension
|
||||||
|
this.showUpgradeDialog = true
|
||||||
|
this.selectedExtensionRepos = null
|
||||||
|
try {
|
||||||
|
const {data} = await LNbits.api.request(
|
||||||
|
'GET',
|
||||||
|
`/api/v1/extension/${extension.id}/releases?usr=${this.g.user.id}`,
|
||||||
|
this.g.user.wallets[0].adminkey
|
||||||
|
)
|
||||||
|
|
||||||
|
this.selectedExtensionRepos = data.reduce((repos, release) => {
|
||||||
|
repos[release.source_repo] = repos[release.source_repo] || {
|
||||||
|
releases: [],
|
||||||
|
isInstalled: false
|
||||||
|
}
|
||||||
|
release.isInstalled = this.isInstalledVersion(
|
||||||
|
this.selectedExtension,
|
||||||
|
release
|
||||||
|
)
|
||||||
|
if (release.isInstalled) {
|
||||||
|
repos[release.source_repo].isInstalled = true
|
||||||
|
}
|
||||||
|
repos[release.source_repo].releases.push(release)
|
||||||
|
return repos
|
||||||
|
}, {})
|
||||||
|
} catch (error) {
|
||||||
|
LNbits.utils.notifyApiError(error)
|
||||||
|
extension.inProgress = false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hasNewVersion: function (extension) {
|
||||||
|
if (extension.installedRelease && extension.latestRelease) {
|
||||||
|
return (
|
||||||
|
extension.installedRelease.version !== extension.latestRelease.version
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
isInstalledVersion: function (extension, release) {
|
||||||
|
if (extension.installedRelease) {
|
||||||
|
return (
|
||||||
|
extension.installedRelease.source_repo === release.source_repo &&
|
||||||
|
extension.installedRelease.version === release.version
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
console.log('{{extensions}}')
|
||||||
|
console.log(this.extensions)
|
||||||
|
this.extensions = JSON.parse(window.extensions).map(e => ({
|
||||||
|
...e,
|
||||||
|
inProgress: false
|
||||||
|
}))
|
||||||
|
this.filteredExtensions = this.extensions.concat([])
|
||||||
|
},
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
Reference in New Issue
Block a user