<div id="demo">
<h1>Latest Vue.js Commits</h1>
<input type="radio" id="master" name="branch" v-model="branch" value="master">
<label for="master">master</label>
<br>
<input type="radio" id="dev" name="branch" v-model="branch" value="dev">
<label for="dev">dev</label>
<ul>
<li v-repeat="commits">
<a href="{{html_url}}" target="_blank" class="commit">
{{sha.slice(0, 7)}}
</a>
- <span class="message">{{commit.message | truncate}}</span>
<br>
by <span class="author">{{commit.author.name}}</span>
at <span class="date">{{commit.author.date | formatDate}}</span>
</li>
</ul>
</div>
var apiUrl = 'https://api.github.com/repos/yyx990803/vue/commits?per_page=3&sha='
var demo = new Vue({
el: '#demo',
data: {
branch: 'master'
},
created: function () {
this.$watch('branch', function () {
this.fetchData()
})
},
filters: {
truncate: function (v) {
var newline = v.indexOf('\n')
return newline > -1 ? v.slice(0, newline) : v
},
formatDate: function (v) {
return v.replace(/T|Z/g, ' ')
}
},
methods: {
fetchData: function () {
var xhr = new XMLHttpRequest(),
self = this
xhr.open('GET', apiUrl + self.branch)
xhr.onload = function () {
self.commits = JSON.parse(xhr.responseText)
}
xhr.send()
}
}
})
#demo {
font-family:'Helvetica', Arial, sans-serif;
font-size: 13px;
padding-left: 15px;
}
a {
text-decoration: none;
color: #f66;
}
li {
line-height: 1.5em;
margin-bottom: 20px;
}
.author, .date {
font-weight: bold;
}