switch to bootstrap-vue

This commit is contained in:
Nazar Kanaev 2020-06-26 23:56:24 +01:00
parent 312b4a54c1
commit 86afb37a53
7 changed files with 130 additions and 111 deletions

View File

@ -55,7 +55,7 @@
</div>
</div>
</div>
<button class="btn btn-link" @click="settingsShow = true">
<button class="btn btn-link" v-b-modal.settings-modal>
<img src="./static/images/settings.svg" alt="">
</button>
</div>
@ -91,15 +91,8 @@
</div>
</div>
</div>
<div class="modal" :class="{show: settingsShow, 'd-block': settingsShow}" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="card-header px-0">
<button type="button"
class="close mr-3"
@click="settingsShow = false">
<span aria-hidden="true">&times;</span>
</button>
<b-modal id="settings-modal" hide-footer lazy header-class="settings-header">
<template v-slot:modal-header="{ close }">
<ul class="nav nav-tabs card-header-tabs mx-0 px-3">
<li class="nav-item">
<a class="nav-link" href="#" :class="{active: settings=='create'}" @click.prevent="settings='create'">New Feed</a>
@ -111,8 +104,7 @@
<a class="nav-link" href="#" :class="{active: settings=='import'}" @click.prevent="settings='import'">Import/Export</a>
</li>
</ul>
</div>
<div class="modal-body">
</template>
<div v-if="settings=='create'">
<label for="feed-url">URL</label>
<input id="feed-url" type="text" class="form-control">
@ -132,32 +124,29 @@
</div>
<div class="flex-shrink-0">
<div class="dropdown d-inline-block">
<button class="btn btn-link p-1" @click="settingsManageDropdown='feed:'+feed.id">
<b-dropdown right no-caret lazy="true" variant="link" class="settings-dropdown" toggle-class="text-decoration-none">
<template v-slot:button-content>
<img src="./static/images/more-vertical.svg">
</button>
<div class="dropdown-menu menu-settings show overflow-hidden"
style="width: 200px; top: 0; left: 0; position: absolute; transform: translate3d(-160px, 38px, 0px);"
v-if="settingsManageDropdown=='feed:'+feed.id"
v-click-outside="hideSettingsMenu">
<a href="#" class="dropdown-item px-3" @click="renameFeed(feed)">
Rename
</a>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header px-3">Move to...</h6>
<a href="#" class="dropdown-item px-3"
@click.prevent="moveFeed(feed, null)" v-if="feed.folder_id">Uncategorized</a>
<a href="#" class="dropdown-item px-3"
</template>
<b-dropdown-item @click.prevent="renameFeed(feed)">Rename</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-header>Move to...</b-dropdown-header>
<b-dropdown-item
v-if="folder.id != feed.folder_id"
v-for="folder in folders"
@click.prevent="moveFeed(feed, folder)">
{{ folder.title }}
</a>
<div class="dropdown-divider"></div>
<a href="#" class="dropdown-item px-3 text-danger"
@click="deleteFeed(feed)">
</b-dropdown-item>
<b-dropdown-item
@click.prevent="moveFeed(feed, null)" v-if="feed.folder_id">
Uncategorized
</b-dropdown-item>
<b-dropdown-divider></b-dropdown-divider>
<b-dropdown-item class="dropdown-danger"
@click.prevent="deleteFeed(feed)">
Delete
</a>
</div>
</b-dropdown-item>
</b-dropdown>
</div>
</div>
</div>
@ -176,11 +165,10 @@
</div>
</div>
</div>
</div>
</div>
</div>
<script src="./static/javascripts/vue.min.js"></script>
<script src="./static/javascripts/v-click-outside.umd.js"></script>
<script src="./static/javascripts/popper.min.js"></script>
<!-- <script src="./static/javascripts/bootstrap.min.js"></script> -->
<script src="./static/javascripts/bootstrap-vue.min.js"></script>
<script src="./static/javascripts/app.js"></script>
</body>
</html>

View File

@ -6,8 +6,6 @@ var FILTERS = [
{'title': 'Starred', 'value': 'starred', 'icon': 'star'},
]
Vue.use(window['v-click-outside'])
var vm = new Vue({
el: '#app',
data: function() {
@ -32,10 +30,7 @@ var vm = new Vue({
{'id': '789', 'title': 'Marques Brownlee: Reflecting on the Color of My Skin', 'status': 'read', 'feed_id': 2, 'date': 1592250298},
],
'itemSelected': null,
'settingsShow': false,
'settings': 'manage',
'settingsManageDropdown': null,
'settingsManageEdit': null,
'newFolderTitle': null,
}
},
@ -72,18 +67,6 @@ var vm = new Vue({
'itemSelected': function(newVal, oldVal) {
this.itemSelectedDetails = this.itemsById[newVal]
},
'settingsShow': function(newVal) {
if (newVal === true) {
var vm = this
var backdrop = document.createElement('div')
backdrop.classList.add('modal-backdrop', 'fade', 'show')
document.body.classList.add('modal-open')
document.body.appendChild(backdrop)
} else {
document.body.classList.remove('modal-open')
document.body.querySelector('.modal-backdrop').remove()
}
},
},
methods: {
toggleFolderExpanded: function(folder) {
@ -95,7 +78,6 @@ var vm = new Vue({
},
moveFeed: function(feed, folder) {
feed.folder_id = folder ? folder.id : null
this.settingsManageDropdown = null
},
newFolderCreate: function() {
this.folders.push({
@ -107,19 +89,11 @@ var vm = new Vue({
renameFeed: function(feed) {
var newTitle = prompt('Enter new title', feed.title)
feed.title = newTitle
this.settingsManageDropdown = null
},
deleteFeed: function(feed) {
if (confirm('Are you sure you want to delete ' + feed.title + '?')) {
this.feeds = this.feeds.filter(function(f) { f.id != feed.id })
}
},
hideSettingsMenu: function() {
this.settingsManageDropdown = null
},
hideSettingsModal: function() {
this.settingsShow = false
},
}
})
vm.settingsShow = true

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,2 +0,0 @@
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e["v-click-outside"]=n()}(this,function(){var e="__v-click-outside",n="undefined"!=typeof window,t="undefined"!=typeof navigator,i=n&&("ontouchstart"in window||t&&navigator.msMaxTouchPoints>0)?["touchstart"]:["click"];function o(n,t){var o=function(e){var n="function"==typeof e;if(!n&&"object"!=typeof e)throw new Error("v-click-outside: Binding value must be a function or an object");return{handler:n?e:e.handler,middleware:e.middleware||function(e){return e},events:e.events||i,isActive:!(!1===e.isActive)}}(t.value),r=o.handler,d=o.middleware;o.isActive&&(n[e]=o.events.map(function(e){return{event:e,handler:function(e){return function(e){var n=e.el,t=e.event,i=e.handler,o=e.middleware,r=t.path||t.composedPath&&t.composedPath(),d=r?r.indexOf(n)<0:!n.contains(t.target);t.target!==n&&d&&o(t)&&i(t)}({event:e,el:n,handler:r,middleware:d})}}}),n[e].forEach(function(t){var i=t.event,o=t.handler;return setTimeout(function(){n[e]&&document.documentElement.addEventListener(i,o,!1)},0)}))}function r(n){(n[e]||[]).forEach(function(e){return document.documentElement.removeEventListener(e.event,e.handler,!1)}),delete n[e]}var d=n?{bind:o,update:function(e,n){var t=n.value,i=n.oldValue;JSON.stringify(t)!==JSON.stringify(i)&&(r(e),o(e,{value:t}))},unbind:r}:{};return{install:function(e){e.directive("click-outside",d)},directive:d}});
//# sourceMappingURL=v-click-outside.umd.js.map

View File

@ -78,3 +78,38 @@ body {
.dropdown-header {
cursor: default;
}
.dropdown-toggle-no-caret:after {
display: none;
}
.settings-dropdown .dropdown-toggle {
padding-left: 0;
padding-right: 0;
}
.settings-dropdown .dropdown-menu {
width: 200px;
box-shadow: 0px 1px 5px rgba(0, 0, 0, 0.07);
}
.settings-dropdown .dropdown-menu:focus {
outline: none;
}
.settings-dropdown .dropdown-item, .settings-dropdown .dropdown-header {
padding-left: 1rem;
padding-right: 1rem;
}
.dropdown-danger .dropdown-item {
color: #dc3545!important;
}
.settings-header {
padding: .75rem 0 !important;
}
.modal-backdrop {
background-color: rgba(0, 0, 0, 0.7);
}