102 lines
2.8 KiB
JavaScript
102 lines
2.8 KiB
JavaScript
var app = new Vue({
|
|
el: '#app',
|
|
data: {
|
|
urlParams: {},
|
|
author: {},
|
|
tab: "books"
|
|
},
|
|
methods: {
|
|
urlParse: function() {
|
|
var match,
|
|
pl = /\+/g, // Regex for replacing addition symbol with a space
|
|
search = /([^&=]+)=?([^&]*)/g,
|
|
decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
|
|
query = window.location.search.substring(1);
|
|
while (match = search.exec(query))
|
|
this.urlParams[decode(match[1])] = decode(match[2]);
|
|
},
|
|
sendQuery: function(url, error, success) {
|
|
var xmh = new XMLHttpRequest();
|
|
var v;
|
|
|
|
xmh.onreadystatechange = function() {
|
|
v = xmh.responseText;
|
|
if (xmh.readyState === 4 && xmh.status === 200) {
|
|
var res;
|
|
try {
|
|
res = JSON.parse(v);
|
|
} catch (err) {
|
|
if (null !== error)
|
|
error(err.name, err.message);
|
|
}
|
|
if (null !== success)
|
|
success(res);
|
|
} else if (xmh.readyState === 4) {
|
|
if (null !== error)
|
|
error(xmh.status, v);
|
|
}
|
|
};
|
|
|
|
xmh.open('GET', url, true);
|
|
xmh.send(null);
|
|
},
|
|
stdError: function(code, resp) {
|
|
console.log('ERROR ' + code + ': ' + resp);
|
|
},
|
|
authorSuccess: function(resp) {
|
|
this.author = resp;
|
|
document.title = this.author.name +' | Bouquins';
|
|
this.author.series=[];
|
|
this.author.authors=[];
|
|
if (this.author.books) {
|
|
var series = [];
|
|
var authors = [];
|
|
for (var i=0;i<this.author.books.length;i++) {
|
|
var book = this.author.books[i];
|
|
if (book.series)
|
|
series.push(book.series);
|
|
if (book.authors)
|
|
authors.push.apply(authors, book.authors);
|
|
}
|
|
if (series.length > 0) {
|
|
series.sort();
|
|
this.author.series = [series[0]];
|
|
for (var i=1;i<series.length;i++) {
|
|
if (series[i-1].id !== series[i].id)
|
|
this.author.series.push(series[i]);
|
|
}
|
|
}
|
|
if (authors.length > 0) {
|
|
authors.sort();
|
|
for (var i=0;i<authors.length;i++) {
|
|
if ((this.author.authors.length == 0
|
|
|| this.author.authors[this.author.authors.length] != authors[i])
|
|
&& authors[i].id != this.author.id)
|
|
this.author.authors.push(authors[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
},
|
|
showBooks: function() {
|
|
this.tab = "books";
|
|
},
|
|
showAuthors: function() {
|
|
this.tab = "authors";
|
|
},
|
|
showSeries: function() {
|
|
this.tab = "series";
|
|
},
|
|
loadAuthor: function() {
|
|
if (this.urlParams.id)
|
|
this.sendQuery('cgi-bin/bouquins/authors/' + this.urlParams.id, this.stdError, this.authorSuccess);
|
|
}
|
|
},
|
|
created: function() {
|
|
this.urlParse();
|
|
},
|
|
mounted: function() {
|
|
this.loadAuthor();
|
|
}
|
|
})
|