408 lines
14 KiB
HTML
408 lines
14 KiB
HTML
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset- "UTF-8" />
|
|
<meta name="description" content="Visualization of video lecture taxonomy">
|
|
<meta name="keywords" content="video, taxonomy, quality, properties, instruction, visualization">
|
|
<meta name="author" content="Martin Putzlocher">
|
|
<meta name='viewport' content='width=device-width, initial-scale=1'>
|
|
<link rel='stylesheet' href='./css/w3.css'>
|
|
<link rel='stylesheet' href='./css/w3-colors-signal.css'>
|
|
|
|
<title>Video Taxonomy Visualization</title>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.1.1/chart.min.js"></script>
|
|
|
|
<script>
|
|
/*
|
|
function processForm(e) {
|
|
if (e.preventDefault) e.preventDefault();
|
|
|
|
// do what you want with the form
|
|
|
|
// You must return false to prevent the default form behavior
|
|
return false;
|
|
}
|
|
|
|
var form = document.getElementById('newEntryForm');
|
|
if (form.attachEvent) {
|
|
form.attachEvent("submit", processForm);
|
|
} else {
|
|
form.addEventListener("submit", processForm);
|
|
}
|
|
*/
|
|
|
|
Chart.defaults.font.size = 12;
|
|
|
|
|
|
|
|
|
|
function createChart(data, videotitle) {
|
|
var ctx = document.getElementById("chartId").getContext("2d");
|
|
|
|
// const customText = {
|
|
// id: 'customText',
|
|
// afterDraw: (chart, args, options) => {
|
|
// const {
|
|
// ctx,
|
|
// canvas
|
|
// } = chart;
|
|
// textObjects = options.text;
|
|
//
|
|
// if (textObjects.length === 0) {
|
|
// return;
|
|
// }
|
|
/*
|
|
textObjects.forEach((textObj) => {
|
|
ctx.save();
|
|
|
|
ctx.textAlign = textObj.textAlign || 'center';
|
|
ctx.font = `${textObj.size || '20px'} ${textObj.font || 'Arial'}`;
|
|
ctx.fillStyle = textObj.color || 'black'
|
|
ctx.fillText(textObj.text, textObj.x, textObj.y)
|
|
|
|
ctx.restore();
|
|
})
|
|
}
|
|
}*/
|
|
|
|
|
|
var chartId = new Chart(ctx, {
|
|
type: 'polarArea',
|
|
data: {
|
|
labels: Array.from(data.keys()),
|
|
datasets: [{
|
|
label: videotitle,
|
|
data: Array.from(data.values()),
|
|
// backgroundColor: "rgba(128,128,128,0.5)",
|
|
backgroundColor: [
|
|
"#f8cc1b90",
|
|
"#fa7a4890",
|
|
"#31195590",
|
|
"#84a2cd90",
|
|
"#bed05790",
|
|
"#4777cd90",
|
|
"#ffa5c890"],
|
|
pointBackgroundColor: [
|
|
"#f8cc1b90",
|
|
"#fa7a4890",
|
|
"#31195590",
|
|
"#84a2cd90",
|
|
"#bed05790",
|
|
"#4777cd90",
|
|
"#ffa5c890"],
|
|
borderColor: ['black'],
|
|
borderWidth: 1,
|
|
pointRadius: 6,
|
|
}],
|
|
},
|
|
options: {
|
|
scales: {
|
|
r: {
|
|
angleLines: {
|
|
display: true
|
|
},
|
|
min: 0,
|
|
max: 4,
|
|
ticks: {
|
|
// forces step size to be 50 units
|
|
stepSize: 1,
|
|
font: {
|
|
size: 20
|
|
}
|
|
}
|
|
}
|
|
},
|
|
responsive: false,
|
|
elements: {
|
|
arc: {
|
|
borderWidth: 3
|
|
}
|
|
},
|
|
plugins: {
|
|
title: {
|
|
display: true,
|
|
text: 'Custom Chart Title',
|
|
padding: {
|
|
top: 10,
|
|
bottom: 30
|
|
},
|
|
font: {
|
|
size: 20
|
|
}
|
|
}
|
|
// ,
|
|
// customText: {
|
|
// text: [{
|
|
// text: 'Lorem ipsum',
|
|
// x: 0,
|
|
// y: 0,
|
|
// textAlign: 'center',
|
|
// size: '30px',
|
|
// color: 'black',
|
|
// font: 'Arial black'
|
|
// }
|
|
// ]
|
|
// }
|
|
}
|
|
},
|
|
plugins: {
|
|
legend: {
|
|
labels: {
|
|
// This more specific font property overrides the global property
|
|
fontSize: 10
|
|
}
|
|
}
|
|
// , customText: [customText]
|
|
}
|
|
});
|
|
|
|
return chartId;
|
|
};
|
|
|
|
|
|
let data = new Map();
|
|
data.set("instructional principle", 4); // instructional principle
|
|
data.set("visibility", 2); // visibility / audio
|
|
data.set("segmentation", 3); // segmentation
|
|
data.set("activity", 4); // activity
|
|
data.set("interactivity", 4); // interactivity
|
|
data.set("dynamic drawing", 3); // dynamic drawing
|
|
data.set("translatability", 2); // translatability
|
|
|
|
function loadNewRadarChart(chartId, data, videotitle, score) {
|
|
// let removalIndex = chartId.data.datasets.indexOf(ds1); //Locate index of ds1
|
|
let removalIndex = 0;
|
|
if(removalIndex >= 0) { //make sure this element exists in the array
|
|
chartId.data.datasets.splice(removalIndex, 1);
|
|
}
|
|
|
|
let taxLevel = "G";
|
|
|
|
let colorArray = [
|
|
"#f8cc1b90",
|
|
"#fa7a4890",
|
|
"#31195590",
|
|
"#84a2cd90",
|
|
"#bed05790",
|
|
"#4777cd90",
|
|
"#ffa5c890"];
|
|
let firstValueZero = 10;
|
|
|
|
function changeColorsGrey(item, index, arr){
|
|
if (index >= firstValueZero) {
|
|
arr[index] = "#AAAAAA33";
|
|
}
|
|
console.log(arr);
|
|
}
|
|
|
|
if (data.get("instructional principle") == 0) {
|
|
firstValueZero = 0;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "0";
|
|
}
|
|
else if (data.get("visibility") == 0) {
|
|
firstValueZero = 1;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "A";
|
|
}
|
|
else if (data.get("segmentation") == 0) {
|
|
firstValueZero = 2;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "B";
|
|
}
|
|
else if (data.get("activity") == 0) {
|
|
firstValueZero = 3;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "C";
|
|
}
|
|
else if (data.get("interactivity") == 0) {
|
|
firstValueZero = 4;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "D";
|
|
}
|
|
else if (data.get("dynamic drawing") == 0) {
|
|
firstValueZero = 5;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "E";
|
|
}
|
|
else if (data.get("translatability") == 0) {
|
|
firstValueZero = 6;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "F";
|
|
}
|
|
else {
|
|
firstValueZero = 10;
|
|
colorArray.forEach(changeColorsGrey);
|
|
taxLevel = "G";
|
|
}
|
|
|
|
// chartId.data.labels.push(Array.from(data.keys()));
|
|
chartId.data.datasets =[{
|
|
label: videotitle,
|
|
data: Array.from(data.values()),
|
|
backgroundColor: colorArray,
|
|
pointBackgroundColor: colorArray,
|
|
borderColor: ['black'],
|
|
borderWidth: 1,
|
|
pointRadius: 6,
|
|
}];
|
|
chartId.options.plugins.title.text = videotitle + ", Taxonomy Level: " + taxLevel
|
|
+ ", Score: " + score;
|
|
chartId.update();
|
|
|
|
};
|
|
|
|
function setNewValues() {
|
|
|
|
console.log("Hi!");
|
|
|
|
|
|
|
|
|
|
let nameValue = document.getElementById("videoname").value;
|
|
console.log(nameValue);
|
|
|
|
data_ins = parseInt(document.getElementById("ins_sel").value);
|
|
data.set("instructional principle", data_ins);
|
|
data_vis = parseInt(document.getElementById("vis_sel").value);
|
|
data.set("visibility", data_vis);
|
|
data_seg = parseInt(document.getElementById("seg_sel").value);
|
|
data.set("segmentation", data_seg);
|
|
data_act = parseInt(document.getElementById("act_sel").value);
|
|
data.set("activity", data_act);
|
|
data_int = parseInt(document.getElementById("int_sel").value);
|
|
data.set("interactivity", data_int);
|
|
data_dyn = parseInt(document.getElementById("dyn_sel").value);
|
|
data.set("dynamic drawing", data_dyn);
|
|
data_tra = parseInt(document.getElementById("tra_sel").value);
|
|
data.set("translatability", data_tra);
|
|
|
|
let score = 0;
|
|
score = data_ins + data_vis + data_seg + data_act + data_int + data_int + data_dyn + data_tra;
|
|
|
|
console.log(data);
|
|
|
|
|
|
loadNewRadarChart(chartHandleId, data, nameValue, score);
|
|
}
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<h1 class="w3-container w3-green">Video lectures taxonomy</h1>
|
|
<h2 class="w3-container w3-gray">Video information</h2>
|
|
|
|
<div class="w3-light-gray">
|
|
<p>Please fill in information on your video</p>
|
|
<form name="newEntryForm" class="w3-container w3-white w3-border w3-border-green" action="javascript:setNewValues();">
|
|
<label class="w3-text-green" for="videoname"><b>Name of Video</b></label>
|
|
<input class="w3-input w3-border w3-light-grey" type="text" id="videoname" name="videoname" value="name of video">
|
|
|
|
<div class="w3-row-padding">
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="ins_sel"><b>A Instructional principle</b></label>
|
|
<select class="w3-select w3-border w3-white" name="ins_sel" id="ins_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="vis_sel"><b>B Visibility / Audio</b></label>
|
|
<select class="w3-select w3-border w3-white" name="vis_sel" id="vis_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="w3-row-padding">
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="seg_sel"><b>C Segmentation</b></label>
|
|
<select class="w3-select w3-border w3-white" name="seg_sel" id="seg_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="act_sel"><b>D Activity</b></label>
|
|
<select class="w3-select w3-border w3-white" name="act_sel" id="act_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="w3-row-padding">
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="int_sel"><b>E Interactivity</b></label>
|
|
<select class="w3-select w3-border w3-white" name="int_sel" id="int_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="dyn_sel"><b>F Principle of Dynamic Drawing</b></label>
|
|
<select class="w3-select w3-border w3-white" name="dyn_sel" id="dyn_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="w3-row-padding">
|
|
<div class="w3-half">
|
|
<label class="w3-text-green" for="tra_sel"><b>G Translatability</b></label>
|
|
<select class="w3-select w3-border w3-white" name="tra_sel" id="tra_sel">
|
|
<option value="0" selected>not acceptable</option>
|
|
<option value="1">minimal requirements</option>
|
|
<option value="2">medium quality</option>
|
|
<option value="3">high quality</option>
|
|
<option value="4">excellent quality</option>
|
|
<!-- further options -->
|
|
</select>
|
|
</div>
|
|
<div class="w3-half">
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="w3-container w3-margin">
|
|
<input class="w3-btn w3-green" type="submit" name="do_entry" value="OK" onlick="javascript:setNewValues();">
|
|
<input class="w3-btn w3-grey" type="reset" name="reset" value="Reset">
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<hr/>
|
|
<canvas id="chartId" aria-label="chart" height="500" width="700"></canvas>
|
|
|
|
<script>
|
|
let chartHandleId = createChart(data, "title");
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|