Guest User

index.html

a guest
Dec 4th, 2018
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 4.70 KB | None | 0 0
  1.  
  2. <html>
  3.     <head>
  4.    
  5.         <title>Home - Minutes</title>
  6.    
  7.         <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8.         <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  9.         <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
  10.              integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
  11.  
  12.         <style>
  13.             #meetingContent {
  14.                 width:100%;
  15.                 height:90%;
  16.             }
  17.             .meetingItem:hover {
  18.                 background-color: lightgray;
  19.                 cursor: pointer;
  20.             }
  21.             .selectedItem {
  22.                 background-color: lightblue;
  23.             }
  24.         </style>
  25.  
  26.         <link rel="shortcut icon" href="/static/favicon.ico">
  27.  
  28.     </head>
  29.     <body>
  30.     <div class="container-fluid">
  31.         <div class="row">
  32.             <div class="col-10">
  33.                 <h3>Minutes</h3>
  34.             </div>
  35.             <div class="col-2 pull-right">
  36.                 <a href="/">Home</a>
  37.                
  38.                     <a href="/logout">Logout</a>
  39.                
  40.             </div>
  41.         </div>
  42.         <div class="row">
  43.             <div class="col-12">
  44.                
  45.                    
  46.                
  47.             </div>
  48.         </div>
  49.        
  50.  
  51. <div id="app">
  52.     <div class="row">
  53.         <div class="col-2">
  54.             <div
  55.                v-for="meeting in meetings"
  56.                v-on:click="loadMeeting(meeting)"
  57.                class="meetingItem"
  58.                v-bind:class="{selectedItem:meeting.id == selectedMeeting.id}">
  59.                 {{ meeting.content }}
  60.             </div>
  61.         </div>
  62.         <div class="col-10">
  63.             <textarea v-model="selectedMeeting.content" placeholder="Describe your meeting" ref="meetingContent" id="meetingContent"></textarea>
  64.         </div>
  65.     </div>
  66.     <div class="row">
  67.         <div class="col-2">
  68.  
  69.         </div>
  70.         <div class="col-8">
  71.             created: {{ selectedMeeting.created }}
  72.             <br>
  73.             updated: {{ selectedMeeting.updated }}
  74.         </div>
  75.         <div class="col-2">
  76.             <button v-on:click="saveMeeting" v-bind:disabled="meetingSaved">
  77.                 <div v-if="meetingSaved">{{ saveMeetingButton.savedText }}</div>
  78.                 <div v-else>{{ saveMeetingButton.saveText }}</div>
  79.             </button>
  80.             <button v-on:click="newMeeting">New Meeting</button>
  81.         </div>
  82.     </div>
  83. </div>
  84.  
  85.  
  86. <script>
  87.     new Vue({
  88.         el: '#app',
  89.         data: {
  90.             selectedMeeting: {content: null},
  91.             meetings: [],
  92.             meetingSaved: true,
  93.             saveMeetingButton: {saveText: 'Save Meeting', savedText: 'Saved', disabled: true},
  94.         },
  95.         created() {
  96.             axios.get('/ajax/meetings')
  97.                 .then(response => {
  98.                     this.meetings = response.data;
  99.                     this.selectedMeeting = this.meetings[0];
  100.                    
  101.                 });
  102.         },
  103.         methods: {
  104.             newMeeting: function () {
  105.                 // TODO: first present the new empty meeting and then get the response from the server
  106.                 axios.get('/ajax/meetings/new')
  107.                     .then(response => {
  108.                         this.selectedMeeting = response.data;
  109.                         this.meetings.unshift(this.selectedMeeting);
  110.                        
  111.                     });
  112.  
  113.             },
  114.             saveMeeting: function () {
  115.                 // TODO: do this every x seconds
  116.                 axios.post('/ajax/meetings/' + this.selectedMeeting.id, this.selectedMeeting)
  117.                     .then(function (response) {
  118.                         console.log(response);
  119.                         this.selectedMeeting = response.data;
  120.                         // TODO: Disable save button and set text to "Saved"
  121.                         console.log('now setting meetingSaved to true');
  122.                         this.meetingSaved = true;
  123.                         console.log('Done setting meetingSaved to true');
  124.                     });
  125.             },
  126.             loadMeeting: function (neededMeeting) {
  127.                 this.selectedMeeting = neededMeeting;
  128.                 this.$refs.meetingContent.focus();
  129.                
  130.             }
  131.         },
  132.         watch: {
  133.             'selectedMeeting.content': function () {
  134.                 this.meetingSaved = false;
  135.                 console.log('Changed meeting', new Date());
  136.                 //this.saveMeeting();
  137.             }
  138.         },
  139.     });
  140. </script>
  141.  
  142.  
  143.  
  144.     </div>
  145.     </body>
  146. </html>
Advertisement
Add Comment
Please, Sign In to add comment