Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i18n and better handling for invalid modules #59

Merged
merged 35 commits into from
Mar 25, 2020
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
7e63f9d
add german translation
Lextum Feb 26, 2020
061d248
add i18n script and browser id to manifest
Lextum Feb 26, 2020
e2b36ab
add placeholder for i18n
Lextum Feb 26, 2020
4e73e48
add functions for i18n
Lextum Feb 26, 2020
9ade686
check if state of module is passed instead if mark is F
Lextum Feb 26, 2020
e3a2a9f
add more german translation
Lextum Feb 26, 2020
d48afd1
add default_locale to manifest
Lextum Feb 26, 2020
676a3f1
implement i18n functions
Lextum Feb 26, 2020
617d442
add fallback to default local
Lextum Feb 26, 2020
2200709
add localization to moduletable
Lextum Feb 26, 2020
df1a5e0
remove some copy paste :-)
Lextum Feb 26, 2020
97ca77d
add english translation
Lextum Feb 26, 2020
6fce5a0
add locales folder to manifest
Lextum Feb 26, 2020
9c90013
Merge branch 'master' into i18n
Lextum Feb 26, 2020
9088ca5
Update english translation
Lextum Feb 26, 2020
8ab749c
some cleanup
Lextum Feb 27, 2020
60593aa
add some doc
Lextum Feb 27, 2020
eba3717
Merge branch 'master' into i18n
Lextum Mar 5, 2020
4cc0d76
remove some whitespaces
Lextum Mar 5, 2020
a6b2907
refactoring
Lextum Mar 5, 2020
5ff9dbd
another fix for modules with strange names
Lextum Mar 5, 2020
4ff76ef
Skip module who aren't valid
Lextum Mar 5, 2020
f6bd788
add module validation
Lextum Mar 5, 2020
3f9378b
Merge branch 'i18n' into fixForInternalHSLUModules
Lextum Mar 5, 2020
01aa49e
load i18n before module_parser
Lextum Mar 5, 2020
8a221f1
add passed message
Lextum Mar 5, 2020
7a14fa5
add passed message if module is passed, but you have no mark
Lextum Mar 5, 2020
96c77d4
check if module has credits
Lextum Mar 5, 2020
d5a9ebf
refactor so the messages are only requests once
Lextum Mar 6, 2020
1ec2d55
remove unnecessary async and awaits
Lextum Mar 6, 2020
8104b38
rename everything to german, damit de marco au zfriede isch :P
Lextum Mar 6, 2020
022dc42
Update comment
Lextum Mar 9, 2020
e123c31
add regex explanation
Lextum Mar 14, 2020
4153760
check if the hslu modulename random generator was sane
Lextum Mar 14, 2020
e3acdba
can be const probably
Lextum Mar 14, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions src/_locales/de/messages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"ectsPoints": {
"message": "ECTS-Punkte"
},
"moduleTypesSummary": {
"message": "Modultypen Übersicht"
},
"mark": {
"message": "Noten"
},
"moduleSummary": {
"message": "Modulübersicht"
},
"moduleName": {
"message": "Modul-Name"
},
"moduleType": {
"message": "Modul-Typ"
},
"evaluation": {
"message": "Bewertung"
},
"grade": {
"message": "Grad"
},
"quantity": {
"message": "Anzahl"
},
"distribution": {
"message": "Verteilung"
},
"majorModuleInformation": {
"message": "*Majormodule sind spezielle Erweiterungsmodule. Falls alle 24 ECTS eines Majors erreicht wurden, erhält man diesen."
},
"majorModule": {
"message": "Majormodul"
},
"coreModule": {
"message": "Kernmodul"
},
"projectModule": {
"message": "Projektmodul"
},
"additionalModule": {
"message": "Zusatzmodul"
},
"extensionModule": {
"message": "Erweiterungsmodul"
},
"passed": {
"message": "Bestanden"
}
}
53 changes: 53 additions & 0 deletions src/_locales/en/messages.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"ectsPoints": {
"message": "ECTS-Points"
},
"moduleTypesSummary": {
"message": "Module type summary"
},
"mark": {
"message": "Mark"
},
"moduleSummary": {
"message": "Summary of modules"
},
"moduleName": {
"message": "Module name"
},
"moduleType": {
"message": "Module type"
},
"evaluation": {
"message": "Evaluation"
},
"grade": {
"message": "Grade"
},
"quantity": {
"message": "Quantity"
},
"distribution": {
"message": "Distribution"
},
"majorModuleInformation": {
"message": "*Majorsmodules are a kinde of extensionmodules. If you got all 24 ETCS of a major, you get rewarded with a fancy title"
},
"majorModule": {
"message": "Major module"
},
"coreModule": {
"message": "Core module"
},
"projectModule": {
"message": "Project module"
},
"additionalModule": {
"message": "Additional module"
},
"extensionModule": {
"message": "Extension module"
},
"passed": {
"message": "passed"
}
}
4 changes: 2 additions & 2 deletions src/components/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const Helpers = {

/**
* Checks if browser is Firefox or Chromium based
*
*
* @returns: true if the used browser is firefox and false if not
*/
isFirefox: () => {
Expand Down Expand Up @@ -74,7 +74,7 @@ const Helpers = {
/**
* This Helper function returns the moduleList, specific to the used browser
* Chome and Firefox have different APIs for this.
*
*
* @returns: moduleList
*/
getModuleListFromLocalStorage: async () => {
Expand Down
43 changes: 43 additions & 0 deletions src/components/i18n.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/**
* Component for localization functions.
eddex marked this conversation as resolved.
Show resolved Hide resolved
*/

/**
* Returns the language of MyCampus
* @returns {string}
*/
const getMyCampusLanguage = () => {
languageLinks = document.getElementsByClassName("languagelink");
for (let i = 0; i < languageLinks.length; i++) {
const languageLink = languageLinks[i];
if (languageLink.classList.contains("active")) {
return languageLink.hreflang;
}
}

// fallback to default locale
if (Helpers.isFirefox()) {
return (browser.runtime.getManifest()).default_locale
}
else {
return (chrome.runtime.getManifest()).default_locale
}
eddex marked this conversation as resolved.
Show resolved Hide resolved
}

const i18n = {

/**
* Returns the localized message
* @param {string} message wo should be localized
*/
getMessage: async (message) => {
const language = getMyCampusLanguage();
const messages = await fetch(Helpers.getExtensionInternalFileUrl('_locales/' + language + '/messages.json'))
eddex marked this conversation as resolved.
Show resolved Hide resolved
.then(response => response.json())
if (message in messages) {
return messages[message].message
}
return undefined
},
}

38 changes: 35 additions & 3 deletions src/components/module_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,22 +41,28 @@ const ModuleParser = {

/**
* Calculate the semester.
*
*
* @param {string} hsluModuleName: is the 'anlassnumber',
* e.g. 'I.BA_BCHAIN.H1901'.
*/
calculateSemester: (hsluModuleName, firstModule) => {
let semester = undefined;

const startYear = new Date(firstModule.from).getFullYear();
const isStartInAutumn = ModuleParser.isAutumnSemester(firstModule.anlassnumber);

const lastPart = hsluModuleName.split('.')[2];
if (lastPart === undefined) {
// we need this early abort because of entries like 'I.WEIHNACHT_19'
// (which is not even a real module!)
return semester;
}

const moduleYear = Number('20' + lastPart.substring(1, 3));
const isModuleInAutumn = ModuleParser.isAutumnSemester(hsluModuleName);

const yearDifference = (moduleYear - startYear)

let semester = undefined;
if (isModuleInAutumn === undefined) {
// we need this early abort because of entries like 'I.BA_PTA_b.1618'
// (which is not even a real module!)
Expand Down Expand Up @@ -119,7 +125,19 @@ const ModuleParser = {
return null;
}
},

/**
* check if a module is valid
* the modulename should look like this: I.BA_ANLS.F1901
*/
validateModule: (hsluModule) => {
const moduleNameRegex = /^(\w+)\.(.+)\.[FH]\d{4}/g;
eddex marked this conversation as resolved.
Show resolved Hide resolved
const creditsKey = 'ECTS-Punkte';
eddex marked this conversation as resolved.
Show resolved Hide resolved
const hasCredits = (ModuleParser.getItemDetailsValueByKey(hsluModule.details, creditsKey));
if (moduleNameRegex.test(hsluModule.anlassnumber) && hasCredits) {
return true
}
return false
},
/**
* Generates an array of module objects using the API and the module type mapping json file.
*/
Expand Down Expand Up @@ -149,15 +167,29 @@ const ModuleParser = {
.slice()
.reverse()
.find(modul => ModuleParser.isAutumnSemester(modul.anlassnumber) != undefined);
const passedMessage = await i18n.getMessage("passed");

anlasslistApiResponse.items.forEach(item => {

if (!(ModuleParser.validateModule(item))) {
console.log("Not valid module: ", item.anlassnumber);
return;
}
let parsedModule = {};

let passed = item.prop1[0].text == 'Erfolgreich teilgenommen';
parsedModule.passed = passed;

parsedModule.mark = item.note === null ? 'n/a' : item.note;
if (item.note != null) {
parsedModule.mark = item.note;
}
else if (passed) {
parsedModule.mark = passedMessage;
}
else {
parsedModule.mark = 'n/a';
}
parsedModule.grade = item.grade === null ? 'n/a' : item.grade;
parsedModule.name = item.anlassnumber;
parsedModule.from = item.from;
Expand Down
Loading