From d87c8ff6ca609c0610396360bf8dc58038e318cf Mon Sep 17 00:00:00 2001 From: Heitor Mattosinho Date: Wed, 20 Sep 2023 16:35:55 -0300 Subject: [PATCH 1/2] feat (engsw): allow late submissions --- .../author/env/inf331_2023/js/lab-progress.js | 20 ++++++---- .../public/infra/conditional-layout.js | 38 +++++++++---------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/src/adonisjs/public/author/env/inf331_2023/js/lab-progress.js b/src/adonisjs/public/author/env/inf331_2023/js/lab-progress.js index a5751c4a..5328241a 100644 --- a/src/adonisjs/public/author/env/inf331_2023/js/lab-progress.js +++ b/src/adonisjs/public/author/env/inf331_2023/js/lab-progress.js @@ -11,7 +11,7 @@ 3:this.setDateToISO(hourExpiration(new Date('2023/09/11 GMT-0300'),14)),4:this.setDateToISO(hourExpiration(new Date('2023/09/16 GMT-0300'),18)), 5:this.setDateToISO(hourExpiration(new Date('2023/09/20 GMT-0300'),18)),6:this.setDateToISO(hourExpiration(new Date('2023/09/27 GMT-0300'),18))} this.labExpiration = {1:this.setDateToISO(hourExpiration(new Date('2023/09/18 GMT-0300'),23)), 2:this.setDateToISO(hourExpiration(new Date('2023/09/18 GMT-0300'),23)), - 3:this.setDateToISO(hourExpiration(new Date('2023/09/18 GMT-0300'),23)),4:this.setDateToISO(hourExpiration(new Date('2023/09/23 GMT-0300'),23)), + 3:this.setDateToISO(hourExpiration(new Date('2023/09/18 GMT-0300'),23)),4:this.setDateToISO(hourExpiration(new Date('2023/09/30 GMT-0300'),23)), 5:this.setDateToISO(hourExpiration(new Date('2023/09/30 GMT-0300'),23)),6:this.setDateToISO(hourExpiration(new Date('2023/10/06 GMT-0300'),23))} this.start = this.start.bind(this) MessageBus.i.subscribe('control/html/ready', this.start) @@ -231,6 +231,7 @@ let createdBtn = false let released = true const lateReleaseTxt = 'Não publicado...(atraso)' + const progressLate = 'Aberto (com perda na nota)' progressWrapper.innerHTML = '' for (let i = 1; i <= Object.keys(this.labRelease).length; i++) { labCompleted = false @@ -285,12 +286,12 @@ }else if (pastRelease && labExpired && !labExtended){ // console.log('============ release and expiration greater') - template.innerHTML = labProgressManager.lvlContainerExpired + template.innerHTML = labProgressManager.lvlContainer .replace(/\[containerColor\]/ig, 'bg-lab-primary') .replace(/\[btnColor\]/ig, 'btn-lab-secondary') .replace(/\[labNumber\]/ig, Object.keys(this.labRelease)[i-1]) - .replace(/\[progress\]/ig, 'Fechado') - .replace(/\[progressColor\]/ig, labCompleted?successColor:'bg-lab-dark text-lab-light') + .replace(/\[progress\]/ig, progressLate) + .replace(/\[progressColor\]/ig, failColor) .replace(/\[this.labExpirationColor\]/ig, 'bg-lab-dark text-lab-light-pink') .replace(/\[this.labExpiration\]/ig, `${this.convertToLocalTz(this.labExpiration[i],'string')}`) @@ -298,6 +299,8 @@ .replace(/\[labDeliveredColor\]/ig, labDelivered?successColor:failColor) .replace(/\[labLastEdit\]/ig, labLastEdit) .replace(/\[labLastEditColor\]/ig, (failColor)) + .replace(/\[labId\]/ig, labList[i]['id']) + .replace(/\[buttonIcon\]/ig, 'play') }else if (pastRelease && !labExpired || (pastRelease && labExpired && labExtended)){ if (labExtended){ template.innerHTML = labProgressManager.lvlContainer @@ -336,12 +339,12 @@ }else if(pastRelease && labExpired && !labExtended){ - template.innerHTML = labProgressManager.lvlContainerExpired + template.innerHTML = labProgressManager.lvlContainer .replace(/\[containerColor\]/ig, 'bg-lab-primary') .replace(/\[btnColor\]/ig, 'btn-lab-secondary') .replace(/\[labNumber\]/ig, Object.keys(this.labRelease)[i-1]) - .replace(/\[progress\]/ig, 'Fechado') - .replace(/\[progressColor\]/ig, labCompleted?successColor:'bg-lab-dark text-lab-light') + .replace(/\[progress\]/ig, progressLate) + .replace(/\[progressColor\]/ig, failColor) .replace(/\[this.labExpirationColor\]/ig, 'bg-lab-dark text-lab-light-pink') .replace(/\[this.labExpiration\]/ig, `${this.convertToLocalTz(this.labExpiration[i],'string')}`) @@ -349,6 +352,8 @@ .replace(/\[labDeliveredColor\]/ig, labDelivered?successColor:failColor) .replace(/\[labLastEdit\]/ig, labLastEdit) .replace(/\[labLastEditColor\]/ig, (failColor)) + .replace(/\[buttonIcon\]/ig, 'plus') + }else if (pastRelease){ if (released == false){ template.innerHTML = labProgressManager.lvlContainerLocked @@ -357,7 +362,6 @@ .replace(/\[labText\]/ig, lateReleaseTxt) }else{ - console.log('heere',i); createdBtn = true if (!labExpired || (pastRelease && labExpired && labExtended)){ if (labExtended){ diff --git a/src/adonisjs/public/infra/conditional-layout.js b/src/adonisjs/public/infra/conditional-layout.js index ee5af479..522e04d9 100644 --- a/src/adonisjs/public/infra/conditional-layout.js +++ b/src/adonisjs/public/infra/conditional-layout.js @@ -294,7 +294,7 @@ class LayoutController { if(userGrade === 'student'){ let labN = LayoutController.case.message.keywords labN = labN.substring(labN.length-1) - const expirationDate = labProgressManager.i.labExpiration[labN] + const expirationDate = new Date() //Verifies property 'feedback' to disable button and change layout if(LayoutController.case.message.property.complete){ if(LayoutController.case.message.property.complete == 0){ @@ -327,24 +327,24 @@ class LayoutController { document.querySelector('#harena-case-property').remove() document.querySelector('#harena-inf331-complete-lab').remove() }) - let currentDate = labProgressManager.i.setDateToISO(new Date()) - if (expirationDate < currentDate && LayoutController.case.message.property.extendPeriod == null){ - const saveBtn = document.querySelector('#btn-save-draft') - saveBtn.innerHTML = 'Data da entrega expirada' - btnLabDelivered.firstElementChild.innerHTML = btnLabDelivered.firstElementChild.innerHTML == 'Entregar'?'Não entregue':'Entregue' - saveBtn.classList.add('disabled') - saveBtn.classList.add('no-pointer') - saveBtn.nextElementSibling.topic = "" - }else if (LayoutController.case.message.property.extendPeriod != null){ - if (labProgressManager.i.setDateToISO(new Date(LayoutController.case.message.property.extendPeriod)) < currentDate){ - const saveBtn = document.querySelector('#btn-save-draft') - saveBtn.innerHTML = 'Data da entrega expirada' - btnLabDelivered.firstElementChild.innerHTML = btnLabDelivered.firstElementChild.innerHTML == 'Entregar'?'Não entregue':'Entregue' - saveBtn.classList.add('disabled') - saveBtn.classList.add('no-pointer') - saveBtn.nextElementSibling.topic = "" - } - } + // let currentDate = labProgressManager.i.setDateToISO(new Date()) + // if (expirationDate < currentDate && LayoutController.case.message.property.extendPeriod == null){ + // const saveBtn = document.querySelector('#btn-save-draft') + // saveBtn.innerHTML = 'Data da entrega expirada' + // btnLabDelivered.firstElementChild.innerHTML = btnLabDelivered.firstElementChild.innerHTML == 'Entregar'?'Não entregue':'Entregue' + // saveBtn.classList.add('disabled') + // saveBtn.classList.add('no-pointer') + // saveBtn.nextElementSibling.topic = "" + // }else if (LayoutController.case.message.property.extendPeriod != null){ + // if (labProgressManager.i.setDateToISO(new Date(LayoutController.case.message.property.extendPeriod)) < currentDate){ + // const saveBtn = document.querySelector('#btn-save-draft') + // saveBtn.innerHTML = 'Data da entrega expirada' + // btnLabDelivered.firstElementChild.innerHTML = btnLabDelivered.firstElementChild.innerHTML == 'Entregar'?'Não entregue':'Entregue' + // saveBtn.classList.add('disabled') + // saveBtn.classList.add('no-pointer') + // saveBtn.nextElementSibling.topic = "" + // } + // } } /*else if(userGrade === 'professor' || userGrade === 'coordinator'){ if(document.querySelector('#harena-inf331-complete-lab')) From 67a1aa7ec0c74cfcd2b633777a5beab22ab6422f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Santanch=C3=A8?= Date: Thu, 21 Sep 2023 15:54:57 -0300 Subject: [PATCH 2/2] feat (engsw): lab4 template --- .../public/templates/labs/lab_4-dynamic.md | 143 ++++++++++++++++++ .../public/templates/labs/lab_4-static.md | 8 + src/adonisjs/public/templates/templates.json | 7 + 3 files changed, 158 insertions(+) create mode 100644 src/adonisjs/public/templates/labs/lab_4-dynamic.md create mode 100644 src/adonisjs/public/templates/labs/lab_4-static.md diff --git a/src/adonisjs/public/templates/labs/lab_4-dynamic.md b/src/adonisjs/public/templates/labs/lab_4-dynamic.md new file mode 100644 index 00000000..f3ae3e6e --- /dev/null +++ b/src/adonisjs/public/templates/labs/lab_4-dynamic.md @@ -0,0 +1,143 @@ +# Tarefa 1 # + +

Pré-componentes Push e Pull

+

Versão Push

+
+
+ +{{explica1 +**Parte 1 - Função de segundo grau** + +Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Push** e os enviem para um objeto `BarChart`. +}} + + +{{codigo1 +Escreva a classe aqui. +}} + + +
+ +{{explica2 +**Parte 2 - Plotagem de parábola** + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Push**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados. +}} + + +{{codigo2 +Escreva todo o código desta parte da tarefa aqui. +}} + + +
+ +# Tarefa 2 # + +

Pré-componentes Push e Pull

+

Versão Pull

+
+
+ +{{explica1 +**Parte 1 - Função de segundo grau** + +Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Pull**, ou seja, são produzidos sob demanda a partir de solicitação dos métodos `first` e `next`. +}} + + +{{codigo1 +Escreva a classe aqui. +}} + + +
+ +{{explica2 +**Parte 2 - Plotagem de parábola** + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Pull**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados. +}} + + +{{codigo2 +Escreva todo o código desta parte da tarefa aqui. +}} + + +
+ +# Tarefa 3 # + +

Visão Interna do Componente

+

Linha de Montagem

+
+
+ +{{explica1 +**Parte 1 - Função de segundo grau** + +Evolua a sua classe para produção de valores de uma função de segundo grau - `SecondDegree` (abordagem pull) - organizando-a em um pacote, com construtor sem argumentos e acesso a propriedades (`gets` e `sets`). +}} + + +{{codigo1 +Escreva a classe aqui. +}} + + +
+ +{{explica2 +**Parte 2 - Plotagem de parábola** + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola usando seu novo modelo. +}} + + +{{codigo2 +Escreva todo o código desta parte da tarefa aqui. +}} + + +
+ +# Tarefa 4 # + +

Visão Interna do Componente

+

Acesso Exclusivo por Interfaces

+
+
+ +{{explica1 +**Parte 1 - Função de segundo grau** + +Evolua o seu componente para produção de valores de uma função de segundo grau - `SecondDegree` (abordagem pull) – tornando o acesso exclusivo por interfaces. +}} + + +{{codigo1 +Escreva a classe aqui. +}} + + +
+ +{{explica2 +**Parte 2 - Plotagem de parábola** + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola usando seu novo modelo com acesso exclusivo por interfaces. Preste atenção que o componente deverá suportar o `ISequence` para conseguir se conectar ao `BarChart`. +}} + + +{{codigo2 +Escreva todo o código desta parte da tarefa aqui. +}} + + +
+ +___ Template ___ + +* template: labs/lab_4 diff --git a/src/adonisjs/public/templates/labs/lab_4-static.md b/src/adonisjs/public/templates/labs/lab_4-static.md new file mode 100644 index 00000000..9026b7b4 --- /dev/null +++ b/src/adonisjs/public/templates/labs/lab_4-static.md @@ -0,0 +1,8 @@ +___ Flow ___ + +* Sequential: + * _sequential_ + +___ Data ___ + +* theme: simple(blue) diff --git a/src/adonisjs/public/templates/templates.json b/src/adonisjs/public/templates/templates.json index c4045e79..57fe10e1 100644 --- a/src/adonisjs/public/templates/templates.json +++ b/src/adonisjs/public/templates/templates.json @@ -33,6 +33,13 @@ "icon": "labs/labs.png", "scope": "case", "environment": "development"}, +"Lab 4": + {"questId": "labs", + "description": "Lab 4.", + "path": "labs/lab_4", + "icon": "labs/labs.png", + "scope": "case", + "environment": "jacinto"}, "Zombie": {"questId": "zombie", "description": "Zombie Venom.",