-
Notifications
You must be signed in to change notification settings - Fork 0
/
movie-database.js
94 lines (82 loc) · 3.11 KB
/
movie-database.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
class MovieDatabase {
// Adapted from: https://www.w3schools.com/xml/xsl_client.asp
// (like the xml snipped from the instructions ;-) )
constructor(targetContainer) {
this.targetContainer = targetContainer;
if (window.ActiveXObject){
this.xhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
else {
this.xhttp = new XMLHttpRequest();
}
}
loadXMLDoc(filename)
{
this.xhttp.open("GET", filename, false);
try {this.xhttp.responseType = "msxml-document"} catch(err) {} // Helping IE11
this.xhttp.send("");
return this.xhttp.responseXML;
}
loadMovieDatabase()
{
if(localStorage['xmlDb']){
// If there is already xml in localStorage, load it
var xmlString = localStorage['xmlDb']
var parser = new DOMParser();
this.xml = parser.parseFromString(xmlString, "text/xml")
} else {
this.xml = this.loadXMLDoc("media.xml");
this.saveLocalXml()
}
this.generateHtml();
}
generateHtml(){
var xsl = this.loadXMLDoc("media.xsl");
// code for IE
if (window.ActiveXObject || this.xhttp.responseType == "msxml-document"){
var ex = this.xml.transformNode(xsl);
document.getElementById("video-table").innerHTML = ex;
}
// code for Chrome, Firefox, Opera, etc.
else if (document.implementation && document.implementation.createDocument){
var xsltProcessor = new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
var resultDocument = xsltProcessor.transformToFragment(this.xml, document);
var container = document.getElementById("video-table");
// clear loading and previous entries
container.innerHTML = '';
container.appendChild(resultDocument);
}
}
saveLocalXml(){
var serializer = new XMLSerializer();
var xmlString = serializer.serializeToString(this.xml);
localStorage['xmlDb'] = xmlString;
}
addVideo(videoData){
var elementString = `<video>
<title>${videoData.title}</title>
<description>${videoData.description}</description>
<rating>${videoData.rating}</rating>
<thumbnail>${videoData.thumbnail}</thumbnail>
<link>${videoData.link}</link>
</video>`
var parser = new DOMParser();
var videoElement = parser.parseFromString(elementString, "text/xml");
// add the video to xmlDoc
var elements = this.xml.getElementsByTagName("archive");
elements[0].appendChild(videoElement.firstElementChild);
//Save the added video
this.saveLocalXml()
// rebuild the video list
this.generateHtml()
}
deleteVideo(index){
var elements = this.xml.getElementsByTagName("archive");
elements[0].children[index].remove()
//Save the new xml
this.saveLocalXml()
// rebuild the video list
this.generateHtml()
}
}