Compare commits
	
		
			6 Commits
		
	
	
		
			tonitch/ma
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 9e0db361b8 | |||
| 7a13d412f1 | |||
| 9de4b06e75 | |||
| 123fa97611 | |||
| 1fad792be7 | |||
| 
						
						
							
						
						acd1262955
	
				 | 
					
					
						
@ -25,7 +25,7 @@ dependencies {
 | 
				
			|||||||
	implementation("com.kohlschutter.junixsocket:junixsocket-core:2.9.0")
 | 
						implementation("com.kohlschutter.junixsocket:junixsocket-core:2.9.0")
 | 
				
			||||||
	// implementation("org.springframework.session:spring-session-jdbc")
 | 
						// implementation("org.springframework.session:spring-session-jdbc")
 | 
				
			||||||
	developmentOnly("org.springframework.boot:spring-boot-devtools")
 | 
						developmentOnly("org.springframework.boot:spring-boot-devtools")
 | 
				
			||||||
	// developmentOnly("org.springframework.boot:spring-boot-docker-compose")
 | 
						developmentOnly("org.springframework.boot:spring-boot-docker-compose")
 | 
				
			||||||
	runtimeOnly("org.postgresql:postgresql")
 | 
						runtimeOnly("org.postgresql:postgresql")
 | 
				
			||||||
	testImplementation("org.springframework.boot:spring-boot-starter-test")
 | 
						testImplementation("org.springframework.boot:spring-boot-starter-test")
 | 
				
			||||||
	testImplementation("org.springframework.boot:spring-boot-testcontainers")
 | 
						testImplementation("org.springframework.boot:spring-boot-testcontainers")
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										15
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										15
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -8,7 +8,6 @@
 | 
				
			|||||||
      "name": "clyde",
 | 
					      "name": "clyde",
 | 
				
			||||||
      "version": "0.0.0",
 | 
					      "version": "0.0.0",
 | 
				
			||||||
      "dependencies": {
 | 
					      "dependencies": {
 | 
				
			||||||
        "@canvasjs/vue-charts": "^1.0.4",
 | 
					 | 
				
			||||||
        "vite-plugin-top-level-await": "^1.4.1",
 | 
					        "vite-plugin-top-level-await": "^1.4.1",
 | 
				
			||||||
        "vue": "^3.4.15",
 | 
					        "vue": "^3.4.15",
 | 
				
			||||||
        "vue3-toastify": "^0.2.1"
 | 
					        "vue3-toastify": "^0.2.1"
 | 
				
			||||||
@ -30,20 +29,6 @@
 | 
				
			|||||||
        "node": ">=6.0.0"
 | 
					        "node": ">=6.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@canvasjs/charts": {
 | 
					 | 
				
			||||||
      "version": "3.7.45",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@canvasjs/charts/-/charts-3.7.45.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-FPMX8wn+PEHzAa/GLBsL5lWB81AzKZLw51t7SiSUjMbtUN5/OIrmDcwUTw+53/Bbdd9gm2LLmxAdZsQ75JI31g=="
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@canvasjs/vue-charts": {
 | 
					 | 
				
			||||||
      "version": "1.0.4",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@canvasjs/vue-charts/-/vue-charts-1.0.4.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-PzOA8xeb/f68a39uoFZNn843dGPU36bsqmbO5DWjP7k6FwkK5AeGkYa/H3RHC02Xc6mG68vg9aFNj2Fyqhu4UQ==",
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@canvasjs/charts": "^3.7.5",
 | 
					 | 
				
			||||||
        "vue": ">=3.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@esbuild/aix-ppc64": {
 | 
					    "node_modules/@esbuild/aix-ppc64": {
 | 
				
			||||||
      "version": "0.19.12",
 | 
					      "version": "0.19.12",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,6 @@
 | 
				
			|||||||
    "preview": "vite preview"
 | 
					    "preview": "vite preview"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "@canvasjs/vue-charts": "^1.0.4",
 | 
					 | 
				
			||||||
    "vite-plugin-top-level-await": "^1.4.1",
 | 
					    "vite-plugin-top-level-await": "^1.4.1",
 | 
				
			||||||
    "vue": "^3.4.15",
 | 
					    "vue": "^3.4.15",
 | 
				
			||||||
    "vue3-toastify": "^0.2.1"
 | 
					    "vue3-toastify": "^0.2.1"
 | 
				
			||||||
 | 
				
			|||||||
@ -1,236 +0,0 @@
 | 
				
			|||||||
<!----------------------------------------------------
 | 
					 | 
				
			||||||
	File:  ResearcherProfile.vue
 | 
					 | 
				
			||||||
	Author: Maxime Bartha
 | 
					 | 
				
			||||||
	Scope: Extension Publicatons scientifiquess
 | 
					 | 
				
			||||||
	Description: Researcher Profile Page containing his articles and his statistics
 | 
					 | 
				
			||||||
----------------------------------------------------->
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<script setup>
 | 
					 | 
				
			||||||
import { ref, reactive } from "vue";
 | 
					 | 
				
			||||||
const input = ref("");
 | 
					 | 
				
			||||||
const statsOf = ref("");
 | 
					 | 
				
			||||||
const statsBy = ref("");
 | 
					 | 
				
			||||||
let chart;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const jsonMockViewsByYears= [
 | 
					 | 
				
			||||||
  {label: "2004", y:4},
 | 
					 | 
				
			||||||
  {label: "2005", y:99},
 | 
					 | 
				
			||||||
  {label: "2007", y:555},
 | 
					 | 
				
			||||||
  {label: "2009", y:22},
 | 
					 | 
				
			||||||
  {label: "2011", y:1666},
 | 
					 | 
				
			||||||
]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function inputKeyUp() {
 | 
					 | 
				
			||||||
  let filter, ul, li, a, txtValue;
 | 
					 | 
				
			||||||
  filter = input.value.toUpperCase();
 | 
					 | 
				
			||||||
  if (document.getElementById("myUL") != null) {
 | 
					 | 
				
			||||||
    ul = document.getElementById("myUL");
 | 
					 | 
				
			||||||
    li = ul.getElementsByTagName("li");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Loop through all list items, and hide those who don't match the search query
 | 
					 | 
				
			||||||
    for (let i = 0; i < li.length; i++) {
 | 
					 | 
				
			||||||
      a = li[i].getElementsByTagName("a")[0];
 | 
					 | 
				
			||||||
      txtValue = a.textContent || a.innerText;
 | 
					 | 
				
			||||||
      if (txtValue.toUpperCase().indexOf(filter) > -1) {
 | 
					 | 
				
			||||||
        li[i].style.display = "";
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        li[i].style.display = "none";
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const options = reactive({
 | 
					 | 
				
			||||||
    backgroundColor:null,
 | 
					 | 
				
			||||||
    theme: "light2",
 | 
					 | 
				
			||||||
    animationEnabled: true,
 | 
					 | 
				
			||||||
    title: {
 | 
					 | 
				
			||||||
      fontColor: "white",
 | 
					 | 
				
			||||||
      text : "please select options",
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    data: [
 | 
					 | 
				
			||||||
      {
 | 
					 | 
				
			||||||
        type: "pie",
 | 
					 | 
				
			||||||
        indexLabel: "{label} (#percent%)",
 | 
					 | 
				
			||||||
        yValueFormatString: "#,##0",
 | 
					 | 
				
			||||||
        indexLabelFontColor: "white",
 | 
					 | 
				
			||||||
        toolTipContent:
 | 
					 | 
				
			||||||
          "<span style='\"'color: {color};'\"'>{label}</span> {y}(#percent%)",
 | 
					 | 
				
			||||||
      }]
 | 
					 | 
				
			||||||
	});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function update(){
 | 
					 | 
				
			||||||
      options.title = {
 | 
					 | 
				
			||||||
        fontColor: "white",
 | 
					 | 
				
			||||||
        text: statsOf.value + " By "+ statsBy.value,
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      if (statsOf.value === "views" && statsBy.value === "years") {
 | 
					 | 
				
			||||||
        options.data[0].dataPoints = jsonMockViewsByYears;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      options.title.text = statsOf.value + " By "+ statsBy.value;
 | 
					 | 
				
			||||||
      chart.render()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
</script>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<template>
 | 
					 | 
				
			||||||
  <div id="main">
 | 
					 | 
				
			||||||
    <div id="profilePicture">
 | 
					 | 
				
			||||||
      <img src="/Clyde.png" />
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div id="researcherInfos">
 | 
					 | 
				
			||||||
      <div class="surrounded">John Doe</div>
 | 
					 | 
				
			||||||
      <div class="surrounded">Orcid : 12144-2144-12336-B</div>
 | 
					 | 
				
			||||||
      <div class="surrounded">Email : John.Doe@umons.ac.be</div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      <div class="surrounded">
 | 
					 | 
				
			||||||
        site :
 | 
					 | 
				
			||||||
        <a href="http://localhost:5173" style="color: #007aff">here</a>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class="surrounded">Domain : physics, IT</div>
 | 
					 | 
				
			||||||
      <div id="coAuthorList" class="surrounded">Co-authors list : D</div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div id="stats">
 | 
					 | 
				
			||||||
      <div class="surrounded">
 | 
					 | 
				
			||||||
        Stat type :
 | 
					 | 
				
			||||||
        <select @change="update()" id="stats-select" v-model="statsOf">
 | 
					 | 
				
			||||||
          <option value="views">Views</option>
 | 
					 | 
				
			||||||
          <option value="co-authors">Co-authors</option>
 | 
					 | 
				
			||||||
          <option value="articles">Articles</option>
 | 
					 | 
				
			||||||
          <option value="language">Languages</option>
 | 
					 | 
				
			||||||
        </select>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div class="surrounded">
 | 
					 | 
				
			||||||
        Class by:
 | 
					 | 
				
			||||||
        <select @change="update()" id="classed-select" v-model="statsBy">
 | 
					 | 
				
			||||||
          <option selected="selected" value="years">Years</option>
 | 
					 | 
				
			||||||
          <option value="months">Months</option>
 | 
					 | 
				
			||||||
          <option value="topics">Topics</option>
 | 
					 | 
				
			||||||
        </select>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
      <div id="statsPie">
 | 
					 | 
				
			||||||
		  <CanvasJSChart :options="options" id=chart @chart-ref="c => chart = c "/>
 | 
					 | 
				
			||||||
      </div>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
    <div id="articles">
 | 
					 | 
				
			||||||
      <input
 | 
					 | 
				
			||||||
        type="text"
 | 
					 | 
				
			||||||
        id="search-input"
 | 
					 | 
				
			||||||
        @keyup="inputKeyUp()"
 | 
					 | 
				
			||||||
        placeholder="search articles"
 | 
					 | 
				
			||||||
        v-model="input"
 | 
					 | 
				
			||||||
      />
 | 
					 | 
				
			||||||
      <ul id="myUL">
 | 
					 | 
				
			||||||
        <li><a href="#">Adele</a></li>
 | 
					 | 
				
			||||||
        <li><a href="#">Agnes</a></li>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <li><a href="#">Billy</a></li>
 | 
					 | 
				
			||||||
        <li><a href="#">Bob</a></li>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <li><a href="#">Calvin</a></li>
 | 
					 | 
				
			||||||
        <li><a href="#">Christina</a></li>
 | 
					 | 
				
			||||||
        <li><a href="#">Cindy</a></li>
 | 
					 | 
				
			||||||
      </ul>
 | 
					 | 
				
			||||||
    </div>
 | 
					 | 
				
			||||||
  </div>
 | 
					 | 
				
			||||||
</template>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<style scoped>
 | 
					 | 
				
			||||||
#main {
 | 
					 | 
				
			||||||
  display: grid;
 | 
					 | 
				
			||||||
  grid-template-columns: 22% auto;
 | 
					 | 
				
			||||||
  grid-template-rows: 26% auto;
 | 
					 | 
				
			||||||
  height: 100%;
 | 
					 | 
				
			||||||
  width: 100%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#profilePicture {
 | 
					 | 
				
			||||||
  display: flex;
 | 
					 | 
				
			||||||
  justify-content: center;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#profilePicture img {
 | 
					 | 
				
			||||||
  align-self: center;
 | 
					 | 
				
			||||||
  justify-self: center;
 | 
					 | 
				
			||||||
  width: 60%;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#researcherInfos {
 | 
					 | 
				
			||||||
  display: grid;
 | 
					 | 
				
			||||||
  grid-template-columns: auto auto auto;
 | 
					 | 
				
			||||||
  column-gap: 5px;
 | 
					 | 
				
			||||||
  grid-template-rows: auto auto;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.surrounded {
 | 
					 | 
				
			||||||
  border: 2px solid black;
 | 
					 | 
				
			||||||
  color: white;
 | 
					 | 
				
			||||||
  font-size: x-large;
 | 
					 | 
				
			||||||
  align-self: center;
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
  background-color: rgba(255, 255, 255, 0.09);
 | 
					 | 
				
			||||||
  border-radius: 20px;
 | 
					 | 
				
			||||||
  margin-bottom: 10px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.surrounded select {
 | 
					 | 
				
			||||||
  margin-top: 2px;
 | 
					 | 
				
			||||||
  margin-bottom: 2px;
 | 
					 | 
				
			||||||
  border: 1px solid black;
 | 
					 | 
				
			||||||
  color: white;
 | 
					 | 
				
			||||||
  background-color: rgb(255, 255, 255, 0.1);
 | 
					 | 
				
			||||||
  font-size: large;
 | 
					 | 
				
			||||||
  align-self: center;
 | 
					 | 
				
			||||||
  text-align: center;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#statsPie {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#articles {
 | 
					 | 
				
			||||||
  background-color: orange;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#search-input {
 | 
					 | 
				
			||||||
  width: 60%;
 | 
					 | 
				
			||||||
  font-size: 16px;
 | 
					 | 
				
			||||||
  padding: 12px 20px 12px 40px;
 | 
					 | 
				
			||||||
  border: 1px solid #ddd;
 | 
					 | 
				
			||||||
  margin-bottom: 12px;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#myUL {
 | 
					 | 
				
			||||||
  list-style-type: none;
 | 
					 | 
				
			||||||
  padding: 0;
 | 
					 | 
				
			||||||
  margin: 0;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#myUL li a {
 | 
					 | 
				
			||||||
  border: 1px solid #ddd;
 | 
					 | 
				
			||||||
  /* Add a border to all links */
 | 
					 | 
				
			||||||
  margin-top: -1px;
 | 
					 | 
				
			||||||
  /* Prevent double borders */
 | 
					 | 
				
			||||||
  background-color: #f6f6f6;
 | 
					 | 
				
			||||||
  /* Grey background color */
 | 
					 | 
				
			||||||
  padding: 12px;
 | 
					 | 
				
			||||||
  /* Add some padding */
 | 
					 | 
				
			||||||
  text-decoration: none;
 | 
					 | 
				
			||||||
  /* Remove default text underline */
 | 
					 | 
				
			||||||
  font-size: 18px;
 | 
					 | 
				
			||||||
  /* Increase the font-size */
 | 
					 | 
				
			||||||
  color: black;
 | 
					 | 
				
			||||||
  /* Add a black text color */
 | 
					 | 
				
			||||||
  display: block;
 | 
					 | 
				
			||||||
  /* Make it into a block element to fill the whole list */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#myUL li a:hover:not(.header) {
 | 
					 | 
				
			||||||
  background-color: #eee;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#Chart{
 | 
					 | 
				
			||||||
    width: "100%";
 | 
					 | 
				
			||||||
    height: "100%";
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
</style>
 | 
					 | 
				
			||||||
@ -4,8 +4,5 @@ import 'https://kit.fontawesome.com/fb3bbd0a95.js'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import { createApp } from 'vue'
 | 
					import { createApp } from 'vue'
 | 
				
			||||||
import App from './App.vue'
 | 
					import App from './App.vue'
 | 
				
			||||||
import CanvasJSChart from '@canvasjs/vue-charts';
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const app = createApp(App);
 | 
					createApp(App).mount('#app')
 | 
				
			||||||
app.use(CanvasJSChart);
 | 
					 | 
				
			||||||
app.mount('#app');
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,6 @@ import Profil from "@/Apps/Profil.vue"
 | 
				
			|||||||
import Courses from "@/Apps/ManageCourses.vue"
 | 
					import Courses from "@/Apps/ManageCourses.vue"
 | 
				
			||||||
import Users from "@/Apps/UsersList.vue"
 | 
					import Users from "@/Apps/UsersList.vue"
 | 
				
			||||||
import Students from "@/Apps/StudentsList.vue"
 | 
					import Students from "@/Apps/StudentsList.vue"
 | 
				
			||||||
import ResearcherProfile from "@/Apps/ScientificPublications/ResearcherProfile.vue";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
const apps = {
 | 
					const apps = {
 | 
				
			||||||
		'/login': LoginPage,
 | 
							'/login': LoginPage,
 | 
				
			||||||
@ -18,7 +17,6 @@ const apps = {
 | 
				
			|||||||
		'/manage-courses' : Courses,
 | 
							'/manage-courses' : Courses,
 | 
				
			||||||
		'/users-list' : Users,
 | 
							'/users-list' : Users,
 | 
				
			||||||
		'/students-list' : Students,
 | 
							'/students-list' : Students,
 | 
				
			||||||
		'/researcher-profile' : ResearcherProfile,
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const appsList = {
 | 
					const appsList = {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user