auto-load URLs for preview+link when opening the dropdown
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
<template>
|
||||
<ui-dropdown-button v-if="hasPreview" label="@page.preview.title" icon="fth-eye" :disabled="disabled" :prevent="true" @click="openPreview" />
|
||||
<ui-dropdown-button v-if="hasLink" label="@ui.open.title" icon="fth-external-link" :disabled="disabled" :prevent="true" @click="openLink" />
|
||||
<!--<a v-if="hasLink" :href="urlLinkAbsolute" target="_blank" :disabled="disabled || !urlLink" type="button" class="ui-dropdown-button has-icon is-multiline" @click="dropdown.hide()">
|
||||
<!--<ui-dropdown-button v-if="hasPreview" label="@page.preview.title" icon="fth-eye" :disabled="disabled || !urlLink" @click="openPreview" />
|
||||
<ui-dropdown-button v-if="hasLink" label="@ui.open.title" icon="fth-external-link" :disabled="disabled || !urlLink" @click="openLink" />-->
|
||||
|
||||
<ui-link v-if="hasPreview" :to="{ name: 'preview', query: { path: urlLink }}" target="preview" :disabled="disabled || !urlLink" type="button" class="ui-dropdown-button has-icon" @click="dropdown.hide()">
|
||||
<ui-icon symbol="fth-eye" class="ui-dropdown-button-icon" />
|
||||
<span class="-name"><ui-localize value="@page.preview.title" /></span>
|
||||
</ui-link>
|
||||
<a v-if="hasLink" :href="urlLinkAbsolute" target="_blank" :disabled="disabled || !urlLink" type="button" class="ui-dropdown-button has-icon" @click="dropdown.hide()">
|
||||
<ui-icon symbol="fth-external-link" class="ui-dropdown-button-icon" />
|
||||
<span class="-name"><ui-localize value="@ui.open.title" /><span class="-minor" v-if="false && urlLink" :title="urlLink">{{urlLink}}</span></span>
|
||||
</a>-->
|
||||
</a>
|
||||
<ui-dropdown-separator v-if="hasPreview || hasLink" />
|
||||
</template>
|
||||
|
||||
@@ -36,18 +41,21 @@
|
||||
dropdown: null,
|
||||
urlList: [],
|
||||
urlDomain: null,
|
||||
urlPreview: null
|
||||
urlPreview: null,
|
||||
failed: false
|
||||
}),
|
||||
|
||||
watch: {
|
||||
'value.lastModifiedDate'()
|
||||
{
|
||||
this.reloadUrls();
|
||||
this.loadUrls();
|
||||
}
|
||||
},
|
||||
|
||||
mounted()
|
||||
{
|
||||
this.loadUrls();
|
||||
|
||||
let current = this;
|
||||
do
|
||||
{
|
||||
@@ -68,11 +76,11 @@
|
||||
computed: {
|
||||
hasPreview()
|
||||
{
|
||||
return this.value && typeof this.url === 'function' && this.previewEnabled;
|
||||
return !this.failed && this.value && typeof this.url === 'function' && this.previewEnabled;
|
||||
},
|
||||
hasLink()
|
||||
{
|
||||
return this.value && typeof this.url === 'function';
|
||||
return !this.failed && this.value && typeof this.url === 'function';
|
||||
},
|
||||
urlLink()
|
||||
{
|
||||
@@ -88,33 +96,22 @@
|
||||
async loadUrls()
|
||||
{
|
||||
const result = await this.url(this.value);
|
||||
this.urlList = result.data.urls ? result.data.urls : [result.data.url];
|
||||
this.urlList = result.data.urls ? result.data.urls : (result.data.url ? [result.data.url] : []);
|
||||
this.urlDomain = result.data.domain;
|
||||
this.failed = this.urlList.length < 1 || !result.data.domain;
|
||||
},
|
||||
|
||||
async openPreview(_, opts)
|
||||
{
|
||||
opts.loading(true);
|
||||
await this.loadUrls();
|
||||
opts.loading(false);
|
||||
if (this.urlLink)
|
||||
{
|
||||
var resolved = this.$router.resolve({ name: 'preview', query: { path: this.urlLink } });
|
||||
window.open(window.location.origin + resolved.href, 'preview');
|
||||
opts.hide();
|
||||
}
|
||||
var resolved = this.$router.resolve({ name: 'preview', query: { path: this.urlLink } });
|
||||
window.open(window.location.origin + resolved.href, 'preview');
|
||||
opts.hide();
|
||||
},
|
||||
|
||||
async openLink(_, opts)
|
||||
{
|
||||
opts.loading(true);
|
||||
await this.loadUrls();
|
||||
opts.loading(false);
|
||||
if (this.urlLink)
|
||||
{
|
||||
window.open(this.urlLinkAbsolute, '_blank');
|
||||
opts.hide();
|
||||
}
|
||||
window.open(this.urlLinkAbsolute, '_blank');
|
||||
opts.hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user