From 9be792cd97f1304fe282edbd8f98587af7c66c39 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:10:42 +0000 Subject: [PATCH] deploy: e3680dad33e38aad8b8a7547a641b5ccc13dbbd0 --- AboutUs.html | 2 +- AboutUs.page-vue-render.js | 2 +- Configuration.html | 2 +- Configuration.page-vue-render.js | 2 +- DevOps.html | 2 +- DevOps.page-vue-render.js | 2 +- DeveloperGuide.html | 2 +- DeveloperGuide.page-vue-render.js | 2 +- Documentation.html | 2 +- Documentation.page-vue-render.js | 2 +- Logging.html | 2 +- Logging.page-vue-render.js | 2 +- SettingUp.html | 2 +- SettingUp.page-vue-render.js | 2 +- Testing.html | 2 +- Testing.page-vue-render.js | 2 +- UserGuide.html | 2 +- UserGuide.page-vue-render.js | 2 +- diagrams/BetterModelClassDiagram.png | Bin 13418 -> 16302 bytes diagrams/BetterModelClassDiagram.puml | 1 + diagrams/ModelClassDiagram.png | Bin 26947 -> 30507 bytes diagrams/ModelClassDiagram.puml | 2 ++ index.html | 2 +- index.page-vue-render.js | 2 +- team/abdulrahmanalrammah.html | 2 +- team/abdulrahmanalrammah.page-vue-render.js | 2 +- team/andrew22teoh.html | 2 +- team/andrew22teoh.page-vue-render.js | 2 +- team/johndoe.html | 2 +- team/johndoe.page-vue-render.js | 2 +- team/liauzhanyi.html | 2 +- team/liauzhanyi.page-vue-render.js | 2 +- team/rayray39.html | 2 +- team/rayray39.page-vue-render.js | 2 +- 34 files changed, 33 insertions(+), 30 deletions(-) diff --git a/AboutUs.html b/AboutUs.html index a9b26233e51..4aa45c6ae74 100644 --- a/AboutUs.html +++ b/AboutUs.html @@ -21,7 +21,7 @@ [portfolio]

Rayner Lim Fang Yuh

[github] [portfolio]

Rachael Chan

[github] [portfolio]

Liau Zhan Yi

[github] -[portfolio]

+[portfolio]

diff --git a/AboutUs.page-vue-render.js b/AboutUs.page-vue-render.js index 02f8c9355da..386e5e42b6a 100644 --- a/AboutUs.page-vue-render.js +++ b/AboutUs.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"about-us"}},[_v("About Us"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#about-us","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("We are a team based in the "),_c('a',{attrs:{"href":"http://www.comp.nus.edu.sg"}},[_v("School of Computing, National University of Singapore")]),_v(".")]),_v(" "),_c('p',[_v("You can reach us at the email "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seer[at]comp.nus.edu.sg")])]),_v(" "),_c('h2',{attrs:{"id":"project-team"}},[_v("Project team"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-team","onclick":"event.stopPropagation()"}})]),_v(" "),_c('h3',{attrs:{"id":"andrew-teoh"}},[_v("Andrew Teoh"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#andrew-teoh","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/andrew22teoh.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"https://github.com/andrew22teoh"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/andrew22teoh.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Team Lead")])]),_v(" "),_c('h3',{attrs:{"id":"abdulrahman-al-rammah"}},[_v("Abdulrahman Al Rammah"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#abdulrahman-al-rammah","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/abdulrahmanalrammah.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/abdulrahmanalrammah"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/abdulrahmanalrammah.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: Documentation")])]),_v(" "),_c('h3',{attrs:{"id":"rayner-lim-fang-yuh"}},[_v("Rayner Lim Fang Yuh"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#rayner-lim-fang-yuh","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/rayray39.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/rayray39"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/johndoe.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Developer")]),_v(" "),_c('li',[_v("Responsibilities: UI")])]),_v(" "),_c('h3',{attrs:{"id":"rachael-chan"}},[_v("Rachael Chan"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#rachael-chan","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/rachael-chan.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"http://github.com/rachael-chan"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/rachaelchan.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Software Engineer")]),_v(" "),_c('li',[_v("Responsibilities: In charge of "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Model")])])]),_v(" "),_c('h3',{attrs:{"id":"liau-zhan-yi"}},[_v("Liau Zhan Yi"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#liau-zhan-yi","onclick":"event.stopPropagation()"}})]),_v(" "),_c('img',{attrs:{"src":"/tp/images/liauzhanyi.png","width":"200px"}}),_v(" "),_c('p',[_v("["),_c('a',{attrs:{"href":"https://github.com/liauzhanyi"}},[_v("github")]),_v("]\n["),_c('a',{attrs:{"href":"/tp/team/liauzhanyi.html"}},[_v("portfolio")]),_v("]")]),_v(" "),_c('ul',[_c('li',[_v("Role: Integration")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Configuration.html b/Configuration.html index 9bc0163c90c..f983d228bdc 100644 --- a/Configuration.html +++ b/Configuration.html @@ -16,7 +16,7 @@ Search

Configuration guide

Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: config.json).

+
  • Configuration guide

    Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: config.json).

    diff --git a/Configuration.page-vue-render.js b/Configuration.page-vue-render.js index d72ab878dbc..5d07f05c9ae 100644 --- a/Configuration.page-vue-render.js +++ b/Configuration.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"configuration-guide"}},[_v("Configuration guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#configuration-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("Certain properties of the application can be controlled (e.g user preferences file location, logging level) through the configuration file (default: "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("config.json")]),_v(").")])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/DevOps.html b/DevOps.html index 6d58b8037bd..bdf39a259f7 100644 --- a/DevOps.html +++ b/DevOps.html @@ -18,7 +18,7 @@
  • DevOps guide

    Build automation

    This project uses Gradle for build automation and dependency management. You are recommended to read this Gradle Tutorial from the se-edu/guides.

    Given below are how to use Gradle for some important project tasks.


    Continuous integration (CI)

    This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the .github/workflows folder). No further setting up required.

    Code coverage

    As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.

    However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.

    To enable Codecov for forks of this project, follow the steps given in this se-edu guide.

    Repository-wide checks

    In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.

    These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:

    ./config/travis/run-checks.sh

    Any warnings or errors will be printed out to the console.

    If adding new checks:


    Making a release

    Here are the steps to create a new release.

    1. Update the version number in MainApp.java.
    2. Generate a fat JAR file using Gradle (i.e., gradlew shadowJar).
    3. Tag the repo with the version number. e.g. v0.1
    4. Create a new release using GitHub. Upload the JAR file you created.
    +e.g. ./gradlew shadowJar.

  • run: Builds and runs the application.
    runShadow: Builds the application as a fat JAR, and then runs it.

  • checkstyleMain: Runs the code style check for the main code base.
    checkstyleTest: Runs the code style check for the test code base.

  • test: Runs all tests.


  • Continuous integration (CI)

    This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the .github/workflows folder). No further setting up required.

    Code coverage

    As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.

    However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.

    To enable Codecov for forks of this project, follow the steps given in this se-edu guide.

    Repository-wide checks

    In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.

    These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:

    ./config/travis/run-checks.sh

    Any warnings or errors will be printed out to the console.

    If adding new checks:


    Making a release

    Here are the steps to create a new release.

    1. Update the version number in MainApp.java.
    2. Generate a fat JAR file using Gradle (i.e., gradlew shadowJar).
    3. Tag the repo with the version number. e.g. v0.1
    4. Create a new release using GitHub. Upload the JAR file you created.
    diff --git a/DevOps.page-vue-render.js b/DevOps.page-vue-render.js index 30a8b25d6e0..f431c90f294 100644 --- a/DevOps.page-vue-render.js +++ b/DevOps.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"devops-guide"}},[_v("DevOps guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#devops-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('div',{pre:true,attrs:{"class":"page-nav-print d-none d-print-block"}}),_v(" "),_c('h2',{attrs:{"id":"build-automation"}},[_v("Build automation"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#build-automation","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses Gradle for "),_c('strong',[_v("build automation and dependency management")]),_v(". "),_c('strong',[_v("You are recommended to read "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/gradle.html"}},[_v("this Gradle Tutorial from the se-edu/guides")])]),_v(".")]),_v(" "),_c('p',[_v("Given below are how to use Gradle for some important project tasks.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clean")])]),_v(": Deletes the files created during the previous build tasks (e.g. files in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build")]),_v(" folder)."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("shadowJar")])]),_v(": Uses the ShadowJar plugin to creat a fat JAR file in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("build/lib")]),_v(" folder, "),_c('em',[_v("if the current file is outdated")]),_v("."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew shadowJar")]),_v(".")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run")])]),_v(": Builds and runs the application."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("runShadow")])]),_v(": Builds the application as a fat JAR, and then runs it.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleMain")])]),_v(": Runs the code style check for the main code base."),_c('br'),_v(" "),_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("checkstyleTest")])]),_v(": Runs the code style check for the test code base.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("test")])]),_v(": Runs all tests.")]),_v(" "),_c('ul',[_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew test")]),_v(" — Runs all tests")]),_v(" "),_c('li',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./gradlew clean test")]),_v(" — Cleans the project and runs tests")])])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"continuous-integration-ci"}},[_v("Continuous integration (CI)"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#continuous-integration-ci","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("This project uses GitHub Actions for CI. The project comes with the necessary GitHub Actions configurations files (in the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github/workflows")]),_v(" folder). No further setting up required.")]),_v(" "),_c('h3',{attrs:{"id":"code-coverage"}},[_v("Code coverage"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#code-coverage","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("As part of CI, this project uses Codecov to generate coverage reports. When CI runs, it will generate code coverage data (based on the tests run by CI) and upload that data to the CodeCov website, which in turn can provide you more info about the coverage of your tests.")]),_v(" "),_c('p',[_v("However, because Codecov is known to run into intermittent problems (e.g., report upload fails) due to issues on the Codecov service side, the CI is configured to pass even if the Codecov task failed. Therefore, developers are advised to check the code coverage levels periodically and take corrective actions if the coverage level falls below desired levels.")]),_v(" "),_c('p',[_v("To enable Codecov for forks of this project, follow the steps given in "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/codecov.html"}},[_v("this se-edu guide")]),_v(".")]),_v(" "),_c('h3',{attrs:{"id":"repository-wide-checks"}},[_v("Repository-wide checks"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#repository-wide-checks","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("In addition to running Gradle checks, CI includes some repository-wide checks. Unlike the Gradle checks which only cover files used in the build process, these repository-wide checks cover all files in the repository. They check for repository rules which are hard to enforce on development machines such as line ending requirements.")]),_v(" "),_c('p',[_v("These checks are implemented as POSIX shell scripts, and thus can only be run on POSIX-compliant operating systems such as macOS and Linux. To run all checks locally on these operating systems, execute the following in the repository root directory:")]),_v(" "),_c('p',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("./config/travis/run-checks.sh")])]),_v(" "),_c('p',[_v("Any warnings or errors will be printed out to the console.")]),_v(" "),_c('p',[_c('strong',[_v("If adding new checks:")])]),_v(" "),_c('ul',[_c('li',[_c('p',[_v("Checks are implemented as executable "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("check-*")]),_v(" scripts within the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".github")]),_v(" directory. The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("run-checks.sh")]),_v(" script will automatically pick up and run files named as such. That is, you can add more such files if you need and the CI will do the rest.")])]),_v(" "),_c('li',[_c('p',[_v("Check scripts should print out errors in the format "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("SEVERITY:FILENAME:LINE: MESSAGE")])]),_v(" "),_c('ul',[_c('li',[_v("SEVERITY is either ERROR or WARN.")]),_v(" "),_c('li',[_v("FILENAME is the path to the file relative to the current directory.")]),_v(" "),_c('li',[_v("LINE is the line of the file where the error occurred and MESSAGE is the message explaining the error.")])])]),_v(" "),_c('li',[_c('p',[_v("Check scripts must exit with a non-zero exit code if any errors occur.")])])]),_v(" "),_c('hr'),_v(" "),_c('h2',{attrs:{"id":"making-a-release"}},[_v("Making a release"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#making-a-release","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("Here are the steps to create a new release.")]),_v(" "),_c('ol',[_c('li',[_v("Update the version number in "),_c('a',{attrs:{"href":"https://github.com/AY2425S1-CS2103-F10-2/tp/blob/master/src/main/java/seedu/address/MainApp.java"}},[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("MainApp.java")])]),_v(".")]),_v(" "),_c('li',[_v("Generate a fat JAR file using Gradle (i.e., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("gradlew shadowJar")]),_v(").")]),_v(" "),_c('li',[_v("Tag the repo with the version number. e.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v0.1")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"https://help.github.com/articles/creating-releases/"}},[_v("Create a new release using GitHub")]),_v(". Upload the JAR file you created.")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/DeveloperGuide.html b/DeveloperGuide.html index 0b25a2e6a8a..ad9db8f4b2e 100644 --- a/DeveloperGuide.html +++ b/DeveloperGuide.html @@ -30,7 +30,7 @@ Expected: Similar to previous.

  • Deleting persons while all persons are being shown

    1. Prerequisites: List all persons using the list command. Multiple persons in the list.

    2. Test case: delete 1 2
      Expected: First and second contact are deleted from the list. Names of the deleted contacts are shown in the status message. Timestamp in the status bar is updated.

    3. Test case: delete x y
      (where x,y are greater than the number of listed persons) Expected: No person is deleted. Error details shown in the status message. Status bar remains the same.

    4. Test case: delete 0 1
      -Expected: First contact is deleted from the list. Name of the deleted contact and invalidity of the index 0 is shown in the status message. Timestamp in the status bar is updated.

  • Saving data

    1. Dealing with missing/corrupted data files

      1. {explain how to simulate a missing/corrupted file, and the expected behavior}
    2. { more test cases …​ }

    +Expected: First contact is deleted from the list. Name of the deleted contact and invalidity of the index 0 is shown in the status message. Timestamp in the status bar is updated.

    Saving data

    1. Dealing with missing/corrupted data files

      1. {explain how to simulate a missing/corrupted file, and the expected behavior}
    2. { more test cases …​ }

    diff --git a/DeveloperGuide.page-vue-render.js b/DeveloperGuide.page-vue-render.js index f1955f0a4f0..10388af7b34 100644 --- a/DeveloperGuide.page-vue-render.js +++ b/DeveloperGuide.page-vue-render.js @@ -311,6 +311,6 @@ with(this){return _c('h3',{attrs:{"id":"saving-data"}},[_v("Saving data"),_c('a' with(this){return _c('ol',[_c('li',[_c('p',[_v("Dealing with missing/corrupted data files")]),_v(" "),_c('ol',[_c('li',[_c('em',[_v("{explain how to simulate a missing/corrupted file, and the expected behavior}")])])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{ more test cases …​ }")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Documentation.html b/Documentation.html index 6a6b1c8df64..0ce6ddede48 100644 --- a/Documentation.html +++ b/Documentation.html @@ -16,7 +16,7 @@ Search

    Documentation Guide

    Style guidance:

    Converting to PDF

    +
  • Documentation Guide

    Style guidance:

    Converting to PDF

    diff --git a/Documentation.page-vue-render.js b/Documentation.page-vue-render.js index 82d6c1ecb5f..2bedf716b4d 100644 --- a/Documentation.page-vue-render.js +++ b/Documentation.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"documentation-guide"}},[_v("Documentation Guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#documentation-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_v("We use "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_c('strong',[_v("MarkBind")])]),_v(" to manage documentation.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("docs/")]),_v(" folder contains the source files for the documentation website.")]),_v(" "),_c('li',[_v("To learn how set it up and maintain the project website, follow the guide "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/markbind-forked-sites.html"}},[_v("[se-edu/guides] Working with Forked MarkBind sites")]),_v(" for project documentation.")])]),_v(" "),_c('p',[_c('strong',[_v("Style guidance:")])]),_v(" "),_c('ul',[_c('li',[_v("Follow the "),_c('a',{attrs:{"href":"https://developers.google.com/style"}},[_c('strong',[_c('em',[_v("Google developer documentation style guide")])])]),_v(".")]),_v(" "),_c('li',[_v("Also relevant is the "),_c('a',{attrs:{"href":"https://se-education.org/guides/conventions/markdown.html"}},[_c('em',[_v("se-edu/guides "),_c('strong',[_v("Markdown coding standard")])])]),_v(".")])]),_v(" "),_c('p',[_c('strong',[_v("Converting to PDF")])]),_v(" "),_c('ul',[_c('li',[_v("See the guide "),_c('a',{attrs:{"href":"https://se-education.org/guides/tutorials/savingPdf.html"}},[_c('em',[_v("se-edu/guides "),_c('strong',[_v("Saving web documents as PDF files")])])]),_v(".")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Logging.html b/Logging.html index fb9b90a7c92..f45a2b61368 100644 --- a/Logging.html +++ b/Logging.html @@ -16,7 +16,7 @@ Search

    Logging guide

    +
  • Logging guide

    diff --git a/Logging.page-vue-render.js b/Logging.page-vue-render.js index b59abaf5305..568d8a648b4 100644 --- a/Logging.page-vue-render.js +++ b/Logging.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"logging-guide"}},[_v("Logging guide"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#logging-guide","onclick":"event.stopPropagation()"}})]),_v(" "),_c('ul',[_c('li',[_v("We are using "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("java.util.logging")]),_v(" package for logging.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogsCenter")]),_v(" class is used to manage the logging levels and logging destinations.")]),_v(" "),_c('li',[_v("The "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("Logger")]),_v(" for a class can be obtained using "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("LogsCenter.getLogger(Class)")]),_v(" which will log messages according to the specified logging level.")]),_v(" "),_c('li',[_v("Log messages are output through the console and to a "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v(".log")]),_v(" file.")]),_v(" "),_c('li',[_v("The output logging level can be controlled using the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("logLevel")]),_v(" setting in the configuration file (See the "),_c('a',{attrs:{"href":"/tp/Configuration.html"}},[_v("Configuration guide")]),_v(" section).")]),_v(" "),_c('li',[_c('strong',[_v("When choosing a level for a log message")]),_v(", follow the conventions given in "),_c('a',{attrs:{"href":"https://se-education.org/guides/conventions/java/logging.html"}},[_c('em',[_v("[se-edu/guides] Java: Logging conventions")])]),_v(".")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/SettingUp.html b/SettingUp.html index 57384b6c3c7..d312f1dd1de 100644 --- a/SettingUp.html +++ b/SettingUp.html @@ -22,7 +22,7 @@
  • Verify the setup:
    1. Run the seedu.address.Main and try a few commands.
    2. Run the tests to ensure they all pass.

  • Before writing code

    1. Configure the coding style

      If using IDEA, follow the guide [se-edu/guides] IDEA: Configuring the code style to set up IDEA's coding style to match ours.

      Tip: Optionally, you can follow the guide [se-edu/guides] Using Checkstyle to find how to use the CheckStyle within IDEA e.g., to report problems as you write code.

    2. Set up CI

      This project comes with a GitHub Actions config files (in .github/workflows folder). When GitHub detects those files, it will run the CI for your project automatically at each push to the master branch or to any PR. No set up required.

    3. Learn the design

      When you are ready to start coding, we recommend that you get some sense of the overall design by reading about SocialBook architecture.

    4. Do the tutorials -These tutorials will help you get acquainted with the codebase.

    +These tutorials will help you get acquainted with the codebase.

    diff --git a/SettingUp.page-vue-render.js b/SettingUp.page-vue-render.js index 748ef907b2b..5ca4385b5f9 100644 --- a/SettingUp.page-vue-render.js +++ b/SettingUp.page-vue-render.js @@ -41,6 +41,6 @@ with(this){return _c('li',[_c('p',[_c('strong',[_v("Learn the design")])]),_v(" with(this){return _c('li',[_c('p',[_c('strong',[_v("Do the tutorials")]),_v("\nThese tutorials will help you get acquainted with the codebase.")]),_v(" "),_c('ul',[_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/TracingCode.html"}},[_v("Tracing code")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/AddRemark.html"}},[_v("Adding a new command")])]),_v(" "),_c('li',[_c('a',{attrs:{"href":"/tp/tutorials/RemovingFields.html"}},[_v("Removing fields")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/Testing.html b/Testing.html index 0a18702ec32..3ef209b2486 100644 --- a/Testing.html +++ b/Testing.html @@ -20,7 +20,7 @@ test class, or a test and choose Run 'ABC'
  • Method 2: Using Gradle
  • Link: Read this Gradle Tutorial from the se-edu/guides to learn more about using Gradle.


    Types of tests

    This project has three types of tests:

    1. Unit tests targeting the lowest level methods/classes.
      e.g. seedu.address.commons.StringUtilTest
    2. Integration tests that are checking the integration of multiple code units (those code units are assumed to be working).
      e.g. seedu.address.storage.StorageManagerTest
    3. Hybrids of unit and integration tests. These test are checking multiple code units as well as how the are connected together.
      -e.g. seedu.address.logic.LogicManagerTest
    +e.g. seedu.address.logic.LogicManagerTest diff --git a/Testing.page-vue-render.js b/Testing.page-vue-render.js index 50004a86ca9..dddf5c9838b 100644 --- a/Testing.page-vue-render.js +++ b/Testing.page-vue-render.js @@ -20,6 +20,6 @@ with(this){return _c('h2',{attrs:{"id":"types-of-tests"}},[_v("Types of tests"), with(this){return _c('ol',[_c('li',[_c('em',[_v("Unit tests")]),_v(" targeting the lowest level methods/classes."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.commons.StringUtilTest")])]),_v(" "),_c('li',[_c('em',[_v("Integration tests")]),_v(" that are checking the integration of multiple code units (those code units are assumed to be working)."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.storage.StorageManagerTest")])]),_v(" "),_c('li',[_v("Hybrids of unit and integration tests. These test are checking multiple code units as well as how the are connected together."),_c('br'),_v("\ne.g. "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seedu.address.logic.LogicManagerTest")])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/UserGuide.html b/UserGuide.html index f1cde3f814e..fcb65d47a13 100644 --- a/UserGuide.html +++ b/UserGuide.html @@ -30,7 +30,7 @@ e.g. find Hans or find wall street or find will fail

    Examples:

    Deleting a person : delete

    Deletes the specified person or persons from the address book.

    Format: delete INDEX delete INDEX INDEX ...

    Examples:

    Clearing all entries : clear

    Clears all entries from the address book.

    Format: clear

    Populating with dummy data : seed

    Adds dummy data to the address book.

    Format: seed

    Exiting the program : exit

    Exits the program.

    Format: exit

    Saving the data

    SocialBook data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.

    Editing the data file

    SocialBook data are saved automatically as a JSON file [JAR file location]/data/socialbook.json. Advanced users are welcome to update data directly by editing that data file.

    Caution: If a person's data values are changed to an invalid format, Socialbook will discard that particular person's data while keeping the rest. However, if your changes to the data file makes the file format invalid, SocialBook will discard all data and start with an empty data file at the next run. Hence, it is recommended to take a backup of the file before editing it.
    -Furthermore, certain edits can cause the SocialBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.

    Archiving data files [coming in v2.0]

    Details coming soon ...


    FAQ

    Q: How do I transfer my data to another Computer?
    A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous SocialBook home folder.


    Known issues

    1. When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
    2. If you minimize the Help Window and then run the help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.

    Command summary

    Action Format, Examples
    Add add n/NAME p/PHONE_NUMBER [e/EMAIL] [a/ADDRESS] [t/TAG]…​ d/DATE_OF_LAST_VISIT
    e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague d/07-23-2024
    Clear clear
    Delete delete INDEX
    e.g., delete 3
    Edit edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​ [d/DATE_OF_LAST_VISIT]
    e.g.,edit 2 n/James Lee e/jameslee@example.com
    Find find [n/NAMEKEYWORD] [p/PHONEKEYWORD] [a/ADDRESSKEYWORD]
    e.g., find n/James Jake a/clementi street_woodlands
    List list
    Help help
    Seed seed
    +Furthermore, certain edits can cause the SocialBook to behave in unexpected ways (e.g., if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.

    Archiving data files [coming in v2.0]

    Details coming soon ...


    FAQ

    Q: How do I transfer my data to another Computer?
    A: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous SocialBook home folder.


    Known issues

    1. When using multiple screens, if you move the application to a secondary screen, and later switch to using only the primary screen, the GUI will open off-screen. The remedy is to delete the preferences.json file created by the application before running the application again.
    2. If you minimize the Help Window and then run the help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.

    Command summary

    Action Format, Examples
    Add add n/NAME p/PHONE_NUMBER [e/EMAIL] [a/ADDRESS] [t/TAG]…​ d/DATE_OF_LAST_VISIT
    e.g., add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague d/07-23-2024
    Clear clear
    Delete delete INDEX
    e.g., delete 3
    Edit edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​ [d/DATE_OF_LAST_VISIT]
    e.g.,edit 2 n/James Lee e/jameslee@example.com
    Find find [n/NAMEKEYWORD] [p/PHONEKEYWORD] [a/ADDRESSKEYWORD]
    e.g., find n/James Jake a/clementi street_woodlands
    List list
    Help help
    Seed seed
    diff --git a/UserGuide.page-vue-render.js b/UserGuide.page-vue-render.js index de3dcf9f079..bb4a8db6365 100644 --- a/UserGuide.page-vue-render.js +++ b/UserGuide.page-vue-render.js @@ -134,6 +134,6 @@ with(this){return _c('h2',{attrs:{"id":"command-summary"}},[_v("Command summary" with(this){return _c('div',{staticClass:"table-responsive"},[_c('table',{staticClass:"markbind-table table table-bordered table-striped"},[_c('thead',[_c('tr',[_c('th',[_v("Action")]),_v(" "),_c('th',[_v("Format, Examples")])])]),_v(" "),_c('tbody',[_c('tr',[_c('td',[_c('strong',[_v("Add")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/NAME p/PHONE_NUMBER [e/EMAIL] [a/ADDRESS] [t/TAG]…​ d/DATE_OF_LAST_VISIT")]),_v(" "),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 t/friend t/colleague d/07-23-2024")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Clear")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Delete")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete INDEX")]),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete 3")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Edit")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [t/TAG]…​ [d/DATE_OF_LAST_VISIT]")]),_c('br'),_v(" e.g.,"),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("edit 2 n/James Lee e/jameslee@example.com")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Find")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find [n/NAMEKEYWORD] [p/PHONEKEYWORD] [a/ADDRESSKEYWORD]")]),_c('br'),_v(" e.g., "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find n/James Jake a/clementi street_woodlands")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("List")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("list")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Help")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("help")])])]),_v(" "),_c('tr',[_c('td',[_c('strong',[_v("Seed")])]),_v(" "),_c('td',[_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("seed")])])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/diagrams/BetterModelClassDiagram.png b/diagrams/BetterModelClassDiagram.png index 6b4dba2de4378e69ce889902742b38b05bcc4e53..212ddbd3591b3bac1788c397a74c6eb483ac068e 100644 GIT binary patch literal 16302 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 literal 13418 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 XGjrl-wD7^-5Fseasy;83HVOVeDQ`nV diff --git a/diagrams/BetterModelClassDiagram.puml b/diagrams/BetterModelClassDiagram.puml index 598474a5c82..f5811f01bac 100644 --- a/diagrams/BetterModelClassDiagram.puml +++ b/diagrams/BetterModelClassDiagram.puml @@ -18,4 +18,5 @@ Person *--> Name Person *--> Phone Person *--> Email Person *--> Address +Person *--> EmergencyContact @enduml diff --git a/diagrams/ModelClassDiagram.png b/diagrams/ModelClassDiagram.png index 70fc3d654a10d863e6fca08ce5c45cb34786fb3b..ee2e254825727823189703a0fdd37cc04c4719c0 100644 GIT binary patch literal 30507 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 Jm%lgg`yYgDVm<%> literal 26947 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 Phone Person *--> Email Person *--> Address Person *--> "*" Tag +Person *--> EmergencyContact Person -[hidden]up--> I UniquePersonList -[hidden]right-> I diff --git a/index.html b/index.html index 5936fe20045..86b53f3e2ca 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ Search

    SocialBook

    CI Status codecov

    Ui

    SocialBook is a desktop application for managing your contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).

    Acknowledgements

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
  • SocialBook

    CI Status codecov

    Ui

    SocialBook is a desktop application for managing your contact details. While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).

    Acknowledgements

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/index.page-vue-render.js b/index.page-vue-render.js index 23e0db872d1..0cdf3f37cab 100644 --- a/index.page-vue-render.js +++ b/index.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h1',{attrs:{"id":"socialbook"}},[_v("SocialBook"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#socialbook","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_c('a',{attrs:{"href":"https://github.com/AY2425S1-CS2103-F10-2/tp/actions"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://github.com/AY2425S1-CS2103-F10-2/tp/workflows/Java%20CI/badge.svg","alt":"CI Status"}})]),_v(" "),_c('a',{attrs:{"href":"https://codecov.io/gh/AY2425S1-CS2103-F10-2/tp"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"https://codecov.io/gh/AY2425S1-CS2103-F10-2/tp/branch/master/graph/badge.svg","alt":"codecov"}})])]),_v(" "),_c('p',[_c('a',{attrs:{"href":"/tp/images/Ui.png","target":"_self"}},[_c('img',{staticClass:"img-fluid",attrs:{"src":"/tp/images/Ui.png","alt":"Ui"}})])]),_v(" "),_c('p',[_c('strong',[_v("SocialBook is a desktop application for managing your contact details.")]),_v(" While it has a GUI, most of the user interactions happen using a CLI (Command Line Interface).")]),_v(" "),_c('ul',[_c('li',[_v("If you are interested in using SocialBook, head over to the "),_c('a',{attrs:{"href":"/tp/UserGuide.html#quick-start"}},[_c('em',[_v("Quick Start")]),_v(" section of the "),_c('strong',[_v("User Guide")])]),_v(".")]),_v(" "),_c('li',[_v("If you are interested about developing SocialBook, the "),_c('a',{attrs:{"href":"/tp/DeveloperGuide.html"}},[_c('strong',[_v("Developer Guide")])]),_v(" is a good place to start.")])]),_v(" "),_c('p',[_c('strong',[_v("Acknowledgements")])]),_v(" "),_c('ul',[_c('li',[_v("Libraries used: "),_c('a',{attrs:{"href":"https://openjfx.io/"}},[_v("JavaFX")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/FasterXML/jackson"}},[_v("Jackson")]),_v(", "),_c('a',{attrs:{"href":"https://github.com/junit-team/junit5"}},[_v("JUnit5")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/abdulrahmanalrammah.html b/team/abdulrahmanalrammah.html index 0037efc88d7..e998f5c101b 100644 --- a/team/abdulrahmanalrammah.html +++ b/team/abdulrahmanalrammah.html @@ -18,7 +18,7 @@
  • Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide:
        • Added documentation for the features delete and find #72
        • Did cosmetic tweaks to existing documentation of features clear, exit: #74
      • Developer Guide: -
        • Added implementation details of the delete feature.
    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
      • Contributed to forum discussions (examples: 1, 2, 3, 4)
      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
      • Some parts of the history feature I added was adopted by several other class mates (1, 2)
    • Tools:

      • Integrated a third party library (Natty) to the project (#42)
      • Integrated a new Github plugin (CircleCI) to the team repo
    • {you can add/remove categories in the list above}

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
    • Added implementation details of the delete feature.
  • Community:

    • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
    • Contributed to forum discussions (examples: 1, 2, 3, 4)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
    • Some parts of the history feature I added was adopted by several other class mates (1, 2)
  • Tools:

    • Integrated a third party library (Natty) to the project (#42)
    • Integrated a new Github plugin (CircleCI) to the team repo
  • {you can add/remove categories in the list above}

  • [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/team/abdulrahmanalrammah.page-vue-render.js b/team/abdulrahmanalrammah.page-vue-render.js index ef6b8e71587..c768c31fd77 100644 --- a/team/abdulrahmanalrammah.page-vue-render.js +++ b/team/abdulrahmanalrammah.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/andrew22teoh.html b/team/andrew22teoh.html index 03fed7b47d1..f4882b161db 100644 --- a/team/andrew22teoh.html +++ b/team/andrew22teoh.html @@ -18,7 +18,7 @@
  • Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide:
        • Added documentation for the features delete and find #72
        • Did cosmetic tweaks to existing documentation of features clear, exit: #74
      • Developer Guide: -
        • Added implementation details of the delete feature.
    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
      • Contributed to forum discussions (examples: 1, 2, 3, 4)
      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
      • Some parts of the history feature I added was adopted by several other class mates (1, 2)
    • Tools:

      • Integrated a third party library (Natty) to the project (#42)
      • Integrated a new Github plugin (CircleCI) to the team repo
    • {you can add/remove categories in the list above}

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
    • Added implementation details of the delete feature.
  • Community:

    • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
    • Contributed to forum discussions (examples: 1, 2, 3, 4)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
    • Some parts of the history feature I added was adopted by several other class mates (1, 2)
  • Tools:

    • Integrated a third party library (Natty) to the project (#42)
    • Integrated a new Github plugin (CircleCI) to the team repo
  • {you can add/remove categories in the list above}

  • [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/team/andrew22teoh.page-vue-render.js b/team/andrew22teoh.page-vue-render.js index ef6b8e71587..c768c31fd77 100644 --- a/team/andrew22teoh.page-vue-render.js +++ b/team/andrew22teoh.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/johndoe.html b/team/johndoe.html index 4a0a107aa3c..e9d6ad53012 100644 --- a/team/johndoe.html +++ b/team/johndoe.html @@ -18,7 +18,7 @@
  • Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    • New Feature: Added the ability to undo/redo previous commands.

      • What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.
      • Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.
      • Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.
      • Credits: {mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}
    • New Feature: Added a history command that allows the user to navigate to previous commands using up/down keys.

    • Code contributed: RepoSense link

    • Project management:

      • Managed releases v1.3 - v1.5rc (3 releases) on GitHub
    • Enhancements to existing features:

      • Updated the GUI color scheme (Pull requests #33, #34)
      • Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests #36, #38)
    • Documentation:

      • User Guide:
        • Added documentation for the features delete and find #72
        • Did cosmetic tweaks to existing documentation of features clear, exit: #74
      • Developer Guide: -
        • Added implementation details of the delete feature.
    • Community:

      • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
      • Contributed to forum discussions (examples: 1, 2, 3, 4)
      • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
      • Some parts of the history feature I added was adopted by several other class mates (1, 2)
    • Tools:

      • Integrated a third party library (Natty) to the project (#42)
      • Integrated a new Github plugin (CircleCI) to the team repo
    • {you can add/remove categories in the list above}

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
    • Added implementation details of the delete feature.
  • Community:

    • PRs reviewed (with non-trivial review comments): #12, #32, #19, #42
    • Contributed to forum discussions (examples: 1, 2, 3, 4)
    • Reported bugs and suggestions for other teams in the class (examples: 1, 2, 3)
    • Some parts of the history feature I added was adopted by several other class mates (1, 2)
  • Tools:

    • Integrated a third party library (Natty) to the project (#42)
    • Integrated a new Github plugin (CircleCI) to the team repo
  • {you can add/remove categories in the list above}

  • [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/team/johndoe.page-vue-render.js b/team/johndoe.page-vue-render.js index ef6b8e71587..c768c31fd77 100644 --- a/team/johndoe.page-vue-render.js +++ b/team/johndoe.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added the ability to undo/redo previous commands.")]),_v(" "),_c('ul',[_c('li',[_v("What it does: allows the user to undo all previous commands one at a time. Preceding undo commands can be reversed by using the redo command.")]),_v(" "),_c('li',[_v("Justification: This feature improves the product significantly because a user can make mistakes in commands and the app should provide a convenient way to rectify them.")]),_v(" "),_c('li',[_v("Highlights: This enhancement affects existing commands and commands to be added in future. It required an in-depth analysis of design alternatives. The implementation too was challenging as it required changes to existing commands.")]),_v(" "),_c('li',[_v("Credits: "),_c('em',[_v("{mention here if you reused any code/ideas from elsewhere or if a third-party library is heavily used in the feature so that a reader can make a more accurate judgement of how much effort went into the feature}")])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("New Feature")]),_v(": Added a history command that allows the user to navigate to previous commands using up/down keys.")])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("RepoSense link")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Project management")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Managed releases "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.3")]),_v(" - "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("v1.5rc")]),_v(" (3 releases) on GitHub")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Enhancements to existing features")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Updated the GUI color scheme (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#33")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#34")]),_v(")")]),_v(" "),_c('li',[_v("Wrote additional tests for existing features to increase coverage from 88% to 92% (Pull requests "),_c('a',{attrs:{"href":""}},[_v("#36")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#38")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Documentation")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("User Guide:\n"),_c('ul',[_c('li',[_v("Added documentation for the features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" and "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("find")]),_v(" "),_c('a',{attrs:{"href":""}},[_v("#72")])]),_v(" "),_c('li',[_v("Did cosmetic tweaks to existing documentation of features "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("clear")]),_v(", "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("exit")]),_v(": "),_c('a',{attrs:{"href":""}},[_v("#74")])])])]),_v(" "),_c('li',[_v("Developer Guide:\n"),_c('ul',[_c('li',[_v("Added implementation details of the "),_c('code',{pre:true,attrs:{"class":"hljs inline no-lang"}},[_v("delete")]),_v(" feature.")])])])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Community")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("PRs reviewed (with non-trivial review comments): "),_c('a',{attrs:{"href":""}},[_v("#12")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#32")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#19")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("#42")])]),_v(" "),_c('li',[_v("Contributed to forum discussions (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("4")]),_v(")")]),_v(" "),_c('li',[_v("Reported bugs and suggestions for other teams in the class (examples: "),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("3")]),_v(")")]),_v(" "),_c('li',[_v("Some parts of the history feature I added was adopted by several other class mates ("),_c('a',{attrs:{"href":""}},[_v("1")]),_v(", "),_c('a',{attrs:{"href":""}},[_v("2")]),_v(")")])])]),_v(" "),_c('li',[_c('p',[_c('strong',[_v("Tools")]),_v(":")]),_v(" "),_c('ul',[_c('li',[_v("Integrated a third party library (Natty) to the project ("),_c('a',{attrs:{"href":""}},[_v("#42")]),_v(")")]),_v(" "),_c('li',[_v("Integrated a new Github plugin (CircleCI) to the team repo")])])]),_v(" "),_c('li',[_c('p',[_c('em',[_v("{you can add/remove categories in the list above}")])])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/liauzhanyi.html b/team/liauzhanyi.html index 20116427ca9..ef9c5b483b1 100644 --- a/team/liauzhanyi.html +++ b/team/liauzhanyi.html @@ -16,7 +16,7 @@ Search

    Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
  • Project: AddressBook Level 3

    AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.

    Given below are my contributions to the project.

    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/team/liauzhanyi.page-vue-render.js b/team/liauzhanyi.page-vue-render.js index c2158cb49cd..947729001a3 100644 --- a/team/liauzhanyi.page-vue-render.js +++ b/team/liauzhanyi.page-vue-render.js @@ -8,6 +8,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" with(this){return _c('div',{attrs:{"id":"content-wrapper"}},[_c('h3',{attrs:{"id":"project-addressbook-level-3"}},[_v("Project: AddressBook Level 3"),_c('a',{staticClass:"fa fa-anchor",attrs:{"href":"#project-addressbook-level-3","onclick":"event.stopPropagation()"}})]),_v(" "),_c('p',[_v("AddressBook - Level 3 is a desktop address book application used for teaching Software Engineering principles. The user interacts with it using a CLI, and it has a GUI created with JavaFX. It is written in Java, and has about 10 kLoC.")]),_v(" "),_c('p',[_v("Given below are my contributions to the project.")]),_v(" "),_c('ul',[_c('li',[_c('strong',[_v("Code contributed")]),_v(": "),_c('a',{attrs:{"href":"https://nus-cs2103-ay2425s1.github.io/tp-dashboard/?search=&sort=groupTitle&sortWithin=title&timeframe=commit&mergegroup=&groupSelect=groupByRepos&breakdown=true&checkedFileTypes=docs~functional-code~test-code~other&since=2024-09-20"}},[_v("RepoSense link")])])])])} },function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file diff --git a/team/rayray39.html b/team/rayray39.html index 174883d6826..52537a04133 100644 --- a/team/rayray39.html +++ b/team/rayray39.html @@ -16,7 +16,7 @@ Search
    [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]
    +
  • [Powered by MarkBind 5.5.3, generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]
    diff --git a/team/rayray39.page-vue-render.js b/team/rayray39.page-vue-render.js index c350eb553f4..5da0620b3e8 100644 --- a/team/rayray39.page-vue-render.js +++ b/team/rayray39.page-vue-render.js @@ -5,6 +5,6 @@ with(this){return _c('div',{attrs:{"id":"app"}},[_c('header',{attrs:{"sticky":"" }; var pageVueStaticRenderFns = [function anonymous( ) { -with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 20:11:23 GMT+8]")])])])} +with(this){return _c('footer',[_c('div',{staticClass:"text-center"},[_c('small',[_v("["),_c('span',[_c('strong',[_v("Powered by")])]),_v(" "),_c('img',{attrs:{"src":"https://markbind.org/favicon.ico","width":"30"}}),_v(" "),_c('a',{attrs:{"href":"https://markbind.org/"}},[_v("MarkBind 5.5.3")]),_v(", generated on Tue, 22 Oct 2024, 22:10:28 GMT+8]")])])])} }]; \ No newline at end of file