|
|
// Library item
|
|
var LibraryItem = {
|
|
template: `
|
|
<div class="col-xs-12 col-md-6 col-lg-4 library-col" v-on:click="onClick">
|
|
<div class="media library-item">
|
|
<img v-if="image" class="mr3 library-item-image" v-bind:src="prefix+image"></img>
|
|
<div v-else class="mr3 library-item-image" style="background-image: url(images/generic-book.png)"></div>
|
|
<div class="media-body">
|
|
<h5 class="mt-0 library-item-title">{{title}}</h5>
|
|
{{author}}
|
|
</div>
|
|
<img v-show="spinner" src="images/spinner-light.gif" class="library-item-spinner"/>
|
|
<img v-if="image" v-bind:src="prefix+image" v-on:error="onImageError" style="visibility:hidden;width:0px;height:0px;"/>
|
|
</div>
|
|
</div>
|
|
`,
|
|
props: ['title', 'author', 'image', 'url', 'prefix', 'spinner'],
|
|
methods: {
|
|
onClick: function() {
|
|
this.$emit('clicked');
|
|
},
|
|
onImageError: function() {
|
|
this.$emit('imageerror');
|
|
}
|
|
}
|
|
}
|
|
|
|
// Library Viewer component
|
|
var LibraryViewer = {
|
|
components: {'library-item': LibraryItem},
|
|
template: `
|
|
<div class="row">
|
|
<library-item v-for="(item,i) in library.database" :key="item.file"
|
|
v-bind:ref="'item'+(i++)"
|
|
v-bind:title="item.title"
|
|
v-bind:author="item.author"
|
|
v-bind:image="item.image"
|
|
v-bind:url="item.file"
|
|
v-bind:prefix="library.information.imageprefix"
|
|
v-on:clicked="bookClicked(item)"
|
|
v-on:imageerror="item.image=''"
|
|
v-bind:spinner="item.spinner">
|
|
</library-item>
|
|
</div>
|
|
`,
|
|
props: ['library'],
|
|
methods: {
|
|
bookClicked: function(book) {
|
|
this.$emit('bookselected', book);
|
|
}
|
|
}
|
|
};
|