-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
177 lines (132 loc) · 4.28 KB
/
script.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
var breadcrumbs = [];
// Create Sidebar Menu Entry
function CreateMenuEntry(text, id)
{
var listItem = document.createElement('li');
var anchor = document.createElement('a');
anchor.href = '#' + id;
anchor.innerHTML = text;
listItem.append(anchor);
return listItem;
}
// Create Information Card
function CreateCard(cardId, cardTitle, cardImages)
{
if(cardImages == undefined) return;
var card = document.createElement('section');
var imagePath = '';
// Create Title H1
var heading = document.createElement('H1');
heading.innerText = cardTitle;
card.append(heading);
// List Breadcrumbs if we're in a nested level
if(breadcrumbs.length > 0)
{
var breadcrumbWrapper = document.createElement('div');
// imagePath += '/';
for (var index = 0; index < breadcrumbs.length; index++)
{
imagePath += breadcrumbs[index].id + '/';
// Generate background color for breadcrumb according to text
var hash = 0;
var colour = '#';
var text = breadcrumbs[index].title;
for (var i = 0; i < text.length; i++)
hash = text.charCodeAt(i) + ((hash << 5) - hash);
for (var i = 0; i < 3; i++) {
var value = (hash >> (i * 8)) & 0xFF;
colour += ('00' + value.toString(16)).substr(-2);
}
var crumb = document.createElement('span');
crumb.className = 'crumb';
crumb.innerText = text;
crumb.style.background = colour;
breadcrumbWrapper.append(crumb);
if(index != breadcrumbs.length-1) breadcrumbWrapper.appendChild(document.createTextNode('→'));
}
card.append(breadcrumbWrapper);
}
imagePath += cardId;
// Create Images
if(cardImages?.length) {
var imagesWrapper = document.createElement('div');
imagesWrapper.className = 'images';
for (let index = 0; index < cardImages.length; index++) {
const image = cardImages[index];
var img = document.createElement('img');
var src = basePath + imagePath + '/' + image.name;
// console.log(src);
img.src = src;
img.loading = "lazy";
if(image?.title) img.title = image.title;
imagesWrapper.append(img);
}
card.append(imagesWrapper);
}
document.getElementsByTagName('body')[0].appendChild(card)
}
// Generate Sidebar Menu
/* for (i = 0; i < data.length; i++) {
document.querySelector('aside ul').appendChild(CreateMenuEntry(data[i], 'id' + i));
} */
// Sidebar Menu Collapse functionality
/* var items = document.getElementsByTagName("li");
for (var i = 0; i < items.length; i++) {
var item = items[i];
item.addEventListener("click", function() {
var subList = this.getElementsByTagName("ul");
console.log(subList.length)
if (subList.length > 0)
subList[0].style.display = subList[0].style.display === "block" ? "none" : "block";
});
} */
/* function SetFullscreen(image)
{
console.log('Image Source: ', image)
}
var img_all = document.getElementsByTagName("img");
for (i=0; i< img_all.length; i++){
var img = img_all[i];
img.addEventListener("click", SetFullscreen(i))
} */
// Generate Cards from given array
function ScanLevel(cards) {
cards.forEach(card => {
CreateCard(card.id, card.title, card.images);
// Check for more cards
if(card?.folders) {
// Add breadcrumb
breadcrumbs.push({id: card.id, title: card.title});
ScanLevel(card.folders);
}
});
}
/*
Initialize card scanning.
Delete breadcrumbs when iterating first level cards
*/
cardData.forEach(card => {
breadcrumbs = [];
CreateCard(card.id, card.title, card.images);
if(card?.folders) {
breadcrumbs.push({id: card.id, title: card.title});
ScanLevel(card.folders, card.title);
}
});
// Setup click functionality for the images to show up as full screen when clicked
var images = document.getElementsByTagName('img');
for (let index = 0; index < images.length; index++) {
images[index].addEventListener('click', function(){
var fullscreen = document.getElementById('fullscreen');
// Set the background image to the image that was clicked on and show the full screen div
fullscreen.style.backgroundImage = 'url(' + this.src + ')';
fullscreen.firstElementChild.textContent = this.title; // Set the caption
fullscreen.firstChild.textContent = this.title;
fullscreen.style.display = "block";
});
}
// Close full screen div when clicked on
document.getElementById('fullscreen').addEventListener('click', function() {
// Hide the Full screen div
this.style.display = 'none';
});