history.html 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. {% extends "base.html" %}
  2. {% block body %}
  3. <div id="app">
  4. <div class="md-layout">
  5. <div class="md-layout-item" md-card>
  6. <md-card id="main-card">
  7. <md-card-header>
  8. <div class="md-title">
  9. <md-button href="/" class="md-icon-button md-primary">
  10. <md-icon>home</md-icon>
  11. </md-button>
  12. Diffido - ${schedule && schedule.title} history
  13. </div>
  14. </md-card-header>
  15. <md-card-content>
  16. <md-table id="history-table" v-model="filtered_history">
  17. <md-table-toolbar>
  18. <md-switch v-model="show_empty" @change="toggleShowEmpty">show entries with no changes</md-switch>
  19. <br />
  20. <md-button class="md-button md-primary" @click="compareSelected()" :disabled="!(oldid && diff)">
  21. Compare selected revisions
  22. </md-button>
  23. </md-table-toolbar>
  24. <md-table-row slot="md-table-row" slot-scope="{item}">
  25. <md-table-cell>
  26. <div class="md-layout md-alignment-center-center">
  27. <div class="md-layout-item">
  28. (<a v-if="item.seq > 1" :href="'/diff.html?id=' + id + '&oldid=' + item.id + '&diff=' + last_id">cur</a><span v-if="item.seq == 1">cur</span>&nbsp;|&nbsp;<a :href="'/diff.html?id=' + id + '&diff=' + item.id">prev</a>)&nbsp;
  29. </div>
  30. <div class="md-layout-item">
  31. <md-radio name="oldid" v-model="oldid" :value="item.id" v-if="item.seq > 1" :seq="item.seq"></md-radio><span class="placeholder" v-if="item.seq == 1"></span>
  32. </div>
  33. <div class="md-layout-item">
  34. <md-radio name="diff" v-model="diff" :value="item.id" :seq="item.seq"></md-radio>
  35. </div>
  36. </div>
  37. </md-table-cell>
  38. <md-table-cell md-label="info" md-sort-by="id">
  39. Commit: <strong>${ prettifyCommitID(item) }</strong>
  40. <md-tooltip md-direction="bottom">${ item.id }</md-tooltip>
  41. <br />
  42. Changes: +${ item.insertions || 0 },-${ item.deletions || 0 }
  43. </md-table-cell>
  44. <md-table-cell md-label="date" md-sort-by="date">${ prettifyDate(item.message) }</md-table-cell>
  45. </md-table-row>
  46. </md-table>
  47. </md-card-content>
  48. </md-card>
  49. </div>
  50. </div>
  51. </div>
  52. <script>
  53. Vue.use(VueMaterial.default);
  54. var app = new Vue({
  55. el: '#app',
  56. delimiters: ['${', '}'],
  57. data: {
  58. show_empty: false,
  59. schedule: {},
  60. history: [],
  61. filtered_history: [],
  62. oldid: null,
  63. diff: null,
  64. last_id: null,
  65. {% if isinstance(id, str) %}
  66. id: "{{id}}",
  67. {% else %}
  68. id: null,
  69. {% end %}
  70. },
  71. mounted: function() {
  72. this.getHistory();
  73. },
  74. methods: {
  75. getHistory: function() {
  76. self = this;
  77. var data = axios.get('/api/schedules/' + this.id + '/history').then(function(response) {
  78. self.history = response.data.history;
  79. self.updateFilter();
  80. self.schedule = response.data.schedule;
  81. self.last_id = response.data.last_id;
  82. });
  83. },
  84. prettifyCommitID: function(item) {
  85. var cid = item.id || '';
  86. return cid.substring(0, 7);
  87. },
  88. prettifyDate: function(date) {
  89. if (!date) {
  90. return '';
  91. }
  92. return date.substring(0, date.indexOf('.'));
  93. },
  94. updateFilter: function() {
  95. if (this.show_empty) {
  96. this.filtered_history = this.history;
  97. return;
  98. }
  99. self = this;
  100. this.filtered_history = _.filter(self.history, 'changes');
  101. },
  102. toggleShowEmpty: function() {
  103. this.updateFilter();
  104. },
  105. compareSelected: function() {
  106. if (!(this.oldid && this.diff)) {
  107. return;
  108. }
  109. window.location = '/diff.html?id=' + this.id + '&oldid=' + this.oldid + '&diff=' + this.diff;
  110. }
  111. }
  112. });
  113. </script>
  114. {% end %}
  115. {% block style %}
  116. .placeholder {
  117. width: 36px;
  118. display: inline-block;
  119. }
  120. {% end %}