Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
9 changes: 6 additions & 3 deletions config/i18next-parser.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,12 @@ module.exports = {
lexer: 'HTMLLexer',
attr: 'i18n-data', // Attribute for the keys
optionAttr: 'i18n-options' // Attribute for the options
}]
// mjs: ['JavascriptLexer'],
// js: ['JavascriptLexer'], // if you're writing jsx inside .js files, change this to JsxLexer
}],
// mjs: ['JavascriptLexer'],
js: [{
lexer: 'JavascriptLexer',
functions: ['t', 'addToVerifyList'], // Array of functions to match
}],
// ts: ['JavascriptLexer'],
// jsx: ['JsxLexer'],
// tsx: ['JsxLexer'],
Expand Down
33 changes: 22 additions & 11 deletions empty-user-data.json
Original file line number Diff line number Diff line change
@@ -1,46 +1,57 @@
{
"get_git": {
"challengeId": 1,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"repository": {
"challengeId": 2,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"commit_to_it": {
"challengeId": 3,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"githubbin": {
"challengeId": 4,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"remote_control": {
"challengeId": 5,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"forks_and_clones": {
"challengeId": 6,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"branches_arent_just_for_birds": {
"challengeId": 7,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"its_a_small_world": {
"challengeId": 8,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"pull_never_out_of_date": {
"challengeId": 9,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"requesting_you_pull_please": {
"challengeId": 10,
"completed": false
"challengeComplete": false,
"verifyList": []
},
"merge_tada": {
"challengeId": 11,
"completed": false
"challengeComplete": false,
"verifyList": []
}
}
14 changes: 7 additions & 7 deletions lib/challenge-sidebar-handler.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Runs in: Renderer-Process
* Cares for the Challenge-Sidebar to be up-to-date with completed-status
* Cares for the Challenge-Sidebar to be up-to-date with challengeComplete-status
*/
const path = require('path')
const userData = require(path.normalize(path.join(__dirname, 'user-data.js')))
Expand All @@ -10,21 +10,21 @@ document.addEventListener('DOMContentLoaded', () => {
const challengeUserData = userData.getChallengeData()

Object.keys(challengeUserData).forEach((challengeKey) => {
if (challengeUserData[challengeKey].completed) {
showChallengeCompleted(challengeKey, true)
if (challengeUserData[challengeKey].challengeComplete) {
showChallengeComplete(challengeKey, true)
}
})
})

/*
* Show a challenge as completed/incomplete in sidebar
* Show a challenge as complete/incomplete in sidebar
*/
function showChallengeCompleted (challengeKey, completed) {
if (completed) {
function showChallengeComplete (challengeKey, isComplete) {
if (isComplete) {
document.getElementById('sidebar-' + challengeKey).classList.add('completed')
} else {
document.getElementById('sidebar-' + challengeKey).classList.remove('completed')
}
}

exports.showChallengeCompleted = showChallengeCompleted
exports.showChallengeComplete = showChallengeComplete
30 changes: 18 additions & 12 deletions lib/challenge-verify-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,19 @@ document.addEventListener('DOMContentLoaded', () => {
}

const challengeUserData = userData.getChallengeData(currentChallenge)
if (challengeUserData.completed) {
if (challengeUserData.challengeComplete) {
enableVerifyButtons(false)
enableClearStatusButton(true)
} else {
enableVerifyButtons(true)
enableClearStatusButton(false)
}

// Print-out stored list
if (challengeUserData.verifyList.length > 0) {
printOutVerifyList(challengeUserData.verifyList)
}

// Only if button exists
if (selectDirButton) {
const savedDir = userData.getSavedDir(currentChallenge)
Expand Down Expand Up @@ -84,22 +89,21 @@ async function handleVerifyClick () {
showSpinner(true)
enableVerifyButtons(false)

// In js it is possible to call with more parameters, than defined
// In js it is possible to call with more parameters, than defined, not all challenges need the path-parameter
const result = await verifyChallengeScript(selectedDirPath?.innerText)

clearVerifyList()
printOutVerifyList(result)
printOutVerifyList(result.verifyList)

if (result.challengeComplete) {
enableClearStatusButton(true)
userData.setChallengeCompleted(currentChallenge, true)
sidebarHandler.showChallengeCompleted(currentChallenge, true)
sidebarHandler.showChallengeComplete(currentChallenge, true)
} else {
enableVerifyButtons(true)
}

showSpinner(false)
// TODO write verifyList to userData to be able to reload it (also when reloading translations)?
userData.storeChallengeResult(currentChallenge, result.challengeComplete, result.verifyList)
}

/*
Expand All @@ -113,19 +117,21 @@ async function clearChallengeStatus () {

clearVerifyList()
showVerifyList(false)
sidebarHandler.showChallengeCompleted(currentChallenge, false)
userData.setChallengeCompleted(currentChallenge, false)
sidebarHandler.showChallengeComplete(currentChallenge, false)
userData.clearChallengeResult(currentChallenge, false)
}

/*
* Write out the result.verifyList to the DOM
* Write out the list to the DOM
*/
function printOutVerifyList (result) {
function printOutVerifyList (list) {
showVerifyList(true)
result.verifyList.forEach(listItem => {
list.forEach(listItem => {
const li = document.createElement('li')

li.appendChild(document.createTextNode(listItem.message))
li.appendChild(document.createTextNode(
i18n.t(listItem.message, listItem.data)
))
if (listItem.pass) {
li.classList.add('verify-pass')
} else {
Expand Down
2 changes: 1 addition & 1 deletion lib/index-challenge-handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Go through the challenges in challengeUserData to see which are completed
let countCompleted = 0
challengeUserDataKeys.forEach((challengeKey, index) => {
if (challengeUserData[challengeKey].completed) {
if (challengeUserData[challengeKey].challengeComplete) {
countCompleted++
progressCircles[index].classList.add('completed') // Mark corresponding circle as completed
if (index < challengeUserDataKeys.length - 1) {
Expand Down
22 changes: 16 additions & 6 deletions lib/user-data.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,26 @@ function getChallengeData (challenge = null) {
}
return fileContent
}
// Set given challenge completed-status
function setChallengeCompleted (challenge, completed) {
// Store challenge verify-data
function storeChallengeResult (challenge, challengeComplete, verifyList) {
const fileContent = getChallengeData()
fileContent[challenge].completed = completed
fileContent[challenge].challengeComplete = challengeComplete
fileContent[challenge].verifyList = verifyList
writeData(userDataFile, fileContent)
}
// Clear all challenges - Set all challenges as incomplete
// Clear challenge verify-data
function clearChallengeResult (challenge) {
const fileContent = getChallengeData()
fileContent[challenge].challengeComplete = false
fileContent[challenge].verifyList = []
writeData(userDataFile, fileContent)
}
// Clear all challenges - Set all challenges as incomplete and clear verifyLists
function clearAllChallenges () {
const fileContent = getChallengeData()
Object.keys(fileContent).forEach(challenge => {
fileContent[challenge].completed = false
fileContent[challenge].challengeComplete = false
fileContent[challenge].verifyList = []
})
writeData(userDataFile, fileContent)
}
Expand Down Expand Up @@ -79,7 +88,8 @@ function writeData (file, data) {
}

exports.getChallengeData = getChallengeData
exports.setChallengeCompleted = setChallengeCompleted
exports.storeChallengeResult = storeChallengeResult
exports.clearChallengeResult = clearChallengeResult
exports.clearAllChallenges = clearAllChallenges
exports.getSavedDir = getSavedDir
exports.updateSavedDir = updateSavedDir
23 changes: 11 additions & 12 deletions lib/verify/branches_arent_just_for_birds.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
const fs = require('fs')
const path = require('path')
const i18n = require('electron').remote.getGlobal('i18n')
const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers')

// get their username
Expand All @@ -14,15 +13,15 @@ module.exports = function (repopath) {

// path should be a directory
if (!fs.lstatSync(repopath).isDirectory()) {
addToVerifyList(result.verifyList, i18n.t('verify~Path is not a directory.'), false)
addToVerifyList('verify~Path is not a directory.', false, result.verifyList)
return result
}

// Get stored username
try {
username = execGit('config user.username', { cwd: repopath })
} catch (err) {
addToVerifyList(result.verifyList, 'Error: ' + err.message, false)
addToVerifyList('Error: ' + err.message, false, result.verifyList)
return result
}

Expand All @@ -32,12 +31,12 @@ module.exports = function (repopath) {

const expectedBranch = 'add-' + username
if (currentBranch.match(expectedBranch)) {
addToVerifyList(result.verifyList, i18n.t('verify~Found branch as expected!'), true)
addToVerifyList('verify~Found branch as expected!', true, result.verifyList)
} else {
addToVerifyList(result.verifyList, i18n.t('verify~Branch name expected: {/expectedBranch/}', { expectedBranch }), false)
addToVerifyList('verify~Branch name expected: {/expectedBranch/}', false, result.verifyList, { expectedBranch })
}
} catch (err) {
addToVerifyList(result.verifyList, 'Error: ' + err.message, false)
addToVerifyList('Error: ' + err.message, false, result.verifyList)
return result
}

Expand All @@ -53,14 +52,14 @@ module.exports = function (repopath) {
const allFiles = out.join()

if (allFiles.match('add-' + username)) {
addToVerifyList(result.verifyList, i18n.t('verify~File in contributors folder!'), true)
addToVerifyList('verify~File in contributors folder!', true, result.verifyList)
} else {
addToVerifyList(result.verifyList, i18n.t('verify~File not found in contributors folder.'), false)
addToVerifyList('verify~File not found in contributors folder.', false, result.verifyList)
return result
}
} catch (err) {
// TODO ENOENT: no such file or directory, scandir '/Users/jlord/jCode/.../contributors/'
addToVerifyList(result.verifyList, 'Error: ' + err.message, false)
addToVerifyList('Error: ' + err.message, false, result.verifyList)
return result
}

Expand All @@ -71,13 +70,13 @@ module.exports = function (repopath) {
const log = execGit('reflog show origin/' + currentBranch, { cwd: repopath })

if (log.match('update by push')) {
addToVerifyList(result.verifyList, i18n.t('verify~Changes have been pushed!'), true)
addToVerifyList('verify~Changes have been pushed!', true, result.verifyList)
} else {
addToVerifyList(result.verifyList, i18n.t('verify~Changes not pushed.'), false)
addToVerifyList('verify~Changes not pushed.', false, result.verifyList)
}
} catch (err) {
console.log(err.message)
addToVerifyList(result.verifyList, i18n.t('verify~Changes not pushed.'), false)
addToVerifyList('verify~Changes not pushed.', false, result.verifyList)
}

result.challengeComplete = checkChallengeComplete(result.verifyList)
Expand Down
11 changes: 5 additions & 6 deletions lib/verify/commit_to_it.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const fs = require('fs')
const i18n = require('electron').remote.getGlobal('i18n')
const { addToVerifyList, checkChallengeComplete, execGit, getEmptyVerifyResult } = require('./verify-helpers')

// check that they've commited changes
Expand All @@ -8,22 +7,22 @@ module.exports = function (path) {

// path should be a directory
if (!fs.lstatSync(path).isDirectory()) {
addToVerifyList(result.verifyList, i18n.t('verify~Path is not a directory.'), false)
addToVerifyList('verify~Path is not a directory.', false, result.verifyList)
return result
}

try {
const show = execGit('status', { cwd: path })

if (show.match('No commits yet')) {
addToVerifyList(result.verifyList, i18n.t("verify~Can't find committed changes."), false)
addToVerifyList("verify~Can't find committed changes.", false, result.verifyList)
} else if (show.match('nothing to commit')) {
addToVerifyList(result.verifyList, i18n.t('verify~Changes have been committed!'), true)
addToVerifyList('verify~Changes have been committed!', true, result.verifyList)
} else {
addToVerifyList(result.verifyList, i18n.t('verify~Seems there are still changes to commit.'), false)
addToVerifyList('verify~Seems there are still changes to commit.', false, result.verifyList)
}
} catch (err) {
addToVerifyList(result.verifyList, 'Error: ' + err.message, false)
addToVerifyList('Error: ' + err.message, false, result.verifyList)
}

result.challengeComplete = checkChallengeComplete(result.verifyList)
Expand Down
Loading