import
This commit is contained in:
commit
3daa151896
7 changed files with 212 additions and 0 deletions
8
Makefile
Normal file
8
Makefile
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
VERSION = $(shell sed -n '/"version"/s/.*\"\([0-9.]\+\)\",/\1/p' manifest.json)
|
||||
SET_VERSION = $(eval CURRENT_VERSION=$(VERSION))
|
||||
|
||||
default: v2
|
||||
|
||||
v2:
|
||||
$(SET_VERSION)
|
||||
zip -r releases/kf-better-ugo-$(CURRENT_VERSION).xpi content.css content.js icons manifest.json common.js
|
||||
39
common.js
Normal file
39
common.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
const Common = {};
|
||||
|
||||
const HTTPP = document.location.protocol + "//" + document.location.host;
|
||||
|
||||
var currentGroupName = "";
|
||||
|
||||
// helpers
|
||||
const $C = (e, opts = {}) => {
|
||||
const elem = document.createElement(e);
|
||||
for (const key in opts) {
|
||||
if (key == "classList") {
|
||||
const cl = opts[key];
|
||||
if (typeof (cl) == "string") {
|
||||
elem.classList.add(cl);
|
||||
} else {
|
||||
elem.classList.add(...cl);
|
||||
}
|
||||
continue;
|
||||
} else if (key == "children") {
|
||||
elem.append(...opts[key]);
|
||||
continue;
|
||||
} else if (key == "title") {
|
||||
elem.setAttribute(key, opts[key]);
|
||||
continue;
|
||||
}
|
||||
elem[key] = opts[key];
|
||||
}
|
||||
return elem;
|
||||
}
|
||||
|
||||
const $G = (e) => document.getElementById(e);
|
||||
|
||||
const $S = (s) => document.querySelector(s);
|
||||
|
||||
Common.$G = $G;
|
||||
Common.$C = $C;
|
||||
Common.initializeModal = initializeModal;
|
||||
|
||||
// vim: ts=2 sts=2 sw=2
|
||||
4
content.css
Normal file
4
content.css
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
.kf-groups-quick-link {
|
||||
margin-left: 0.2em;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
45
content.js
Normal file
45
content.js
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
const UGOpp = {};
|
||||
|
||||
const __kf_course_id_regex = /[0-9]+$/;
|
||||
|
||||
function _injectQuickLinks() {
|
||||
const table = Common.$G("idLVOfferTab")
|
||||
if (table?.querySelector(".kf-groups-quick-link")) return;
|
||||
|
||||
const rows = table.querySelectorAll("tr.hi");
|
||||
|
||||
rows.forEach((row) => {
|
||||
const tds = row.querySelectorAll("td")
|
||||
const mainLink = tds[3].querySelector("a");
|
||||
const courseId = mainLink.href.match(__kf_course_id_regex)[0];
|
||||
const link = Common.$C("a", {classList: "kf-groups-quick-link", href:`https://online.uni-graz.at/kfu_online/sa.gruppen_einteilung?cLvNr=${courseId}`, children:["👥"]})
|
||||
tds[2].append(link)
|
||||
})
|
||||
}
|
||||
|
||||
function injectQuickLinks() {
|
||||
const observerOptions = {
|
||||
childList: true,
|
||||
subtree: true,
|
||||
};
|
||||
|
||||
const observer = new MutationObserver(logChanges)
|
||||
observer.observe(document.body, observerOptions);
|
||||
}
|
||||
|
||||
function logChanges(records, observer) {
|
||||
for (const record of records) {
|
||||
for (const addedNode of record.addedNodes) {
|
||||
if (addedNode.id == "actions") {
|
||||
observer.disconnect();
|
||||
_injectQuickLinks();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
UGOpp.injectQuickLinks = injectQuickLinks;
|
||||
|
||||
injectQuickLinks();
|
||||
|
||||
// vim: ts=2 sts=2 sw=2
|
||||
BIN
icons/icon-128-padded.png
Normal file
BIN
icons/icon-128-padded.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
85
icons/icon.svg
Normal file
85
icons/icon.svg
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="128mm"
|
||||
height="128mm"
|
||||
viewBox="0 0 128 128"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.4 (dcaf3e7d9e, 2026-05-05)"
|
||||
sodipodi:docname="icon.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.70710678"
|
||||
inkscape:cx="101.82338"
|
||||
inkscape:cy="292.74221"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="975"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1">
|
||||
<rect
|
||||
x="47.376154"
|
||||
y="72.124892"
|
||||
width="357.08892"
|
||||
height="327.39045"
|
||||
id="rect1" />
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:#eaeaea;fill-opacity:1;stroke:none;stroke-width:0.2"
|
||||
id="rect2"
|
||||
width="100"
|
||||
height="100"
|
||||
x="14"
|
||||
y="14"
|
||||
ry="10.851143" />
|
||||
<g
|
||||
id="g2"
|
||||
transform="translate(0,-10.921379)">
|
||||
<text
|
||||
xml:space="preserve"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,10.340336,26.904074)"
|
||||
id="text1"
|
||||
style="font-weight:500;font-size:120px;font-family:QTMerryScript;-inkscape-font-specification:'QTMerryScript Medium';text-align:center;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect1);fill:#ffffff;stroke:#1a1a1a;stroke-width:0.755906"
|
||||
x="218.14244"
|
||||
y="0"><tspan
|
||||
x="63.267166"
|
||||
y="183.125"
|
||||
id="tspan4"><tspan
|
||||
style="font-weight:normal;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';fill:#000000;stroke:none"
|
||||
id="tspan3">UGO
|
||||
</tspan></tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:31.75px;font-family:'Open Sans';-inkscape-font-specification:'Open Sans';writing-mode:lr-tb;direction:ltr;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.2"
|
||||
x="45.861572"
|
||||
y="101.02788"
|
||||
id="text2"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2"
|
||||
style="stroke-width:0.2"
|
||||
x="45.861572"
|
||||
y="101.02788">++</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
31
manifest.json
Normal file
31
manifest.json
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"manifest_version": 2,
|
||||
"name": "KF-UGO++",
|
||||
"version": "0.0.1",
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "kf-ugopp@math.janko.fr",
|
||||
"data_collection_permissions": {
|
||||
"required": ["none"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": "Collection of small improvements for online.uni-graz.at",
|
||||
"icons": {
|
||||
"128": "icons/icon-128-padded.png"
|
||||
},
|
||||
"content_scripts": [
|
||||
{
|
||||
"matches": [
|
||||
"https://online.uni-graz.at/kfu_online/wblvangebot.wbshowlvoffer"
|
||||
],
|
||||
"js": [
|
||||
"common.js",
|
||||
"content.js"
|
||||
],
|
||||
"css": [
|
||||
"content.css"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in a new issue