multiple choice when adding new feed

This commit is contained in:
Nazar Kanaev 2020-07-28 15:58:57 +01:00
parent 745ade6121
commit d83dda9ebf
4 changed files with 31 additions and 2 deletions

View File

@ -184,7 +184,7 @@ func FeedListHandler(rw http.ResponseWriter, req *http.Request) {
} }
writeJSON(rw, map[string]string{"status": "success"}) writeJSON(rw, map[string]string{"status": "success"})
} }
} else if strings.HasPrefix(contentType, "text/xml") || strings.HasPrefix(contentType, "application/xml") { } else if strings.HasPrefix(contentType, "text/xml") || strings.HasPrefix(contentType, "application/xml") || strings.HasPrefix(contentType, "application/rss+xml") {
err = createFeed(db(req), feedUrl, feed.FolderID) err = createFeed(db(req), feedUrl, feed.FolderID)
if err == nil { if err == nil {
writeJSON(rw, map[string]string{"status": "success"}) writeJSON(rw, map[string]string{"status": "success"})

View File

@ -188,12 +188,25 @@
<p class="cursor-default"><b>New Feed</b></p> <p class="cursor-default"><b>New Feed</b></p>
<form action="" @submit.prevent="createFeed(event)" class="mt-4"> <form action="" @submit.prevent="createFeed(event)" class="mt-4">
<label for="feed-url">URL</label> <label for="feed-url">URL</label>
<input id="feed-url" name="url" type="url" class="form-control" required autocomplete="off"> <input id="feed-url" name="url" type="url" class="form-control" required autocomplete="off" :readonly="feedNewChoice.length > 0">
<label for="feed-folder" class="mt-3">Folder</label> <label for="feed-folder" class="mt-3">Folder</label>
<select class="form-control" id="feed-folder" name="folder_id"> <select class="form-control" id="feed-folder" name="folder_id">
<option value=""></option> <option value=""></option>
<option :value="folder.id" v-for="folder in folders">{{ folder.title }}</option> <option :value="folder.id" v-for="folder in folders">{{ folder.title }}</option>
</select> </select>
<div class="mt-4" v-if="feedNewChoice.length">
<p class="mb-2">
Multiple feeds found. Choose one below:
<a href="#" class="float-right" @click.prevent="resetFeedChoice()">cancel</a>
</p>
<label class="selectgroup" v-for="choice in feedNewChoice">
<input type="radio" name="feedToAdd" :value="choice.url" v-model="feedNewChoiceSelected">
<div class="selectgroup-label">
<div>{{ choice.title }}</div>
<div :class="{light: choice.title}">{{ choice.url }}</div>
</div>
</label>
</div>
<button class="btn btn-block btn-default mt-3" :class="{loading: loading.newfeed}" type="submit">Add</button> <button class="btn btn-block btn-default mt-3" :class="{loading: loading.newfeed}" type="submit">Add</button>
</form> </form>
</div> </div>

View File

@ -117,6 +117,8 @@ var vm = new Vue({
'feeds': [], 'feeds': [],
'feedSelected': null, 'feedSelected': null,
'feedListWidth': null, 'feedListWidth': null,
'feedNewChoice': [],
'feedNewChoiceSelected': '',
'items': [], 'items': [],
'itemsPage': { 'itemsPage': {
'cur': 1, 'cur': 1,
@ -380,6 +382,9 @@ var vm = new Vue({
url: form.querySelector('input[name=url]').value, url: form.querySelector('input[name=url]').value,
folder_id: parseInt(form.querySelector('select[name=folder_id]').value) || null, folder_id: parseInt(form.querySelector('select[name=folder_id]').value) || null,
} }
if (this.feedNewChoiceSelected) {
data.url = this.feedNewChoiceSelected
}
this.loading.newfeed = true this.loading.newfeed = true
var vm = this var vm = this
api.feeds.create(data).then(function(result) { api.feeds.create(data).then(function(result) {
@ -388,6 +393,9 @@ var vm = new Vue({
vm.feeds = feeds vm.feeds = feeds
}) })
vm.$bvModal.hide('settings-modal') vm.$bvModal.hide('settings-modal')
} else if (result.status === 'multiple') {
vm.feedNewChoice = result.choice
vm.feedNewChoiceSelected = result.choice[0].url
} }
vm.loading.newfeed = false vm.loading.newfeed = false
}) })
@ -444,5 +452,9 @@ var vm = new Vue({
resizeItemList: function(width) { resizeItemList: function(width) {
this.itemListWidth = Math.min(Math.max(200, width), 700) this.itemListWidth = Math.min(Math.max(200, width), 700)
}, },
resetFeedChoice: function() {
this.feedNewChoice = []
this.feedNewChoiceSelected = ''
},
} }
}) })

View File

@ -146,6 +146,10 @@ select.form-control:not([multiple]):not([size]) {
opacity: .6; opacity: .6;
} }
.light {
opacity: .6;
}
.selectgroup { .selectgroup {
position: relative; position: relative;
display: block; display: block;