├── js ├── BaseURL.js ├── reloadOnBack.js ├── main.js ├── login.js ├── regformdesign.js ├── profileActions.js ├── superuserslist.js ├── unverifed.js ├── listing.js ├── unverifiedProfile.js ├── updateform.js ├── superuserprofile.js ├── updateProfile.js ├── profile.js └── registrationform.js ├── .DS_Store ├── assets ├── .DS_Store ├── images │ ├── blob.png │ ├── logo.png │ ├── blob1.png │ ├── favicon.png │ └── navbar_logo.png └── readme │ ├── fork.png │ ├── clone.png │ ├── gPages_1.png │ ├── gPages_2.png │ ├── gPages_3.png │ └── pull request.png ├── .github ├── workflows │ ├── greetings.yml │ └── stale.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .vscode └── launch.json ├── css ├── login.css ├── profile.css ├── registrationform.css └── main.css ├── LICENSE ├── viewProfile.html ├── viewsuperuser.html ├── viewUnverified.html ├── README.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── login.html ├── superuserslist.html ├── viewProfile_testing.html ├── unverified.html ├── index.html ├── updateProfile.html └── register.html /js/BaseURL.js: -------------------------------------------------------------------------------- 1 | const baseurl = "https://skboard.herokuapp.com/" -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/.DS_Store -------------------------------------------------------------------------------- /assets/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/.DS_Store -------------------------------------------------------------------------------- /assets/images/blob.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/images/blob.png -------------------------------------------------------------------------------- /assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/images/logo.png -------------------------------------------------------------------------------- /assets/readme/fork.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/fork.png -------------------------------------------------------------------------------- /assets/images/blob1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/images/blob1.png -------------------------------------------------------------------------------- /assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/images/favicon.png -------------------------------------------------------------------------------- /assets/readme/clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/clone.png -------------------------------------------------------------------------------- /assets/readme/gPages_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/gPages_1.png -------------------------------------------------------------------------------- /assets/readme/gPages_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/gPages_2.png -------------------------------------------------------------------------------- /assets/readme/gPages_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/gPages_3.png -------------------------------------------------------------------------------- /assets/images/navbar_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/images/navbar_logo.png -------------------------------------------------------------------------------- /assets/readme/pull request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devscollab/skill-board/HEAD/assets/readme/pull request.png -------------------------------------------------------------------------------- /js/reloadOnBack.js: -------------------------------------------------------------------------------- 1 | window.addEventListener( "pageshow", function ( event ) { 2 | var historyTraversal = event.persisted || 3 | ( typeof window.performance != "undefined" && 4 | window.performance.navigation.type === 2 ); 5 | if ( historyTraversal ) { 6 | // Handle page restore. 7 | window.location.reload(); 8 | } 9 | }); -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | 3 | on: [pull_request_target, issues] 4 | 5 | jobs: 6 | greeting: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/first-interaction@v1 10 | with: 11 | repo-token: ${{ secrets.GITHUB_TOKEN }} 12 | issue-message: 'Hey there! I noticed that this is your first issue message. Well done, stay active 💯' 13 | pr-message: 'Woaaah! Your first pull request. Well done, can''t wait to see your further contributions 🎉' 14 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Mark stale issues and pull requests 2 | 3 | on: 4 | schedule: 5 | - cron: "30 1 * * *" 6 | 7 | jobs: 8 | stale: 9 | 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/stale@v1 14 | with: 15 | repo-token: ${{ secrets.GITHUB_TOKEN }} 16 | stale-issue-message: 'Stale issue message' 17 | stale-pr-message: 'Stale pull request message' 18 | stale-issue-label: 'no-issue-activity' 19 | stale-pr-label: 'no-pr-activity' 20 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "chrome", 9 | "request": "launch", 10 | "name": "Launch Chrome against localhost", 11 | "url": "http://localhost:8080", 12 | "webRoot": "${workspaceFolder}" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /css/login.css: -------------------------------------------------------------------------------- 1 | .loginField{ 2 | background-color: rgb(241, 241, 241); 3 | border: hidden; 4 | padding: 15px 25px; 5 | border-radius: 40px; 6 | width: 100%; 7 | -webkit-box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 8 | -moz-box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 9 | box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 10 | outline: none; 11 | } 12 | .loginSubmit{ 13 | color: white; 14 | background-color:#FF267C; 15 | border: none; 16 | padding: 12px 25px; 17 | padding-bottom: 8px; 18 | text-align: center; 19 | border-radius: 40px; 20 | -webkit-box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 21 | -moz-box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 22 | box-shadow: 1px 4px 5px 0px rgba(0,0,0,0.32); 23 | width: 50%; 24 | margin: 0 auto; 25 | outline: none; 26 | border: none; 27 | } -------------------------------------------------------------------------------- /css/profile.css: -------------------------------------------------------------------------------- 1 | .boldElem{ 2 | font-weight: 700; 3 | } 4 | 5 | .rightSideWrapper{ 6 | padding: 40px 20px; 7 | } 8 | 9 | .rightSideWrapper h5{ 10 | color: rgb(107, 107, 107); 11 | } 12 | 13 | .profileImg{ 14 | display: block; 15 | margin: 30px auto; 16 | max-width: 80%; 17 | max-height: 200px; 18 | } 19 | 20 | .centerElem{ 21 | text-align: center; 22 | } 23 | 24 | .socialsList{ 25 | font-size: calc(14px + (18 - 14) * ((100vw - 300px) / (1600 - 300))); 26 | margin: 0 auto; 27 | } 28 | 29 | .lef 30 | 31 | .leftSideWrapper{ 32 | padding: 0 40px; 33 | margin-bottom: 30px; 34 | } 35 | 36 | .skillsRight{ 37 | font-weight: 600; 38 | font-size: 1.3rem; 39 | } 40 | 41 | .skillCard{ 42 | width: 98%; 43 | background-color: rgb(239, 240, 240); 44 | padding: 20px; 45 | border-radius: 10px; 46 | margin-bottom: 20px; 47 | } 48 | 49 | .leftSide{ 50 | min-height: 100vh; 51 | background-color: rgb(255, 255, 200); 52 | } 53 | 54 | .bio{ 55 | margin-top: 30px; 56 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 DevsCollab OpenSource 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | // Main javascript file for entire website 2 | 3 | function expandSearch(){ 4 | closeOptions() 5 | var search = document.getElementById("collapsedSearch") 6 | search.style.display=("block") 7 | search.style.height = ("110px") 8 | search.style.opacity = ("1") 9 | } 10 | 11 | function closeSearch(){ 12 | var search = document.getElementById("collapsedSearch") 13 | search.style.display=("none") 14 | search.style.height = ("0") 15 | search.style.opacity = ("0") 16 | } 17 | 18 | function expandOptions(){ 19 | closeSearch() 20 | var options = document.getElementById("collapsedOptions") 21 | options.style.display=("flex") 22 | options.style.height = ("40px") 23 | options.style.opacity = ("1") 24 | } 25 | 26 | function closeOptions(){ 27 | var options = document.getElementById("collapsedOptions") 28 | options.style.display=("none") 29 | options.style.height = ("0") 30 | options.style.opacity = ("0") 31 | } 32 | 33 | function getCookie(name) { 34 | const value = `; ${document.cookie}`; 35 | const parts = value.split(`; ${name}=`); 36 | if (parts.length === 2){ 37 | var cookie = parts.pop().split(';').shift(); 38 | return cookie.substring(1, cookie.length-1) 39 | } 40 | } 41 | 42 | 43 | function logout(){ 44 | document.cookie = "access_token=NONE" 45 | window.location.href = "login.html" 46 | } -------------------------------------------------------------------------------- /viewProfile.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 |
22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /viewsuperuser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 |
22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /viewUnverified.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 |
22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /js/login.js: -------------------------------------------------------------------------------- 1 | // Function to post data 2 | 3 | async function postData(url , data) { 4 | const response = await fetch(url, { 5 | method: "POST", // *GET, POST, PUT, DELETE, etc. 6 | mode: "cors", // no-cors, *cors, same-origin 7 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 8 | //credentials: 'same-origin', // include, *same-origin, omit 9 | headers: { 10 | "Content-Type": "application/json", 11 | }, 12 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 13 | //body: body // body data type must match "Content-Type" header 14 | body: JSON.stringify(data), 15 | }); 16 | if(response.status == "200"){ 17 | swal("Good job!", "Login Succesful!!", "success").then(function(){window.location.href = "index.html";}); 18 | 19 | } else{ 20 | alert("Something went wrong. Try Again!") 21 | } 22 | return response.json(); // parses JSON response into native JavaScript objects 23 | } 24 | 25 | const registrationform = document.getElementById("loginform") 26 | 27 | 28 | // Handle form events such as onsubmit 29 | // Event listner 30 | registrationform.addEventListener('submit', async function(e) { 31 | e.preventDefault(); 32 | const use1r = new FormData(this); 33 | // Object To be posted 34 | var user = { 35 | "email" : this.email.value, 36 | "password" : this.pass.value, 37 | }; 38 | let url = "https://skboard.herokuapp.com/api/login/"; // URL for skboard api 39 | const res = await postData(url, user); // Post function 40 | console.log("Response =>" + JSON.stringify(res)); // Log the response 41 | var token = JSON.stringify(res.token) 42 | var role = JSON.stringify(res.role) 43 | document.cookie = "access_token=" + token 44 | document.cookie="role=" + role 45 | document.cookie = "currentUser=" + `"` + this.email.value + `"` 46 | }) 47 | -------------------------------------------------------------------------------- /js/regformdesign.js: -------------------------------------------------------------------------------- 1 | const previousBtn = document.getElementById('previousBtn'); 2 | const nextBtn = document.getElementById('nextBtn'); 3 | const content = document.getElementById('content'); 4 | const bullets = [...document.querySelectorAll('.bullet')]; 5 | const formfields = [...document.querySelectorAll('.part')]; 6 | 7 | const MAX_STEPS = 4; 8 | let currentStep = 1; 9 | 10 | 11 | 12 | nextBtn.addEventListener('click', () => { 13 | var currentFields = formfields[currentStep - 1].getElementsByTagName('input') 14 | var linkFields = formfields[currentStep - 1].getElementsByClassName('link'); 15 | 16 | console.log(linkFields); 17 | 18 | if (checkCurrentFields(currentFields)) { 19 | 20 | alert('Please enter all the required details below') 21 | } 22 | else if (checkLinkFields(linkFields)) { 23 | 24 | } 25 | else { 26 | bullets[currentStep - 1].classList.add('completed'); 27 | currentStep += 1; 28 | 29 | previousBtn.disabled = false; 30 | if (currentStep !== 1) { 31 | formfields[currentStep - 2].classList.add('hide'); 32 | } 33 | if (currentStep === MAX_STEPS) { 34 | nextBtn.disabled = true; 35 | } 36 | 37 | 38 | formfields[currentStep - 1].classList.remove('hide'); 39 | } 40 | }); 41 | 42 | 43 | previousBtn.addEventListener('click', () => { 44 | bullets[currentStep - 2].classList.remove('completed'); 45 | formfields[currentStep - 1].classList.add('hide'); 46 | currentStep -= 1; 47 | nextBtn.disabled = false; 48 | if (currentStep !== MAX_STEPS) { 49 | formfields[currentStep - 1].classList.remove('hide'); 50 | } 51 | if (currentStep === 1) { 52 | previousBtn.disabled = true; 53 | } 54 | }); 55 | 56 | previousBtn.disabled = true; 57 | checkCurrentFields = (currentFields) => { 58 | for (var i = 0; i < currentFields.length; i++) { 59 | if (currentFields[i].value == '' && currentFields[i].required) { 60 | return true; 61 | } 62 | } 63 | return false; 64 | } 65 | 66 | checkLinkFields = (linkFields) => { 67 | if (linkFields.length == 0) { 68 | return false; 69 | } 70 | for (var i = 0; i < linkFields.length; i++) { 71 | if (!(linkFields[i].value.startsWith('https://'))) { 72 | alert('Please Enter a Valid Link starting with https://') 73 | return true; 74 | } 75 | } 76 | return false; 77 | 78 | } 79 | 80 | -------------------------------------------------------------------------------- /js/profileActions.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | 10 | var accessToken = getCookie("access_token") 11 | 12 | function verifyProfile(user) { 13 | if(confirm("Are you sure you want to verify this user? They will be added to the listing page.")){ 14 | const url = "https://skboard.herokuapp.com/api/unverified/approve/"+user 15 | console.log(url) 16 | fetch(url, { 17 | method: "POST", 18 | body: null, 19 | headers: { 20 | "Authorization":"Bearer "+accessToken 21 | } 22 | }) 23 | .then(response => response.json()) 24 | .then(json => console.log(json)); 25 | alert("verified " +user); 26 | location.reload() 27 | } 28 | 29 | } 30 | 31 | function deleteProfile(user){ 32 | if(confirm("Are you sure you want to delete this account from SkillBoard? This action cannot be undone.")){ 33 | const url = "https://skboard.herokuapp.com/api/student/delete/" +user 34 | console.log(url) 35 | fetch(url, { 36 | method: "DELETE", 37 | body: null, 38 | headers: { 39 | "Authorization":"Bearer "+accessToken 40 | } 41 | }) 42 | .then(response => response.json()) 43 | .then(json => console.log(json)); 44 | alert("deleted " +user); 45 | window.location.href = "index.html" 46 | } 47 | } 48 | 49 | function deleteUnverified(user){ 50 | if(confirm("Are you sure you want to verify this user? They will be added to the listing page.")){ 51 | const url = "https://skboard.herokuapp.com/api/unverified/delete/" +user 52 | console.log(url) 53 | fetch(url, { 54 | method: "DELETE", 55 | body: null, 56 | headers: { 57 | "Authorization":"Bearer "+accessToken 58 | } 59 | }) 60 | .then(response => response.json()) 61 | .then(json => console.log(json)); 62 | alert("deleted " +user); 63 | location.reload() 64 | } 65 | } 66 | 67 | function promoteUser(user){ 68 | if(confirm("Are you sure you want to promote this user to SuperUser? Doing so will give the admin access to SkillBoard.")){ 69 | const url = "https://skboard.herokuapp.com/api/superuser/promote/" + user 70 | console.log(url) 71 | fetch(url, { 72 | method: "POST", 73 | body: null, 74 | headers : { 75 | "Authorization":"Bearer "+accessToken 76 | } 77 | }) 78 | .then(response => response.json()) 79 | .then(json => console.log(json)) 80 | alert("This user has been promoted to Super User") 81 | window.location.href = "index.html" 82 | } 83 | } 84 | 85 | 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Skill Board 2 | 3 | ![GitHub](https://img.shields.io/github/license/devscollab/skill-board) ![Maintenance](https://img.shields.io/maintenance/yes/2020) ![GitHub last commit](https://img.shields.io/github/last-commit/devscollab/skill-board) ![GitHub contributors](https://img.shields.io/github/contributors/devscollab/skill-board) 4 | 5 | ![Skill Board](assets/images/logo.png) 6 | 7 | Skill Board is a web application where the students can showcase their skills & experience and show the availability & interest in receiving new opportunities to work on new projects and internships. Faculties and recruiters can go through this skill board to view the projects of students with the required skills and can contact the students directly for discussing any particular opportunity. 8 | 9 | It is like a job listing page but for students from a particular college. 10 | 11 | This is an open source project and everyone is free to contribute. Right now we are building the frontend on this repo. You can find the API for this at https://github.com/devscollab/skill-board-api 12 | 13 | ## Table of Content 14 | 15 | [How to contribute](#how-to-contribute) 16 | 17 | [Connect with us](#connect-with-us) 18 | 19 | ## How to contribute 20 | 21 | There are some guildelines which everyone should follow while contributing to this opensource project. While working in large teams, it is necessary to follow these steps to avoid any conflicts in the code and continue a smooth flow of collaboration amongst the developers. 22 | 23 | [Check the Contribution Guidelines](./CONTRIBUTING.md) 24 | 25 | ### Best Practices to follow 26 | 27 | 1. Code organisation becomes easier if everyone in the team follows a certain naming pattern. 28 | For example, to make organisation easier, we should follow a simple and logical naming pattern for CSS Classes 29 | in the format : pagenameElementName 30 | Example : 31 | - The Top bar for this page (listings page) can be named .lisitingTopBar 32 | - The profile cards for this page (listings page) can be named .lisitingProfileCards
33 | This helps when the css files become 1000s of lines long by the end of the project. 34 | 35 | 2. While adding any element, make sure it is responsive and its contents fit on all screen sizes. 36 | Users of SkillBoard will use it from all kinds of deivces like Small Mobiles, Large Mobiles, Tablets, Desktops, 37 | and in different orientations like portrait and landscape. Always consider this. 38 | You can test your page on other screen sizes by pressing F12 in chrome browser, and 39 | selecting a mobile view from the list of available devices. 40 | 41 | 3. Read the comments in the code for more hints. 42 | 43 | ## Connect with us 44 | 45 | If you are facing any difficulties in managing or contributing to this project, please discuss it on the Discord Server in the #skill-board channel. 46 | 47 | If there is any issues in using the skill board, contact us via email at [devscollab@gmail.com](mailto:devscollab@gmail.com). 48 | 49 | For reporting bugs or requesting features, create a [new issue](https://github.com/devscollab/skill-board/issues/new/choose) in this repository with the proper template. 50 | 51 | Maintained by - [@tejasmorkar](https://github.com/tejasmorkar) and [@suyashsonawane](https://github.com/suyashsonawane) 52 | 53 | ## This project is under a development halt as of now due to lack of contributors. If you wish to contribute here, please contact before doing so. Thank you! 54 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at devscollab@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /js/superuserslist.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | 10 | console.log(document.cookie) 11 | async function getData() { 12 | var accessToken = getCookie("access_token") 13 | let request = await fetch("https://skboard.herokuapp.com/api/superuser/all", { 14 | method: "GET", // *GET, POST, PUT, DELETE, etc. 15 | mode: "cors", // no-cors, *cors, same-origin 16 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 17 | headers: { 18 | "Authorization":"Bearer "+accessToken 19 | }, 20 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 21 | //body: body // body data type must match "Content-Type" header 22 | }) 23 | if(request.status == "200"){ 24 | console.log("Logged In") 25 | } else{ 26 | window.location.href = "login.html" 27 | } 28 | let data = request.json(); 29 | return data 30 | 31 | } 32 | 33 | $(document).ready(() => { 34 | var currentUser = getCookie("currentUser") 35 | var role = getCookie("role") 36 | if(role=="superuser"){ 37 | $('#dropDown').append(` 38 | 39 | 42 | 43 | 44 | 47 | 48 | `) 49 | } 50 | 51 | getData() 52 | .then(data => { 53 | data.docs.forEach(superuser => { 54 | // console.log(superuser.skills) 55 | $('#cards-container').append(` 56 |
57 |
58 |
59 | Profile 60 |
61 |
62 |
63 |

${superuser.personal.name}

64 | 65 | 66 | 67 | 68 |
69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 | 77 |
78 |
79 |
80 | 81 | 82 | 83 |
84 |
85 | 86 | 89 | 90 |
91 | 92 |
93 |
94 |
95 |
96 |
97 | `) 98 | }) 99 | }) 100 | }) -------------------------------------------------------------------------------- /js/unverifed.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | 10 | var accessToken = getCookie("access_token") 11 | var role = getCookie("role") 12 | 13 | async function getData() { 14 | var accessToken = getCookie("access_token") 15 | let request = await fetch("https://skboard.herokuapp.com/api/unverified/all",{ 16 | method: "GET", // *GET, POST, PUT, DELETE, etc. 17 | mode: "cors", // no-cors, *cors, same-origin 18 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 19 | headers: { 20 | "Authorization":"Bearer "+accessToken 21 | }, 22 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 23 | //body: body // body data type must match "Content-Type" header 24 | }) 25 | let data = request.json(); 26 | return data 27 | } 28 | 29 | $(document).ready(() => { 30 | getData() 31 | .then(data => { 32 | data.docs.forEach(student => { 33 | // console.log(student.skills) 34 | $('#cards-container').append(` 35 |
36 |
37 |
38 | Profile 39 |
40 |
41 |
42 |

${student.personal.name}

43 | 44 | 45 | 46 | 47 |
48 | ${student.personal.year}
49 | ${student.personal.department} 50 |
51 |
52 |
53 |
54 | TOP SKILLS 55 |

${student.skills.primaryskill}

56 | PROJECT LINK 57 |
58 |
59 | SECONDARY SKILL 60 |

${student.skills.secondaryskill}

61 | PROJECT LINK 62 |
63 |
64 |
65 | 66 | 67 | 68 |
69 |
70 | 71 | 74 | 75 | 78 |
79 | 82 |
83 |
84 |
85 |
86 | `) 87 | }) 88 | }) 89 | }) -------------------------------------------------------------------------------- /css/registrationform.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --border: #e4e5d6; 3 | --text: #80868b; 4 | --active: #1977d8; 5 | --text-size: 16px; 6 | --text-small: 13px; 7 | } 8 | 9 | #stepProgressBar { 10 | display: flex; 11 | justify-content: space-between; 12 | align-items: flex-end; 13 | width: 350px; 14 | margin: 0 auto; 15 | margin-bottom: 40px; 16 | } 17 | 18 | .step { 19 | text-align: center; 20 | } 21 | 22 | .step-text { 23 | margin-bottom: 10px; 24 | color: #28a745; 25 | font-size: small; 26 | } 27 | 28 | .bullet { 29 | border: 1px solid #28a745; 30 | height: 25px; 31 | width: 25px; 32 | border-radius: 50%; 33 | color: #28a745; 34 | display: inline-block; 35 | position: relative; 36 | transition: background-color 500ms; 37 | line-height: 20px; 38 | vertical-align: middle; 39 | } 40 | 41 | .bullet.completed { 42 | color: white; 43 | background-color: #28a745; 44 | } 45 | 46 | .bullet.completed::after { 47 | content: ""; 48 | position: absolute; 49 | right: -60px; 50 | bottom: 10px; 51 | height: 1px; 52 | width: 64px; 53 | background-color: #28a745; 54 | } 55 | 56 | /* Base styles and helper stuff */ 57 | .hidden { 58 | display: none; 59 | } 60 | 61 | button { 62 | padding: 5px 10px; 63 | border: 1px solid black; 64 | transition: 250ms background-color; 65 | } 66 | 67 | button:hover { 68 | cursor: pointer; 69 | color: purple; 70 | } 71 | 72 | button:disabled:hover { 73 | opacity: 0.6; 74 | cursor: not-allowed; 75 | } 76 | 77 | .text-center { 78 | text-align: center; 79 | } 80 | 81 | .container { 82 | max-width: 400px; 83 | margin: 0 auto; 84 | margin-top: 20px; 85 | padding: 40px; 86 | } 87 | 88 | .hide { 89 | display: none; 90 | } 91 | .current { 92 | display: block; 93 | } 94 | 95 | .regcard { 96 | background: rgb(179, 177, 177); 97 | border-radius: 20px; 98 | } 99 | 100 | .name-input-group { 101 | margin: 0 !important; 102 | padding:0 !important; 103 | } 104 | 105 | .name-input-group-prepend { 106 | left: 10px !important; 107 | padding: 0px !important; 108 | } 109 | 110 | .form-control1 { 111 | padding: 5px; 112 | height: 37px; 113 | border: none; 114 | border-bottom: 2px solid #e6e6e6; 115 | width: 100%; 116 | color: #666; 117 | } 118 | .form-control1 :focus { 119 | height: 37px; 120 | border: none; 121 | border-bottom: 2px solid #e6e6e6; 122 | width: 100%; 123 | color: #666; 124 | } 125 | 126 | input { 127 | -webkit-transition: width 0.35s ease-in-out; 128 | transition: width 0.35s ease-in-out; 129 | background: none; 130 | outline: none; 131 | border: 1px solid var(--border); 132 | border-radius: 4px; 133 | } 134 | .form-control1.input-up-blur { 135 | border: 2px solid #e6e6e6; 136 | } 137 | 138 | input:focus { 139 | border: 2px solid var(--active); 140 | } 141 | 142 | .floatingLabelContainer { 143 | position: relative; 144 | width: 100%; 145 | } 146 | 147 | .floatingLabel { 148 | padding: 0 3px; 149 | color: var(--text); 150 | font-size: var(--text-size); 151 | position: absolute; 152 | left: 1%; 153 | top: 50%; 154 | transform: translateY(-50%); 155 | transition: 0.2s, color 0s; 156 | cursor: text; 157 | } 158 | 159 | .label-up { 160 | background: rgb(248, 247, 255); 161 | font-size: var(--text-small); 162 | top: 0% !important; 163 | } 164 | .label-up-focus { 165 | color: var(--active); 166 | } 167 | .label-up-blur { 168 | color: var(--text); 169 | } 170 | 171 | .langlabel { 172 | padding-top: 15px; 173 | font-size: 30px; 174 | color: rgb(83, 0, 83); 175 | } 176 | .skillrow { 177 | padding-left: 15px; 178 | margin-top: 15px; 179 | } 180 | .label { 181 | margin-bottom: -35px; 182 | } 183 | #previousBtn { 184 | float: right; 185 | width: 100px; 186 | margin-right: 5%; 187 | } 188 | #nextBtn { 189 | float: left; 190 | width: 100px; 191 | margin-left: 5%; 192 | } 193 | .btnnxt { 194 | background: none; 195 | border: none; 196 | margin-top: 55px; 197 | font-size: 3rem; 198 | } 199 | 200 | .addfieldbutton { 201 | margin-top: 10px; 202 | border-radius: 10px; 203 | padding: 2px 10px; 204 | background-color: none; 205 | border: 2px solid rgb(182, 113, 214); 206 | vertical-align: middle; 207 | color: rgb(182, 113, 214); 208 | } 209 | .submitform { 210 | padding: 5px 3px; 211 | border: 2px solid rgb(182, 113, 214); 212 | background-color: rgb(182, 113, 214); 213 | color: white; 214 | border-radius: 20px; 215 | } 216 | .delete { 217 | color: red; 218 | } 219 | .addskillheader { 220 | color: rgb(53, 0, 53); 221 | font-weight: bold; 222 | margin-top: 10px; 223 | } 224 | @media only screen and (max-width: 600px) { 225 | #stepProgressBar { 226 | width: 300px; 227 | } 228 | .bullet.completed::after { 229 | width: 54px; 230 | margin-right: 8px; 231 | } 232 | .step-text { 233 | font-size: smaller; 234 | } 235 | } 236 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | There are some guildelines which everyone should follow while contributing to this opensource project. While working in large teams, it is necessary to follow these steps to avoid any conflicts in the code and continue a smooth flow of collaboration amongst the developers. 4 | 5 | ## Please follow these steps if you wish to contribute to the project: 6 | 7 | 1. Go through the Issues to see if, what you want is already in discussion. 8 | 9 | 2. Open a new Issue if you do not find what you need. Describe the bug, feature request, problems, additions you might want or anything clearly in the Issue message. 10 | 11 | 3. Mention in the Issue that you want to work on it. 12 | 13 | 4. Wait for the approval from the Maintainers of this project before starting to work on it. 14 | 15 | 5. Create a pull request after making the changes and mention the Issue number that your pull request is related to. 16 | 17 | 6. Make the required changes if the reviewer asks for them. 18 | 19 | 7. That's it! Your pull request will be merged once everything seems okay. 20 | 21 | **Watch this Video if you are new to GitHub - [YouTube Link](https://youtu.be/HbSjyU2vf6Y)** 22 | 23 | ## 1. Fork the Repository 24 | 25 | First step is to fork this repository (devscollab/skill-board) to your GitHub account. You can do this by clicking on the Fork button provided in the top right corner of the repo page. 26 | 27 | ![Fork](assets/readme/fork.png) 28 | 29 | Also, star and watch the repository to receive all the updates directly to your mail. 30 | 31 | **How to Fork a Repository? - [YouTube Link](https://youtu.be/HbSjyU2vf6Y?t=101)** 32 | 33 | ## 2. Clone the forked repo to your system 34 | 35 | Clone the repository that you just forked into your account. 36 | Be careful to clone the forked repo (your-username/skill-board) and not the main repo (devscollab/skill-board) as making direct changes to the main repo will result in conflict of code and lack of co-ordination as we proceed further. 37 | 38 | The forked repository will have your username in the top left corner and the clone link will also contain your username (https://github.com/your-username/skill-board.git). 39 | 40 | ![Clone](assets/readme/clone.png) 41 | 42 | **How to Clone a forked repo? - [YouTube Link](https://youtu.be/HbSjyU2vf6Y?t=134)** 43 | 44 | ## 3. Add the main repo as remote upstream 45 | 46 | Now, you have the repository on your system and you are ready to make changes. But what if someone else changes the same thing that you just did? 47 | 48 | To avoid any conflicts, you need to pull all the changes from the main repository. 49 | 50 | So, after cloning the forked repository (your-username/skill-board) to your system, use the command `git remote add upstream https://github.com/devscollab/skill-board.git` to point to the main repository. You only need to do this once. 51 | 52 | Now, after making any changes to your project on the system, follow these simple steps to push your work to the repository: 53 | 54 | `git add .` 55 | 56 | `git commit -m "Commit Message"` 57 | 58 | `git pull upstream master` *This command checks for any conflicts with the main repo. Go through the conflicts and make changes, if required.* 59 | 60 | `git push` 61 | 62 | **How to set up a Remote Repo - [YouTube Link](https://youtu.be/-zvHQXnBO6c)** 63 | 64 | ## 4. Set Up Github Pages on your Forked Repo 65 | #### Note : This is a required step. We cannot merge your pull request without reviewing your changes. 66 | Steps to setup Github Pages on your repo : 67 | 1. On your forked repo, go to the settings tab. 68 | ![Github Pages](assets/readme/gPages_1.png) 69 | 70 | 2. Find the Gituhb Pages section, select the following settings (branch : master, folder : /root), and hit 'Save' 71 | ![Github Pages](assets/readme/gPages_2.png) 72 | 73 | 3. Your site will now be published on a URL. 74 | ![Github Pages](assets/readme/gPages_3.png) 75 | 76 | 4. Copy the URL and paste it along with your Pull Request. This will allow us to review your changes. 77 | ## 5. Create a pull request 78 | 79 | After pushing the changes to your forked repository (your-username/skill-board), all you have to do is create a new pull request from your account by simply clicking on the *Pull Request* button. 80 | 81 | ![Pull Request](assets/readme/pull%20request.png) 82 | 83 | #### Required: Paste your Github Pages URL along with your pull request. You can also paste it in the comments. 84 | > NOTE: 85 | > If you are some commits behind of devscollab:master then you need to first git pull upstream master from the system, push it to your forked repository and then create the Pull Request. 86 | 87 | Give a detailed and useful explaination of what you did in the comments of pull requests and someone from the maintainers or team leads will review the code and accept the pull request or ask you to change some things before merging it. 88 | 89 | **How to Create a Pull Request? - [YouTube Link](https://youtu.be/HbSjyU2vf6Y?t=297)** 90 | -------------------------------------------------------------------------------- /js/listing.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | 10 | console.log(document.cookie) 11 | async function getData() { 12 | var accessToken = getCookie("access_token") 13 | let request = await fetch("https://skboard.herokuapp.com/api/student/all", { 14 | method: "GET", // *GET, POST, PUT, DELETE, etc. 15 | mode: "cors", // no-cors, *cors, same-origin 16 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 17 | headers: { 18 | "Authorization":"Bearer "+accessToken 19 | }, 20 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 21 | //body: body // body data type must match "Content-Type" header 22 | }) 23 | if(request.status == "200"){ 24 | console.log("Logged In") 25 | } else{ 26 | window.location.href = "login.html" 27 | } 28 | let data = request.json(); 29 | return data 30 | 31 | } 32 | 33 | $(document).ready(() => { 34 | var currentUser = getCookie("currentUser") 35 | var role = getCookie("role") 36 | if(role=="superuser"){ 37 | $('#dropDown').append(` 38 | 39 | 42 | 43 | 44 | 47 | 48 |
49 | `) 50 | } 51 | 52 | getData() 53 | .then(data => { 54 | data.docs.forEach(student => { 55 | // console.log(student.skills) 56 | $('#cards-container').append(` 57 |
58 |
59 |
60 | Profile 61 |
62 |
63 |
64 |

${student.personal.name}

65 | 66 | 67 | 68 | 69 |
70 | ${student.personal.year}
71 | ${student.personal.department} 72 |
73 |
74 |
75 |
76 | TOP SKILLS 77 |

${student.skills.primaryskill}

78 | PROJECT LINK 79 |
80 |
81 | SECONDARY SKILL 82 |

${student.skills.secondaryskill}

83 | PROJECT LINK 84 |
85 |
86 |
87 | 88 | 89 | 90 |
91 |
92 | 93 | 96 | 97 |
98 | 99 |
100 |
101 |
102 |
103 |
104 | `) 105 | }) 106 | }) 107 | }) -------------------------------------------------------------------------------- /login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 18 | 19 | 20 | 21 |
22 |
23 | SkillBoard 24 | 25 |
26 |
27 | 28 | 29 |
30 |
31 | Your Skill
32 | Goes Here 33 |
34 |
35 |
36 |
37 |
38 |
  Email Address
39 | 40 |
41 |
42 |
  Password
43 | 44 |
45 |
46 | 47 |
48 |
49 |
50 |
51 | Note for contributors!
52 | You can use these credentials to login :
53 | Email: testuser001@gmail.com
54 | Password: qwerty 55 |
56 |

57 | If you want access to a superuser account (admin account) to work on superuser features, contact adityamahajan#7832 or tejasmorkar#8302 on Discord for the credentials. 58 |
59 |
60 |
61 |
62 | 63 |
64 | 65 |
66 | 67 |
68 | 69 | 70 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /superuserslist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 |
19 | 20 | 21 | 22 | 23 |
24 | 63 | 76 | 83 |
84 | 85 |
86 | 87 |
88 | 89 | 90 |
91 | 92 |
93 | 94 |




95 | 96 |
97 | 98 |
99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /js/unverifiedProfile.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | 10 | var accessToken = getCookie("access_token") 11 | 12 | async function getData() { 13 | query = window.location.search 14 | user = query.substring(1) 15 | url = "https://skboard.herokuapp.com/api/unverified/" +user 16 | console.log(url) 17 | let request = await fetch(url,{ 18 | method: "GET", // *GET, POST, PUT, DELETE, etc. 19 | mode: "cors", // no-cors, *cors, same-origin 20 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 21 | headers: { 22 | "Authorization":"Bearer "+accessToken 23 | }, 24 | referrerPolicy: "no-referrer", 25 | }) 26 | let data = request.json(); 27 | return data 28 | } 29 | 30 | 31 | $(document).ready(() => { 32 | getData() 33 | .then(data =>{ 34 | user = data.docs 35 | console.log(user) 36 | $("#profile").append(` 37 |
38 |
39 |
40 |
41 | 42 |
43 |

${user.personal.name}

44 | 45 | 48 | 49 |
50 | 51 |
52 |
53 |
54 | College
55 | Department
56 | Year
57 | Division
58 | Roll No.
59 |
60 |
61 | ${user.personal.college}
62 | ${user.personal.department}
63 | ${user.personal.year}
64 | ${user.personal.division}
65 | ${user.personal.rollno} 66 |
67 |
68 |
69 | 70 | 71 | 72 |
73 |
74 |
75 | Email
76 | ${user.email} 77 |
78 | Phone
79 | ${user.social.phone} 80 |
81 | LinkedIn
82 | View Profile 83 |
84 | Github
85 | View Profile 86 |
87 |
88 |
89 | 90 |
91 |
Bio :
92 | ${user.optionals.introduction} 93 |
94 | 95 |
96 |
97 | 98 |
99 |
100 |
101 |
102 |
Primary Skill
103 | ${user.skills.primaryskill} 104 |
105 | 106 |
107 |
Secondary Skill
108 | ${user.skills.secondaryskill} 109 |
110 | 111 |
112 |
Other Skills
113 | ${user.skills.skill} 114 |
115 | 116 |
117 |
Project Links
118 | Link 119 |
120 | 121 |
122 |
CGPA
123 | ${user.skills.cgpa} 124 |
125 | 126 |
127 |
Languages
128 | ${user.optionals.languages_known} 129 |
130 |
131 |

Once verfieid, you can promote a user to super-user

132 |
133 |
134 |
135 |
136 |
137 | `) 138 | }) 139 | }) -------------------------------------------------------------------------------- /viewProfile_testing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 |
20 | 21 | 22 |
23 |
24 |
25 |
26 | 27 |
28 |

Amit Shah

29 | 32 |
33 | 34 |
35 |
36 |
37 | College
38 | Department
39 | Year
40 | Division
41 | Roll No.
42 |
43 |
44 | PCCOE
45 | Computer
46 | TE
47 | B
48 | TECOB215 49 |
50 |
51 |
52 | 53 | 54 | 55 |
56 |
57 |
58 | Email
59 | adityamahajan.tech@gmail.com 60 |
61 | Phone
62 | 9552531830 63 |
64 | LinkedIn
65 | View Profile 66 |
67 | Github
68 | View Profile 69 |
70 |
71 |
72 | 73 |
74 |
Bio :
75 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis laboriosam corrupti, aperiam sed nisi accusamus vel nobis illo harum ut nihil, voluptatum totam eaque modi accusantium dicta quia quisquam reprehenderit. 76 |
77 | 78 |
79 |
80 | 81 |
82 |
83 |
84 |
85 |
Primary Skill
86 | Machine Learning 87 |
88 | 89 |
90 |
Secondary Skill
91 | Web Developement 92 |
93 | 94 |
95 |
Other Skills
96 | Android
97 | Javascript
98 | Python
99 | NLP
100 |
101 | 102 |
103 |
CGPA
104 | 9.4 105 |
106 | 107 |
108 |
Languages
109 | English
110 | Hindi
111 | Marathi
112 |
113 | 114 |
115 |
116 |
117 |
118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /js/updateform.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | // Add Fields Testing 4 | $(document).ready(function() { 5 | var max_fields = 10; 6 | var wrapper = $(".languageform"); 7 | var add_button = $(".addlangbtn"); 8 | 9 | var counterlanguage = 1; 10 | $(add_button).click(function(e) { 11 | e.preventDefault(); 12 | if (counterlanguage< max_fields) { 13 | counterlanguage++; 14 | $(wrapper).append(`
Delete
`); //add input box 15 | } else { 16 | alert('You Reached the limits') 17 | } 18 | }); 19 | 20 | $(wrapper).on("click", ".delete", function(e) { 21 | e.preventDefault(); 22 | $(this).parent('div').remove(); 23 | counterlanguage--; 24 | }) 25 | }); 26 | 27 | 28 | $(document).ready(function() { 29 | var max_fields = 10; 30 | var wrapper = $(".skillform"); 31 | var add_button = $(".addskillbtn"); 32 | 33 | var counterskill = 1; 34 | $(add_button).click(function(e) { 35 | e.preventDefault(); 36 | if (counterskill< max_fields) { 37 | counterskill++; 38 | $(wrapper).append(`
39 |
40 |
41 | 42 | 43 |
44 |
45 | 46 | 47 |
48 |
49 | Delete 50 |
`); //add input box 51 | } else { 52 | alert('You Reached the limits') 53 | } 54 | }); 55 | 56 | $(wrapper).on("click", ".delete", function(e) { 57 | e.preventDefault(); 58 | $(this).parent('div').remove(); 59 | counterskill--; 60 | }) 61 | }); 62 | 63 | 64 | 65 | 66 | 67 | 68 | // Function to post data 69 | 70 | async function postData(url , data) { 71 | var cookie = document.cookie 72 | var token = cookie.split(";")[2] 73 | var accessToken = token.slice(15,token.length-1) 74 | 75 | const response = await fetch(url, { 76 | method: "PATCH", // *GET, POST, PUT, DELETE, etc. 77 | mode: "cors", // no-cors, *cors, same-origin 78 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 79 | //credentials: 'same-origin', // include, *same-origin, omit 80 | headers: { 81 | "Authorization":"Bearer "+accessToken 82 | }, 83 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 84 | //body: body // body data type must match "Content-Type" header 85 | body: JSON.stringify(data), 86 | }); 87 | return response.json(); // parses JSON response into native JavaScript objects 88 | } 89 | 90 | 91 | 92 | 93 | 94 | // Declare form object 95 | 96 | const registrationform = document.getElementById("registrationform") 97 | 98 | 99 | // Handle form events such as onsubmit 100 | // Event listner 101 | registrationform.addEventListener('submit', async function(e) { 102 | e.preventDefault(); 103 | 104 | // Get the skills and links to projects array 105 | skillarr = []; 106 | projectsforskills = [] 107 | var skill = document.getElementsByName('skills[]'); 108 | var link = document.getElementsByName('skilllinks[]'); 109 | for (var i = 0; i < skill.length; i++) { 110 | skillarr.push(skill[i].value) 111 | projectsforskills.push(link[i].value) 112 | } 113 | 114 | // Get the languages array 115 | languagearr = [] 116 | var languages = document.getElementsByName('languages[]'); 117 | for (var i = 0; i < languages.length; i++) { 118 | languagearr.push(languages[i].value) 119 | } 120 | 121 | var iswhatsapp = false; 122 | if (this.iswhatsapp.value === "on") { 123 | iswhatsapp = true; 124 | } 125 | 126 | 127 | const use1r = new FormData(this); 128 | // Object To be posted 129 | var user = { 130 | "personal" : { 131 | "name" : this.name.value, 132 | "college" : this.college.value, 133 | "department" : this.department.value, 134 | "year" : this.year.value, 135 | "division" : this.division.value, 136 | "rollno" : this.rollno.value, 137 | }, 138 | "social": { 139 | "phone": this.phone.value, 140 | "linkedin": this.linkden.value, 141 | "github":this.github.value, 142 | "personalwebsite": this.personalsite.value, 143 | "resume": this.resume.value, 144 | "iswhatsapp": iswhatsapp 145 | }, 146 | "skills":{ 147 | "skill" : skillarr, 148 | "projectsforskills" : projectsforskills, 149 | "primaryskill" : this.primaryskill.value, 150 | "secondaryskill" : this.secondaryskill.value, 151 | "cgpa": this.cgpa.value 152 | }, 153 | "rating":this.rating.value, 154 | "optionals": { 155 | "introduction": this.introduction.value, 156 | "gender": this.gender.value, 157 | "age" : this.age.value, 158 | "mother_tongue": this.mothertongue.value, 159 | "languages_known" : languagearr, 160 | "pronoun":this.pronoun.value 161 | }, 162 | "metaData":{ 163 | "hasAdminAccess": false 164 | } 165 | }; 166 | 167 | githublink = `https://api.github.com/users/${this.github.value.substr(this.github.value.lastIndexOf('/') + 1)}`; //Github api URL 168 | 169 | // Fetch api call to github 170 | fetch(githublink) 171 | .then(response=>response.json()) 172 | .then(response=>{ 173 | user["metaData"]["github_metadata_object"] = response; 174 | }) 175 | // If github account exist then push student to database 176 | .then(async (response) => { 177 | query = window.location.search 178 | userID = query.substring(1) 179 | console.log(userID) 180 | let url = "https://skboard.herokuapp.com/api/student/update/" +userID; 181 | const res = await postData(url, user); // Post function 182 | console.log("Response =>" + JSON.stringify(res)); // Log the response 183 | 184 | }) 185 | .catch(console.log("")) 186 | }) -------------------------------------------------------------------------------- /js/superuserprofile.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | var role = getCookie("role") 10 | var currentUser = getCookie("currentUser") 11 | 12 | async function getData() { 13 | var accessToken = getCookie("access_token") 14 | query = window.location.search 15 | user = query.substring(1) 16 | url = "https://skboard.herokuapp.com/api/superuser/" +user 17 | console.log(url) 18 | let request = await fetch(url, { 19 | method: "GET", // *GET, POST, PUT, DELETE, etc. 20 | mode: "cors", // no-cors, *cors, same-origin 21 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 22 | headers: { 23 | "Authorization":"Bearer "+accessToken 24 | }, 25 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 26 | //body: body // body data type must match "Content-Type" header 27 | }) 28 | let data = request.json(); 29 | return data 30 | } 31 | 32 | $(document).ready(() => { 33 | getData() 34 | .then(data =>{ 35 | user = data.docs[0] 36 | console.log(user) 37 | $("#profile").append(` 38 |
39 |
40 |
41 |
42 | 43 |
44 | 45 |
46 | 47 |

${user.personal.name}

48 | 49 | 50 | 53 | 54 |
55 |
56 |
57 |
58 | 59 | 62 | 63 |
64 | 65 |
66 |
67 |
68 |
69 | College
70 | Department
71 |
72 |
73 | ${user.personal.college}
74 | ${user.personal.department}
75 |
76 |
77 |
78 | 79 | 80 | 81 |
82 |
83 |
84 | Email
85 | ${user.email} 86 |
87 | Phone
88 | ${user.social.phone} 89 |
90 | LinkedIn
91 | View Profile 92 |
93 | Github
94 | View Profile 95 |
96 |
97 |
98 | 99 |
100 |
Bio :
101 | ${user.optionals.introduction} 102 |
103 |
104 |
105 | 106 |
107 |
108 |
109 |
110 | 111 | 144 |
145 | `) 146 | if(role=="student" && currentUser==user.email){ 147 | $("#deleteBtn").append(` 148 | 151 | `) 152 | $("#admin").append(`Manage Your Profile`) 153 | } else if (role == "superuser"){ 154 | $("#deleteBtn").append(` 155 | 158 | `) 159 | $("#admin").append(`You are a Super-User`) 160 | $("#promote").append(` 161 | 162 | `) 163 | } 164 | }) 165 | }) -------------------------------------------------------------------------------- /unverified.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 | 19 | 20 | 21 | 22 |
23 | 85 | 98 | 116 |
117 | 118 | 119 | 126 | 127 | 128 |
129 | 130 |
131 | 132 |





133 | 134 | 135 |
136 | 137 |
138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /js/updateProfile.js: -------------------------------------------------------------------------------- 1 | var cookie = document.cookie 2 | var token = cookie.split(";")[2] 3 | var accessToken = token.slice(15,token.length-1) 4 | 5 | async function getData() { 6 | query = window.location.search 7 | user = query.substring(1) 8 | url = "https://skboard.herokuapp.com/api/student/" +user 9 | console.log(url) 10 | let request = await fetch(url, { 11 | method: "GET", // *GET, POST, PUT, DELETE, etc. 12 | mode: "cors", // no-cors, *cors, same-origin 13 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 14 | headers: { 15 | "Authorization":"Bearer "+accessToken 16 | }, 17 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 18 | //body: body // body data type must match "Content-Type" header 19 | }) 20 | let data = request.json(); 21 | return data 22 | } 23 | 24 | $(document).ready(() => { 25 | getData() 26 | .then(data =>{ 27 | user = data.docs 28 | console.log(user) 29 | $("#name").val(user.personal.name) 30 | $("#college").val(user.personal.college) 31 | $("#department").val(user.personal.department) 32 | $("#year").val(user.personal.year) 33 | $("#div").val(user.personal.division) 34 | $("#rollno").val(user.personal.rollno) 35 | 36 | $("#intro").val(user.optionals.introduction) 37 | 38 | //Selected Gender 39 | const slectedGender = user.optionals.gender 40 | if(slectedGender == "Male") 41 | $("#male").attr("selected", true) 42 | else if(slectedGender == "Female") 43 | $("#female").attr("selected", true) 44 | else if(slectedGender == "Other") 45 | $("#other").attr("selected", true) 46 | 47 | $("#age").val(user.optionals.age) 48 | $("#mother_tng").val(user.optionals.mother_tongue) 49 | 50 | $("#primary").val(user.skills.primaryskill) 51 | $("#secondary").val(user.skills.secondaryskill) 52 | $("#cgpa").val(user.skills.cgpa) 53 | $("#rating").val(user.rating) 54 | 55 | $("#phone").val(user.social.phone) 56 | $("#linkedin").val(user.social.linkedin) 57 | $("#github").val(user.social.github) 58 | $("#personalsite").val(user.social.personalwebsite) 59 | $("#resume").val(user.social.resume) 60 | 61 | // Is whatsapp check 62 | if(user.social.iswhatsapp) { 63 | $("#whatsapp").prop( "checked", true ); 64 | } 65 | 66 | // Language Control 67 | var counterlanguage; 68 | var wrapper = $(".languageform"); 69 | 70 | for(i in user.optionals.languages_known ) { 71 | if (i==0){ 72 | $(wrapper).append(` 73 |
74 | 75 |
76 | ` 77 | ); 78 | } 79 | else{ 80 | $(wrapper).append(` 81 |
82 | 83 | Delete 84 |
85 | ` 86 | ); //add input box 87 | } 88 | counterlanguage = parseInt(i)+1; 89 | }; 90 | 91 | // Skill Control 92 | var wrapper = $(".skillform"); 93 | var counterskill; 94 | 95 | for(i in user.skills.skill ) { 96 | if(i==0){ 97 | $(wrapper).append(`
98 |
99 |
100 | 101 | 102 |
103 |
104 | 105 | 106 |
107 |
108 |
`); //add input box 109 | } 110 | else{ 111 | $(wrapper).append(`
112 |
113 |
114 | 115 | 116 |
117 |
118 | 119 | 120 |
121 |
122 | Delete 123 |
`); //add input box 124 | } 125 | counterskill = parseInt(i)+1; 126 | } 127 | 128 | 129 | }) 130 | }) 131 | 132 | // Add Floating Labels to UpdateProfile Form 133 | function floatingLabel(container) { 134 | let label = container.querySelector("label"), 135 | input = container.querySelector("input"); 136 | 137 | input.addEventListener("focus", function() { 138 | label.classList.add("label-up"); 139 | label.classList.remove("label-up-blur") 140 | input.classList.remove("input-up-blur") 141 | label.classList.add("label-up-focus") 142 | }); 143 | 144 | input.addEventListener("blur", function() { 145 | let length = input.value.length; 146 | 147 | if (length > 0) { // if there is text, hold the label up 148 | label.classList.remove("label-up-focus") 149 | label.classList.add("label-up-blur") 150 | input.classList.add("input-up-blur") 151 | } else { // if not, get to main position 152 | label.classList.remove("label-up") 153 | label.classList.remove("label-up-blur") 154 | label.classList.remove("label-up-focus") 155 | input.classList.remove("input-up-blur") 156 | } 157 | 158 | }) 159 | } 160 | let floatingLabelContainers = document.querySelectorAll(".floatingLabelContainer"); 161 | floatingLabelContainers.forEach(container => { 162 | floatingLabel(container) 163 | }) 164 | -------------------------------------------------------------------------------- /js/profile.js: -------------------------------------------------------------------------------- 1 | function getCookie(name) { 2 | const value = `; ${document.cookie}`; 3 | const parts = value.split(`; ${name}=`); 4 | if (parts.length === 2){ 5 | var cookie = parts.pop().split(';').shift(); 6 | return cookie.substring(1, cookie.length-1) 7 | } 8 | } 9 | var role = getCookie("role") 10 | var currentUser = getCookie("currentUser") 11 | 12 | async function getData() { 13 | var accessToken = getCookie("access_token") 14 | query = window.location.search 15 | user = query.substring(1) 16 | url = "https://skboard.herokuapp.com/api/student/" +user 17 | console.log(url) 18 | let request = await fetch(url, { 19 | method: "GET", // *GET, POST, PUT, DELETE, etc. 20 | mode: "cors", // no-cors, *cors, same-origin 21 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 22 | headers: { 23 | "Authorization":"Bearer "+accessToken 24 | }, 25 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 26 | //body: body // body data type must match "Content-Type" header 27 | }) 28 | let data = request.json(); 29 | return data 30 | } 31 | 32 | 33 | $(document).ready(() => { 34 | getData() 35 | .then(data =>{ 36 | user = data.docs 37 | console.log(user) 38 | $("#profile").append(` 39 |
40 |
41 |
42 |
43 | 44 |
45 | 46 |
47 | 48 |

${user.personal.name}

49 | 50 | 51 | 54 | 55 |
56 |
57 |
58 |
59 | 60 | 63 | 64 |
65 | 66 |
67 |
68 |
69 | College
70 | Department
71 | Year
72 | Division
73 | Roll No.
74 |
75 |
76 | ${user.personal.college}
77 | ${user.personal.department}
78 | ${user.personal.year}
79 | ${user.personal.division}
80 | ${user.personal.rollno} 81 |
82 |
83 |
84 | 85 | 86 | 87 |
88 |
89 |
90 | Email
91 | ${user.email} 92 |
93 | Phone
94 | ${user.social.phone} 95 |
96 | LinkedIn
97 | View Profile 98 |
99 | Github
100 | View Profile 101 |
102 |
103 |
104 | 105 |
106 |
Bio :
107 | ${user.optionals.introduction} 108 |
109 | 110 |
111 |
112 | 113 |
114 |
115 |
116 |
117 |
Primary Skill
118 | ${user.skills.primaryskill} 119 |
120 | 121 |
122 |
Secondary Skill
123 | ${user.skills.secondaryskill} 124 |
125 | 126 |
127 |
Other Skills
128 | ${user.skills.skill} 129 |
130 | 131 |
132 |
Project Links
133 | Link 134 |
135 | 136 |
137 |
CGPA
138 | ${user.skills.cgpa} 139 |
140 | 141 |
142 |
Languages
143 | ${user.optionals.languages_known} 144 |
145 |
146 | 147 |
148 |
149 |
150 |
151 |
152 | `) 153 | if(role=="student" && currentUser==user.email){ 154 | $("#deleteBtn").append(` 155 | 158 | `) 159 | $("#admin").append() 160 | } else if (role == "superuser"){ 161 | $("#deleteBtn").append(` 162 | 165 | `) 166 | $("#admin").append() 167 | $("#promote").append(` 168 | 169 | `) 170 | } 171 | }) 172 | }) -------------------------------------------------------------------------------- /js/registrationform.js: -------------------------------------------------------------------------------- 1 | // Add Floating Labels to Registration Form 2 | function floatingLabel(container) { 3 | let label = container.querySelector("label"), 4 | input = container.querySelector("input"); 5 | 6 | input.addEventListener("focus", function() { 7 | label.classList.add("label-up"); 8 | label.classList.remove("label-up-blur") 9 | input.classList.remove("input-up-blur") 10 | label.classList.add("label-up-focus") 11 | }); 12 | 13 | input.addEventListener("blur", function() { 14 | let length = input.value.length; 15 | 16 | if (length > 0) { // if there is text, hold the label up 17 | label.classList.remove("label-up-focus") 18 | label.classList.add("label-up-blur") 19 | input.classList.add("input-up-blur") 20 | } else { // if not, get to main position 21 | label.classList.remove("label-up") 22 | label.classList.remove("label-up-blur") 23 | label.classList.remove("label-up-focus") 24 | input.classList.remove("input-up-blur") 25 | } 26 | 27 | }) 28 | } 29 | let floatingLabelContainers = document.querySelectorAll(".floatingLabelContainer"); 30 | floatingLabelContainers.forEach(container => { 31 | floatingLabel(container) 32 | }) 33 | 34 | 35 | 36 | // Add Fields Testing 37 | $(document).ready(function () { 38 | var max_fields = 10; 39 | var wrapper = $(".languageform"); 40 | var add_button = $(".addlangbtn"); 41 | 42 | var counterlanguage = 1; 43 | $(add_button).click(function (e) { 44 | e.preventDefault(); 45 | if (counterlanguage < max_fields) { 46 | counterlanguage++; 47 | $(wrapper).append(`
Delete
`); //add input box 48 | } else { 49 | alert('You Reached the limits') 50 | } 51 | }); 52 | 53 | $(wrapper).on("click", ".delete", function (e) { 54 | e.preventDefault(); 55 | $(this).parent('div').remove(); 56 | counterlanguage--; 57 | }) 58 | }); 59 | 60 | 61 | $(document).ready(function () { 62 | var max_fields = 10; 63 | var wrapper = $(".skillform"); 64 | var add_button = $(".addskillbtn"); 65 | 66 | var counterskill = 1; 67 | $(add_button).click(function (e) { 68 | e.preventDefault(); 69 | if (counterskill < max_fields) { 70 | counterskill++; 71 | $(wrapper).append(`
72 |
73 |
74 | 75 | 76 |
77 |
78 | 79 | 80 |
81 |
82 | Delete 83 |
`); //add input box 84 | } else { 85 | alert('You Reached the limits') 86 | } 87 | }); 88 | 89 | $(wrapper).on("click", ".delete", function (e) { 90 | e.preventDefault(); 91 | $(this).parent('div').remove(); 92 | counterskill--; 93 | }) 94 | }); 95 | 96 | 97 | 98 | 99 | 100 | 101 | // Function to post data 102 | 103 | async function postData(url, data) { 104 | const response = await fetch(url, { 105 | method: "POST", // *GET, POST, PUT, DELETE, etc. 106 | mode: "cors", // no-cors, *cors, same-origin 107 | cache: "no-cache", // *default, no-cache, reload, force-cache, only-if-cached 108 | //credentials: 'same-origin', // include, *same-origin, omit 109 | headers: { 110 | "Content-Type": "application/json", 111 | }, 112 | referrerPolicy: "no-referrer", // no-referrer, *no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin, unsafe-url 113 | //body: body // body data type must match "Content-Type" header 114 | body: JSON.stringify(data), 115 | }); 116 | if (response.status == "200") { 117 | alert("Registered Succesfully! An Administrator will review and approve your profile shortly. Once approved, your account will be visible on the listing page. Meanwhile, you can login and view the existing accounts listing.") 118 | window.location.href = "login.html" 119 | } 120 | return response.json(); // parses JSON response into native JavaScript objects 121 | } 122 | 123 | 124 | 125 | 126 | 127 | // Declare form object 128 | 129 | const registrationform = document.getElementById("registrationform") 130 | 131 | 132 | // Handle form events such as onsubmit 133 | // Event listner 134 | registrationform.addEventListener('submit', async function (e) { 135 | e.preventDefault(); 136 | 137 | // Get the skills and links to projects array 138 | skillarr = []; 139 | projectsforskills = [] 140 | var skill = document.getElementsByName('skills[]'); 141 | var link = document.getElementsByName('skilllinks[]'); 142 | 143 | for (var i = 0; i < skill.length; i++) { 144 | skillarr.push(skill[i].value) 145 | projectsforskills.push(link[i].value) 146 | } 147 | 148 | // Get the languages array 149 | languagearr = [] 150 | var languages = document.getElementsByName('languages[]'); 151 | for (var i = 0; i < languages.length; i++) { 152 | languagearr.push(languages[i].value) 153 | } 154 | 155 | var iswhatsapp = false; 156 | if (this.iswhatsapp.value === "on") { 157 | iswhatsapp = true; 158 | } 159 | 160 | 161 | const use1r = new FormData(this); 162 | // Object To be posted 163 | var user = { 164 | "email": this.email.value, 165 | "password": this.pass.value, 166 | "personal": { 167 | "name": this.name.value, 168 | "college": this.college.value, 169 | "department": this.department.value, 170 | "year": this.year.value, 171 | "division": this.division.value, 172 | "rollno": this.rollno.value, 173 | }, 174 | "social": { 175 | "phone": this.phone.value, 176 | "linkedin": this.linkden.value, 177 | "github": this.github.value, 178 | "personalwebsite": this.personalsite.value, 179 | "resume": this.resume.value, 180 | "iswhatsapp": iswhatsapp 181 | }, 182 | "skills": { 183 | "skill": skillarr, 184 | "projectsforskills": projectsforskills, 185 | "primaryskill": this.primaryskill.value, 186 | "secondaryskill": this.secondaryskill.value, 187 | "cgpa": this.cgpa.value 188 | }, 189 | "rating": this.rating.value, 190 | "optionals": { 191 | "introduction": this.introduction.value, 192 | "gender": this.gender.value, 193 | "age": this.age.value, 194 | "mother_tongue": this.mothertongue.value, 195 | "languages_known": languagearr, 196 | "pronoun": this.pronoun.value 197 | }, 198 | "metaData": { 199 | "hasAdminAccess": false 200 | } 201 | }; 202 | 203 | githublink = `https://api.github.com/users/${this.github.value.substr(this.github.value.lastIndexOf('/') + 1)}`; //Github api URL 204 | 205 | // Fetch api call to github 206 | fetch(githublink) 207 | .then(response => response.json()) 208 | .then(response => { 209 | user["metaData"]["github_metadata_object"] = response; 210 | }) 211 | // If github account exist then push student to database 212 | .then(async (response) => { 213 | 214 | let url = "https://skboard.herokuapp.com/api/register"; // URL for skboard api 215 | 216 | const res = await postData(url, user); // Post function 217 | console.log("Response =>" + JSON.stringify(res)); // Log the response 218 | 219 | }) 220 | .catch(console.log("")) 221 | 222 | 223 | }) 224 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 13 | 14 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 |
30 | 113 | 139 | 166 |
167 | 168 |
177 | 178 | 179 |
180 | 181 |




182 | 183 |
184 | 185 |
186 | 187 | 188 | 189 | 208 | 209 | 210 | 211 | 216 | 221 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | /* Main CSS file for entire Website */ 2 | 3 | *, 4 | ::before, 5 | ::after { 6 | margin: 0; 7 | padding: 0; 8 | } 9 | 10 | body { 11 | overflow-x: hidden; 12 | width: 100vw; 13 | } 14 | 15 | .links { 16 | margin-top: 40vh; 17 | text-align: center; 18 | } 19 | 20 | .headerLine { 21 | position: sticky; 22 | top: 0; 23 | height: 10px; 24 | background-color: #ad00ff; 25 | z-index: 2; 26 | } 27 | 28 | #blob { 29 | position: fixed; 30 | bottom: 0; 31 | right: 0; 32 | width: 60%; 33 | min-width: 500px; 34 | z-index: -1; 35 | } 36 | 37 | 38 | /*----------------------------NAVIGATION BAR----------------------------*/ 39 | 40 | .sticky { 41 | position: sticky; 42 | top: 0; 43 | width: 100%; 44 | z-index: 1; 45 | } 46 | 47 | .listingTopBar { 48 | background-color: white; 49 | margin-left: auto; 50 | margin-right: auto; 51 | width: 100%; 52 | padding: 0 2vw; 53 | padding-top: 20px; 54 | } 55 | 56 | .navLogo { 57 | border-radius: 12px; 58 | width: 15vw; 59 | max-width: 120px; 60 | } 61 | 62 | .listingSearchForm { 63 | width: 100%; 64 | text-align: center; 65 | } 66 | 67 | .listingSearchForm { 68 | display: inline-block; 69 | } 70 | 71 | .listingSearch { 72 | background-color: rgb(241, 241, 241); 73 | border: hidden; 74 | padding: 15px 25px; 75 | border-radius: 40px; 76 | width: 40vw; 77 | -webkit-box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 78 | -moz-box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 79 | box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 80 | outline: none; 81 | } 82 | 83 | .listingSearchBtn { 84 | color: white; 85 | display: inline-block; 86 | background-color: #FF267C; 87 | border: none; 88 | padding: 12px 25px; 89 | padding-bottom: 8px; 90 | text-align: center; 91 | margin-left: 15px; 92 | border-radius: 10%; 93 | -webkit-box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 94 | -moz-box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 95 | box-shadow: 1px 4px 5px 0px rgba(0, 0, 0, 0.32); 96 | } 97 | 98 | .lTopBarLeft { 99 | margin-left: 0; 100 | } 101 | 102 | .nav-link { 103 | color: black; 104 | text-decoration: none; 105 | } 106 | 107 | #collapsedSearch { 108 | opacity: 0; 109 | height: 0px; 110 | width: 100%; 111 | transition: 0.5s; 112 | } 113 | 114 | .filterbtn button { 115 | display: inline-block; 116 | border: none; 117 | padding: 5 px; 118 | text-align: center; 119 | margin-left: 15px; 120 | border-radius: 10%; 121 | margin-top: 5px; 122 | } 123 | 124 | .filterbtn ul { 125 | text-align: center; 126 | } 127 | 128 | #collapsedOptions { 129 | padding-bottom: 50px; 130 | border-bottom: 1px solid black; 131 | display: flex; 132 | justify-content: space-evenly; 133 | height: 0px; 134 | opacity: 0; 135 | width: 100%; 136 | transition: 0.5s; 137 | } 138 | 139 | @media only screen and (max-width: 993px) { 140 | .hide { 141 | display: none; 142 | } 143 | .showOnCollapse { 144 | display: inline-block; 145 | margin-right: 5vw; 146 | } 147 | .listingSearch { 148 | width: 60vw; 149 | } 150 | .navLogo { 151 | border-radius: 5px; 152 | } 153 | } 154 | 155 | @media only screen and (min-width: 993px) { 156 | .showOnCollapse { 157 | display: none; 158 | } 159 | } 160 | 161 | 162 | /*--------------------------END NAVIGATION BAR--------------------------*/ 163 | 164 | 165 | /*-----------------------------LISTING PAGE------------------------------*/ 166 | .socialIcons{ 167 | color: black; 168 | } 169 | .profile-page { 170 | margin-right: 70px; 171 | margin-left: 20px; 172 | /* margin:0 auto; */ 173 | } 174 | 175 | #i-container { 176 | /* position: relative; */ 177 | /* display: inline block; */ 178 | text-align: center; 179 | margin: 0 auto; 180 | margin-right: -50%; 181 | background-color: #eeeeee; 182 | border: solid; 183 | border-color: black; 184 | /* padding-left: 3%; */ 185 | padding-right: 2%; 186 | padding-top: 0.5%; 187 | padding-bottom: 0.3%; 188 | /* height: 130px; */ 189 | margin-left: 25px; 190 | /* width: 2000px; */ 191 | margin-bottom: 15px; 192 | margin-top: 10px; 193 | opacity: 1; 194 | } 195 | 196 | .column-border { 197 | border-right-style: ridge; 198 | border-right-color: black; 199 | border-right-width: 2px; 200 | padding: 0; 201 | margin: 0; 202 | } 203 | 204 | .i-icon { 205 | width: 100%; 206 | height: auto; 207 | display: flex; 208 | justify-content: space-around; 209 | /* margin-top: 4%; */ 210 | margin: auto; 211 | } 212 | 213 | .checked { 214 | color: orange; 215 | } 216 | 217 | .mycontent-left { 218 | border-right: 1px dashed #333; 219 | } 220 | 221 | .i-img { 222 | height: 100px; 223 | width: 100px; 224 | } 225 | 226 | .round-border { 227 | border-radius: 15px; 228 | box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.40); 229 | } 230 | 231 | .card-button { 232 | background-color: #FF267C; 233 | border-radius: 3px; 234 | color: white; 235 | border-style: none; 236 | padding: 5px 15px; 237 | box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); 238 | } 239 | 240 | .cardTextCenter { 241 | text-align: left; 242 | margin-top: auto; 243 | margin-bottom: auto; 244 | } 245 | 246 | .student { 247 | font-size: small; 248 | } 249 | 250 | @media only screen and (max-width: 422px) { 251 | .mobile { 252 | height: 20px; 253 | width: 100%; 254 | } 255 | .card-button { 256 | margin-right: 10px; 257 | } 258 | #i-container { 259 | margin-left: auto; 260 | margin-right: auto; 261 | width: 90vw; 262 | } 263 | } 264 | 265 | .tsSkill { 266 | font-size: small; 267 | font-weight: bold; 268 | } 269 | 270 | .cardPadding { 271 | padding: 15px 0; 272 | } 273 | 274 | 275 | /*-----------------------------END LISITNG PAGE--------------------------*/ 276 | 277 | 278 | /*-----------------------------INDEX PAGE--------------------------------*/ 279 | 280 | .headerAlign { 281 | display: table; 282 | width: 100%; 283 | } 284 | 285 | .header { 286 | height: 80px; 287 | background: linear-gradient(90.1deg, #A645F1 19.69%, #C54AFF 78.49%), #C54AFF; 288 | display: table-cell; 289 | vertical-align: middle; 290 | } 291 | 292 | .skillBoard { 293 | font-family: Palanquin Dark; 294 | color: white; 295 | font-size: 20px; 296 | margin-left: 20px; 297 | } 298 | 299 | .login { 300 | color: white; 301 | padding: 5px 20px; 302 | float: right; 303 | } 304 | 305 | .signUp { 306 | font-weight: 700; 307 | color: #A645F1; 308 | border-radius: 5px; 309 | margin-right: 20px; 310 | background-color: white; 311 | padding: 5px 20px; 312 | border: none; 313 | outline: none; 314 | float: right; 315 | } 316 | 317 | .yourSkill { 318 | font-family: Palanquin Dark; 319 | font-weight: 600; 320 | font-size: 50px; 321 | } 322 | 323 | .goesHere { 324 | font-family: Palanquin Dark; 325 | font-style: normal; 326 | font-weight: 600; 327 | font-size: 24px; 328 | line-height: 10px; 329 | color: #DB8EFF; 330 | } 331 | 332 | .blankBox { 333 | border-radius: 20px; 334 | margin: 0 auto; 335 | margin-top: 30px; 336 | padding: 0 10px; 337 | padding-bottom: 30px; 338 | width: 95%; 339 | background-color: rgb(228, 228, 228); 340 | -webkit-box-shadow: 3px 6px 5px -1px rgba(0, 0, 0, 0.36); 341 | -moz-box-shadow: 3px 6px 5px -1px rgba(0, 0, 0, 0.36); 342 | box-shadow: 3px 6px 5px -1px rgba(0, 0, 0, 0.36); 343 | } 344 | 345 | .arrow { 346 | display: flex; 347 | justify-content: center; 348 | } 349 | 350 | .arrowIcon { 351 | position: absolute; 352 | bottom: 40px; 353 | transform: scale(4); 354 | color: white; 355 | } 356 | 357 | @media only screen and (min-width: 768px) { 358 | .blankBox { 359 | margin-top: 30px; 360 | max-width: 500px; 361 | } 362 | .yourSkillText { 363 | padding-top: 30px; 364 | padding-left: 50px; 365 | } 366 | .skillBoard { 367 | color: white; 368 | font-size: 30px; 369 | } 370 | } 371 | 372 | 373 | 374 | 375 | /*-----------------------------FOOTER--------------------------------*/ 376 | 377 | .footer{ 378 | background-color: #5f5f5f; 379 | color:#fff; 380 | position:relative; 381 | bottom: 0; 382 | width: 100vw; 383 | } 384 | 385 | .footer-content{ 386 | border-left: 0.3rem solid #fe267b; 387 | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 388 | } 389 | 390 | .footer-icon{ 391 | color:white; 392 | padding-top: 0.5rem; 393 | padding-right: 0.5rem; 394 | padding-left: 0.5rem; 395 | } 396 | 397 | .footerLogo{ 398 | border-radius: 12px; 399 | width: 15vw; 400 | max-width: 70px; 401 | } 402 | 403 | .h4 .footer-content{ 404 | margin-bottom: 0 !important; 405 | } 406 | 407 | @media only screen and (max-width:422px){ 408 | .footer-icon{ 409 | padding-right: 0.5rem; 410 | } 411 | 412 | .footer-content{ 413 | border-bottom: 0.3rem solid #fe267b; 414 | border-left: none; 415 | } 416 | 417 | } -------------------------------------------------------------------------------- /updateProfile.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Skill Board | PCCOE 7 | 8 | 9 | 10 | 14 | 18 | 19 | 20 | 21 |
22 |
23 | SkillBoard 24 |
25 |
26 | 27 |
28 | Update Your Profile 29 |
30 | 31 |
32 |
33 |
34 |

Personal

35 |
1
36 |
37 |
38 |

Optionals

39 |
2
40 |
41 |
42 |

Skills

43 |
3
44 |
45 |
46 |

Social

47 |
4
48 |
49 |
50 | 51 |
52 |
60 |
67 |
68 |
69 |
70 |
71 |
PERSONAL

72 | 73 |
74 |
75 | 76 |
77 |
78 |
@
79 |
80 |
81 |
82 | 89 | 92 |
93 |
94 |
95 |
96 | 97 |
98 | 99 |
100 | 107 | 110 |
111 |
112 | 113 |
114 | 115 |
116 | 123 | 126 |
127 |
128 | 129 |
130 | 131 |
132 | 139 | 142 |
143 |
144 | 145 |
146 | 147 |
148 | 155 | 158 |
159 |
160 | 161 |
162 | 163 |
164 | 171 | 174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 | 182 |
183 |
184 |
185 |
186 |
OPTIONALS

187 | 188 |
189 |
Introduce Yourself
190 |
191 | 197 |
198 | 199 |
200 | 201 | 212 |
213 | 214 |
215 | 216 | 221 |
222 | 223 |
224 | 225 |
226 | 233 | 236 |
237 |
238 | 239 |
240 | 241 | Languages known 242 |
243 | 245 |
246 | 251 |
252 | 253 |
254 | 255 |
256 | 261 | 264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 | 272 |
273 |
274 |
275 |
276 |
SKILL SECTION

277 | 278 |
279 |
280 | 281 |
282 | 289 | 292 |
293 |
294 | 295 |
296 | 297 |
298 | 304 | 307 |
308 |
309 | 310 |
311 |
Add your Skills here
312 |
313 | 314 | 319 |
320 | 321 |
322 | 323 | 333 |
334 | 335 |
336 | 337 | 348 |
349 |
350 |
351 |
352 |
353 |
354 | 355 |
356 |
357 |
358 |
359 |
SOCIAL

360 | 361 |
362 |
363 | 364 | 371 |
372 | 373 |
374 | 375 | 380 |
381 | 382 |
383 | 384 | 392 |
393 | 394 |
395 | 396 | 404 |
405 | 406 |
407 | 408 | 416 |
417 | 418 |
419 | 420 | 427 |
428 | 429 |
430 |
431 | 439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 | 448 |
449 |
450 | 453 |
454 |
455 | 458 |
459 |
460 |
461 |
462 |
463 | 464 |
465 | 466 |
467 | 468 | 469 | 470 | 475 | 476 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | -------------------------------------------------------------------------------- /register.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Skill Board | PCCOE 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 |
18 | SkillBoard 19 |
20 |
21 | 22 |
23 |
24 |
25 |

Personal

26 |
1
27 |
28 |
29 |

Optionals

30 |
2
31 |
32 |
33 |

Skills

34 |
3
35 |
36 |
37 |

Social

38 |
4
39 |
40 |
41 | 42 |
43 |
51 |
58 |
59 |
60 |
61 |
62 |
PERSONAL

63 | 64 |
65 |
66 | 67 |
70 |
71 |
@
72 |
73 |
76 |
77 | 84 | 87 |
88 |
89 |
90 |
91 | 92 |
93 | 94 |
95 | 102 | 103 |
104 |
105 | 106 |
107 | 108 |
109 | 116 | 119 |
120 |
121 | 122 |
123 | 124 |
125 | 132 | 135 |
136 |
137 | 138 |
139 | 140 |
141 | 148 | 151 |
152 |
153 | 154 |
155 | 156 |
157 | 164 | 165 |
166 |
167 | 168 |
169 | 170 |
171 | 178 | 181 |
182 |
183 | 184 |
185 | 186 |
187 | 194 | 197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 | 205 |
206 |
207 |
208 |
209 |
OPTIONALS

210 | 211 |
212 |
Introduce Yourself
213 |
214 | 219 |
220 | 221 |
222 | 223 | 228 |
229 | 230 |
231 | 232 | 237 |
238 | 239 |
240 | 241 |
242 | 249 | 250 |
251 |
252 | 253 |
254 | 255 | Languages known 256 |
257 |
258 | 265 |
266 | 268 |
269 | 274 |
275 | 276 |
277 | 278 |
279 | 284 | 285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 | 293 |
294 |
295 |
296 |
297 |
SKILL SECTION

298 | 299 |
300 |
301 | 302 |
303 | 310 | 311 |
312 |
313 | 314 |
315 | 316 |
317 | 323 | 324 |
325 |
326 | 327 |
328 |
Add your Skills here
329 |
330 |
331 |
332 | 333 | 340 |
341 |
342 | 343 | 350 |
351 |
352 |
353 | 354 | 359 |
360 | 361 |
362 | 363 | 365 |
366 | 367 |
368 | 369 | 371 |
372 | 373 |
374 |
375 |
376 | 377 |
378 |
379 | 380 | 381 |
382 |
383 | 384 |
385 | 386 |
387 | 388 |
SOCIAL

389 | 390 |
391 | 392 |
393 | 394 | 395 |
396 | 397 |
398 | 399 | 400 |
401 | 402 |
403 | 404 | 406 |
407 | 408 |
409 | 411 | 413 |
414 | 415 |
416 | 417 | 419 |
420 | 421 |
422 | 423 | 425 |
426 | 427 |
428 |
429 | 430 |
431 |
432 | 433 |
434 |
435 |
436 | 437 |
438 |
439 | 440 | 441 |
442 | 443 |
444 |
445 | 448 |
449 |
450 | 453 |
454 |
455 |
456 |
457 |
458 | 459 |
460 | 461 |
462 | 463 | 464 | 465 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | --------------------------------------------------------------------------------