schedule.html 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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-field>
  7. <label>title</label>
  8. <md-input v-model="schedule.title"></md-input>
  9. </md-field>
  10. <md-field>
  11. <label>url</label>
  12. <md-input v-model="schedule.url"></md-input>
  13. </md-field>
  14. <md-field>
  15. <label>trigger</label>
  16. <md-select v-model="schedule.trigger">
  17. <md-option value="interval">interval</md-option>
  18. <md-option value="cron">cron</md-option>
  19. </md-select>
  20. </md-field>
  21. <div v-if="schedule.trigger == 'interval'">
  22. <md-field>
  23. <label>weeks</label>
  24. <md-input v-model="schedule.interval_weeks" type="number"></md-input>
  25. </md-field>
  26. <md-field>
  27. <label>days</label>
  28. <md-input v-model="schedule.interval_days" type="number"></md-input>
  29. </md-field>
  30. <md-field>
  31. <label>hours</label>
  32. <md-input v-model="schedule.interval_hours" type="number"></md-input>
  33. </md-field>
  34. <md-field>
  35. <label>minutes</label>
  36. <md-input v-model="schedule.interval_minutes" type="number"></md-input>
  37. </md-field>
  38. <md-field>
  39. <label>seconds</label>
  40. <md-input v-model="schedule.interval_seconds" type="number"></md-input>
  41. </md-field>
  42. </div>
  43. <div v-if="schedule.trigger == 'cron'">
  44. <md-field>
  45. <label>crontab</label>
  46. <md-input v-model="schedule.cron_crontab"></md-input>
  47. </md-field>
  48. </div>
  49. <md-field>
  50. <label>notify email</label>
  51. <md-input v-model="schedule.email" type="email"></md-input>
  52. </md-field>
  53. <md-field>
  54. <label>XPath selector</label>
  55. <md-input v-model="schedule.xpath"></md-input>
  56. </md-field>
  57. <md-field>
  58. <label>minimum change</label>
  59. <md-input v-model="schedule.minimum_change"></md-input>
  60. </md-field>
  61. <md-switch v-model="schedule.enabled">enabled</md-switch>
  62. <br />
  63. <md-button class="md-raised md-primary" @click="saveSchedule()">save</md-button>
  64. <md-button class="md-raised md-accent" :disabled="!hasID()" @click="deleteSchedule()">delete</md-button>
  65. <md-button href="/">back</md-button>
  66. </div>
  67. </div>
  68. </div>
  69. <script>
  70. Vue.use(VueMaterial.default);
  71. var app = new Vue({
  72. el: '#app',
  73. delimiters: ['${', '}'],
  74. data: {
  75. {% if isinstance(id, str) %}
  76. id: "{{id}}",
  77. {% else %}
  78. id: null,
  79. {% end %}
  80. schedule: {},
  81. empty_schedule: {enabled: true, trigger: 'interval'}
  82. },
  83. mounted: function() {
  84. this.getSchedule(this.id);
  85. },
  86. computed: {
  87. },
  88. methods: {
  89. hasID: function() {
  90. return !(this.id === undefined || this.id === null || this.id === '');
  91. },
  92. getSchedule: function() {
  93. if (!this.hasID()) {
  94. this.schedule = this.empty_schedule;
  95. return;
  96. }
  97. self = this;
  98. var data = axios.get('/api/schedules/' + this.id).then(function(response) {
  99. self.schedule = response.data.schedule || self.empty_schedule;
  100. });
  101. },
  102. saveSchedule: function() {
  103. var data = this.schedule;
  104. if (this.hasID()) {
  105. axios.put('/api/schedules/' + this.id, data).then(function(response) {
  106. console.log(response);
  107. });
  108. } else {
  109. axios.post('/api/schedules', data).then(function(response) {
  110. console.log(response);
  111. window.location = '/schedule.html?id=' + response.data.id;
  112. });
  113. }
  114. },
  115. deleteSchedule: function() {
  116. if (!this.hasID()) {
  117. return;
  118. }
  119. axios.delete('/api/schedules/' + this.id).then(function(response) {
  120. window.location = '/';
  121. });
  122. }
  123. }
  124. });
  125. </script>
  126. <style>
  127. body {
  128. background-color: white;
  129. }
  130. </style>
  131. {% end %}