forked from HariomDev29/Buddy25
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
154 lines (140 loc) · 4.54 KB
/
script.js
File metadata and controls
154 lines (140 loc) · 4.54 KB
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
const BASE_URL =
"https://script.google.com/macros/s/AKfycbzxPJBOPvFXfr9FmoDcghR8HJmmtAxMWW7WX49u34nVqy8p-ltaJ9FT2SDZpcY132Yc/exec"; // Replace this with your web app URL
let currentSubject = "";
let allFiles = [];
document.addEventListener("DOMContentLoaded", () => {
loadSubjects();
});
function loadSubjects() {
fetch(`${BASE_URL}?action=subjects`)
.then((res) => res.json())
.then((subjects) => {
const tabs = document.getElementById("tabs");
tabs.innerHTML = "";
subjects.forEach((subject) => {
const tab = document.createElement("div");
tab.textContent = subject;
tab.onclick = () => {
document
.querySelectorAll(".tabs div")
.forEach((t) => t.classList.remove("active"));
tab.classList.add("active");
currentSubject = subject;
loadFiles(subject);
};
tabs.appendChild(tab);
});
});
}
function loadFiles(subject) {
fetch(`${BASE_URL}?action=files&subject=${encodeURIComponent(subject)}`)
.then((res) => res.json())
.then((files) => {
allFiles = files;
renderFiles(files);
});
}
function renderFiles(files) {
const list = document.getElementById("files");
list.innerHTML = "";
files.forEach((file) => {
const li = document.createElement("li");
li.textContent = file;
li.onclick = () => {
document
.querySelectorAll("#files li")
.forEach((f) => f.classList.remove("active"));
li.classList.add("active");
loadCode(currentSubject, file);
};
list.appendChild(li);
});
}
function filterFiles() {
const keyword = document.getElementById("fileSearch").value.toLowerCase();
const filtered = allFiles.filter((file) =>
file.toLowerCase().includes(keyword)
);
renderFiles(filtered);
}
function loadCode(subject, filename) {
fetch(
`${BASE_URL}?action=code&subject=${encodeURIComponent(
subject
)}&filename=${encodeURIComponent(filename)}`
)
.then((res) => res.text())
.then((code) => {
// Set the filename
document.getElementById("fileNameTitle").textContent = filename;
// Get the file extension and determine the appropriate Prism language class
const fileExtension = filename.split(".").pop().toLowerCase();
let languageClass = "";
// Match file extensions to Prism language classes
switch (fileExtension) {
case "js":
languageClass = "language-javascript";
break;
case "html":
languageClass = "language-markup";
break;
case "css":
languageClass = "language-css";
break;
case "python":
languageClass = "language-python";
break;
case "java":
languageClass = "language-java";
break;
case "c":
languageClass = "language-c";
break;
case "cpp":
languageClass = "language-cpp";
break;
case "json":
languageClass = "language-json";
break;
case "xml":
languageClass = "language-xml";
break;
case "md":
languageClass = "language-markdown";
break;
case "rb":
languageClass = "language-ruby";
break;
case "go":
languageClass = "language-go";
break;
default:
languageClass = "language-text"; // Default language class if unknown
break;
}
// Get the code element and set its content
const codeEl = document.getElementById("codeContent");
codeEl.textContent = code;
// Clear any previous classes and add the new language class
codeEl.className = languageClass;
// Manually trigger Prism.js to highlight the new code
Prism.highlightElement(codeEl);
});
}
function copyCode() {
const code = document.getElementById("codeContent").textContent;
navigator.clipboard
.writeText(code)
.then(() => alert("✅ Code copied to clipboard!"))
.catch(() => alert("❌ Failed to copy code."));
}
function downloadCode() {
const filename =
document.getElementById("fileNameTitle").textContent || "code.txt";
const code = document.getElementById("codeContent").textContent;
const blob = new Blob([code], { type: "text/plain" });
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = filename;
link.click();
}