Browse Source

[192-webreport] Added links to matches in code panel, added colors to match list, set cursor to pointer for clickable areas

Evgeni 4 years ago
parent
commit
60eee93520
38 changed files with 100 additions and 18 deletions
  1. 10 0
      report-viewer/src/App.vue
  2. 36 3
      report-viewer/src/components/CodePanel.vue
  3. 28 6
      report-viewer/src/components/LineOfCode.vue
  4. 11 3
      report-viewer/src/components/MatchList.vue
  5. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf
  6. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.ttf
  7. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.ttf
  8. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.ttf
  9. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.ttf
  10. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.ttf
  11. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf
  12. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Light.ttf
  13. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-LightItalic.ttf
  14. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Medium.ttf
  15. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.ttf
  16. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf
  17. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-SemiBold.ttf
  18. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-SemiBoldItalic.ttf
  19. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Thin.ttf
  20. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.ttf
  21. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Bold.ttf
  22. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-BoldItalic.ttf
  23. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraBold.ttf
  24. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraBoldItalic.ttf
  25. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraLight.ttf
  26. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraLightItalic.ttf
  27. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Italic.ttf
  28. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Light.ttf
  29. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-LightItalic.ttf
  30. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Medium.ttf
  31. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-MediumItalic.ttf
  32. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Regular.ttf
  33. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-SemiBold.ttf
  34. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-SemiBoldItalic.ttf
  35. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Thin.ttf
  36. BIN
      report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ThinItalic.ttf
  37. 2 2
      report-viewer/src/utils/Utils.ts
  38. 13 4
      report-viewer/src/views/ComparisonView.vue

+ 10 - 0
report-viewer/src/App.vue

@@ -4,6 +4,16 @@
 </template>
 
 <style>
+@font-face {
+  font-family: "JetBrains Mono";
+  src: url("./fonts/jetbrains-mono/JetBrainsMono-Light.ttf");
+}
+
+@font-face {
+  font-family: "JetBrains Mono";
+  src: url("./fonts/jetbrains-mono/JetBrainsMono-Bold.ttf");
+  font-weight: bold;
+}
 #app {
   font-family: Avenir, Helvetica, Arial, sans-serif;
   -webkit-font-smoothing: antialiased;

+ 36 - 3
report-viewer/src/components/CodePanel.vue

@@ -1,7 +1,14 @@
 <template>
   <div class="code-container">
-    <LineOfCode v-for="(line, index) in lines" :key="index" :color="coloringArray[index]" :line-number="index" :text="line"
-    :id="panelId.concat(index)"/>
+    <LineOfCode v-for="(line, index) in lines"
+                :key="index"
+                :color="coloringArray[index]"
+                :line-number="index"
+                :text="line"
+                :id="panelId.concat(index)"
+                :match-link="linksArray[index]"
+                :is-last="isLast[index]"
+                :is-first="isFirst[index]"/>
   </div>
 </template>
 
@@ -27,14 +34,27 @@ export default defineComponent({
   setup(props) {
     console.log(JSON.stringify(props.coloring))
     const coloringArray = ref({})
+    const linksArray = ref({})
+    const isLast = ref({})
+    const isFirst = ref({})
     props.coloring.forEach(m => {
       for (let i = m.start; i <= m.end; i++) {
         coloringArray.value[i] = m.color
+        linksArray.value[i] = props.panelId === "1" ? "2".concat(m.link) : "1".concat(m.link)
+        if(i === m.start) {
+          isFirst.value[i] = true
+        }
+        if(i === m.end) {
+          isLast.value[i] = true
+        }
       }
     })
     for(let i = 0; i < props.lines.length; i++) {
       if(!coloringArray.value[i]) {
         coloringArray.value[i] = "#ECECEC"
+        linksArray.value[i] = "-1"
+        isFirst.value[i] = false
+        isLast.value[i] = false
       }
     }
     watchEffect(() => {
@@ -42,16 +62,29 @@ export default defineComponent({
       props.coloring.forEach(m => {
         for (let i = m.start; i <= m.end; i++) {
           coloringArray.value[i] = m.color
+          linksArray.value[i] = props.panelId === "1" ? "2".concat(m.link) : "1".concat(m.link)
+          if(i === m.start) {
+            isFirst.value[i] = true
+          }
+          if(i === m.end) {
+            isLast.value[i] = true
+          }
         }
       })
       for(let i = 0; i < props.lines.length; i++) {
         if(!coloringArray.value[i]) {
           coloringArray.value[i] = "#ECECEC"
+          linksArray.value[i] = "-1"
+          isFirst.value[i] = false
+          isLast.value[i] = false
         }
       }
     })
     return {
-      coloringArray
+      coloringArray,
+      linksArray,
+      isFirst,
+      isLast
     }
   }
 })

+ 28 - 6
report-viewer/src/components/LineOfCode.vue

@@ -1,6 +1,6 @@
 <template>
-  <div class="line-wrap" :style="{background : color}">
-<pre :id="text" v-bind:class="{ blurred : isBlurred }" >{{ lineNumber }} {{ text }}</pre>
+  <div class="line-wrap" :style="{background : color}" :class="{'first-line' : isFirst, 'last-line' : isLast}" @click="linkMatch">
+    <pre :id="text" v-bind:class="{ blurred : isBlurred, 'match-line' : color !== '#ECECEC' }">{{ lineNumber }} {{ text }}</pre>
   </div>
 </template>
 
@@ -24,12 +24,25 @@ export default defineComponent({
     },
     startOfMatch: {
       type: Number
+    },
+    matchLink: {
+      type: String
+    },
+    isFirst: {
+      type: Boolean,
+    },
+    isLast: {
+      type: Boolean,
     }
   },
   setup(props) {
-    document.getEleme
+    const linkMatch = () => {
+      if(props.matchLink !== "-1") {
+        document.getElementById(props.matchLink).scrollIntoView()
+      }
+    }
     return {
-
+      linkMatch
     }
   }
 })
@@ -40,15 +53,24 @@ pre {
   margin: 0;
   padding: 0;
   float: left;
-
+  font-family: "JetBrains Mono";
+  font-size: x-small;
 }
 .blurred {
   filter: blur(2px);
   -webkit-filter: blur(2px);
 }
+.first-line {
+  margin-top: 2%;
+}
+.last-line {
+  margin-bottom: 2%;
+  box-shadow: #777777 0 3px 3px;
+}
+.match-line {
+}
 .line-wrap {
   width: 200%;
 }
 
-
 </style>

+ 11 - 3
report-viewer/src/components/MatchList.vue

@@ -17,8 +17,11 @@
       </th>
       <th>Tokens</th>
     </tr>
-    <tr class="selectable-row" v-for="match in matches[selectedSplit[0]][selectedSplit[1]]" :key="match.start_in_first + match.end_in_first"
-        @click="this.$emit('matchSelected', $event, match.start_in_first, match.end_in_first, match.start_in_second, match.end_in_second)">
+    <tr class="selectable-row" v-for="match in matches[selectedSplit[0]][selectedSplit[1]]"
+        :key="match.start_in_first + match.end_in_first"
+        @click="this.$emit('matchSelected', $event, match.start_in_first, match.end_in_first, match.start_in_second, match.end_in_second)"
+        :style="{background : match.color}"
+    >
       <td>{{ match.start_in_first }} - {{ match.end_in_first }}</td>
       <td>{{ match.start_in_second }} - {{ match.end_in_second }}</td>
       <td>TODO</td>
@@ -97,6 +100,10 @@ select {
   border-bottom: solid rgba(119, 119, 119, 0.20);
 }
 
+option {
+  text-align: center;
+}
+
 table {
   border-collapse: collapse;
 }
@@ -111,6 +118,7 @@ th > p {
 
 tr {
   border-bottom: solid rgba(119, 119, 119, 0.20);
+  border-radius: 10px;
 }
 
 td {
@@ -118,8 +126,8 @@ td {
 }
 
 .selectable-row:hover {
-  background: #FF5353;
   color: white;
+  cursor: pointer;
 }
 
 </style>

BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Bold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-BoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraBold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraBoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraLight.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ExtraLightItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Italic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Light.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-LightItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Medium.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-MediumItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Regular.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-SemiBold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-SemiBoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-Thin.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMono-ThinItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Bold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-BoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraBold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraBoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraLight.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ExtraLightItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Italic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Light.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-LightItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Medium.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-MediumItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Regular.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-SemiBold.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-SemiBoldItalic.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-Thin.ttf


BIN
report-viewer/src/fonts/jetbrains-mono/JetBrainsMonoNL-ThinItalic.ttf


+ 2 - 2
report-viewer/src/utils/Utils.ts

@@ -13,11 +13,11 @@ export function generateColoringArray(array: Array<Record<string, unknown>>, fil
         case 1:
             return array.map( m => {
                 //Add connection to second panel via m.start_in_second
-                return { start: m.start_in_first, end: m.end_in_first, color: m.color}
+                return { start: m.start_in_first, end: m.end_in_first, link: m.start_in_second, color: m.color}
             })
         case 2:
             return array.map( m => {
-                return { start: m.start_in_second, end: m.end_in_second, color: m.color}
+                return { start: m.start_in_second, end: m.end_in_second, link: m.start_in_first, color: m.color}
             })
         default:
             return []

+ 13 - 4
report-viewer/src/views/ComparisonView.vue

@@ -5,10 +5,10 @@
       <img id="logo" src="@/assets/logo.png" alt="JPlag">
       <button id="hide-button" @click="togglePanel"><img src="@/assets/double_arrow_white_24dp.svg" alt="hide"></button>
     </div>
-    <TextInformation :has-additional-info="false" value="Match Report" label=""/>
-    <TextInformation label="First Submission:" value="324567" :has-additional-info="false"/>
-    <TextInformation label="Second Submission:" value="789223" :has-additional-info="false"/>
-    <TextInformation label="Match percentage:" value="75.34%" :has-additional-info="false"/>
+    <TextInformation :has-additional-info="false" value="Matches Report" label=""/>
+    <TextInformation label="First Submission:" :value="json.first_submission_id" :has-additional-info="false"/>
+    <TextInformation label="Second Submission:" :value="json.second_submission_id" :has-additional-info="false"/>
+    <TextInformation label="Match percentage:" :value="json.match_percentage" :has-additional-info="false"/>
     <MatchList :submission1="json.first_submission_id"
                :submission2="json.second_submission_id"
                :matches="groupedMatches"
@@ -143,6 +143,11 @@ export default defineComponent({
   border: none;
   padding: 0;
   margin: 0;
+  transform: rotate(180deg);
+}
+
+#hide-button:hover {
+  cursor: pointer;
 }
 
 #show-button {
@@ -157,6 +162,10 @@ export default defineComponent({
   width: 1%;
 }
 
+#show-button:hover {
+  cursor: pointer;
+}
+
 #show-button img {
   display: none;
 }