keep original article link in readable
This commit is contained in:
@@ -107,7 +107,7 @@ onMounted(async () => {
|
|||||||
<p class="feed-source">{{ feed.feedTitle }}</p>
|
<p class="feed-source">{{ feed.feedTitle }}</p>
|
||||||
<h2 @click="loadReadable(feed, index)" class="feed-title">{{ feed.title }}</h2>
|
<h2 @click="loadReadable(feed, index)" class="feed-title">{{ feed.title }}</h2>
|
||||||
<h3>{{ feed.timestamp }}</h3>
|
<h3>{{ feed.timestamp }}</h3>
|
||||||
<p v-if="!feed.readable" class="feed-original-link">
|
<p class="feed-original-link">
|
||||||
<a :href="feed.url" target="_blank" rel="noopener noreferrer">Read original article ↗</a>
|
<a :href="feed.url" target="_blank" rel="noopener noreferrer">Read original article ↗</a>
|
||||||
<button type="button" class="feed-share-btn" :title="shareLabel" @click="shareUrl(feed.url)" :aria-label="shareLabel">
|
<button type="button" class="feed-share-btn" :title="shareLabel" @click="shareUrl(feed.url)" :aria-label="shareLabel">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"/><polyline points="16 6 12 2 8 6"/><line x1="12" y1="2" x2="12" y2="15"/></svg>
|
||||||
@@ -144,7 +144,7 @@ onMounted(async () => {
|
|||||||
<p class="article-feature__source">{{ feeds[currentIndex].feedTitle }}</p>
|
<p class="article-feature__source">{{ feeds[currentIndex].feedTitle }}</p>
|
||||||
<h2 @click="loadReadable(feeds[currentIndex], currentIndex)" class="article-feature__title">{{ feeds[currentIndex].title }}</h2>
|
<h2 @click="loadReadable(feeds[currentIndex], currentIndex)" class="article-feature__title">{{ feeds[currentIndex].title }}</h2>
|
||||||
<h3 class="article-feature__meta">{{ feeds[currentIndex].timestamp }}</h3>
|
<h3 class="article-feature__meta">{{ feeds[currentIndex].timestamp }}</h3>
|
||||||
<p v-if="!feeds[currentIndex].readable" class="feed-original-link">
|
<p class="feed-original-link">
|
||||||
<a :href="feeds[currentIndex].url" target="_blank" rel="noopener noreferrer">Read original article ↗</a>
|
<a :href="feeds[currentIndex].url" target="_blank" rel="noopener noreferrer">Read original article ↗</a>
|
||||||
<button type="button" class="feed-share-btn" :title="shareLabel" @click="shareUrl(feeds[currentIndex].url)">{{ shareLabel }}</button>
|
<button type="button" class="feed-share-btn" :title="shareLabel" @click="shareUrl(feeds[currentIndex].url)">{{ shareLabel }}</button>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -184,10 +184,7 @@ describe('RssFeeds', () => {
|
|||||||
expect(titles).toEqual(['Newer article', 'Older article'])
|
expect(titles).toEqual(['Newer article', 'Older article'])
|
||||||
})
|
})
|
||||||
|
|
||||||
it('shows a link to the original article until the readable version is loaded', async () => {
|
it('keeps a link to the original article visible after the readable version is loaded', async () => {
|
||||||
// The API returns each item with a short summary already in `content` —
|
|
||||||
// the link must key off the `readable` flag (set once Readability has
|
|
||||||
// parsed the full article), not off `content` truthiness.
|
|
||||||
axios.get.mockResolvedValueOnce({
|
axios.get.mockResolvedValueOnce({
|
||||||
data: {
|
data: {
|
||||||
feeds: [
|
feeds: [
|
||||||
@@ -226,7 +223,9 @@ describe('RssFeeds', () => {
|
|||||||
await wrapper.find('.feed-title').trigger('click')
|
await wrapper.find('.feed-title').trigger('click')
|
||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|
||||||
expect(wrapper.find('.feed-original-link a').exists()).toBe(false)
|
const linkAfter = wrapper.find('.feed-original-link a')
|
||||||
|
expect(linkAfter.exists()).toBe(true)
|
||||||
|
expect(linkAfter.attributes('href')).toBe('https://example.test/1')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('switches to article view and navigates between articles', async () => {
|
it('switches to article view and navigates between articles', async () => {
|
||||||
@@ -277,7 +276,7 @@ describe('RssFeeds', () => {
|
|||||||
await flushPromises()
|
await flushPromises()
|
||||||
|
|
||||||
expect(axios.post).toHaveBeenCalledWith('/api/v1/article/read', { url: 'https://example.test/1' }, expect.anything())
|
expect(axios.post).toHaveBeenCalledWith('/api/v1/article/read', { url: 'https://example.test/1' }, expect.anything())
|
||||||
expect(wrapper.find('.article-single .feed-original-link a').exists()).toBe(false)
|
expect(wrapper.find('.article-single .feed-original-link a').exists()).toBe(true)
|
||||||
|
|
||||||
expect(wrapper.findAll('.article-nav__btn')[0].attributes('disabled')).toBeDefined()
|
expect(wrapper.findAll('.article-nav__btn')[0].attributes('disabled')).toBeDefined()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user