From 603a2bbf73fba49710166fa003245383656eebbc Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 17:20:09 +0530 Subject: [PATCH 001/240] changes to readme and new contribution guide (#7) * remove updation of data * added contribution guide * added guide file --- CONTRIBUTING.md | 132 ++++++++++++++++++++++++++++++++++ README.md | 17 ++++- dashboard/patient/js/index.js | 2 +- 3 files changed, 148 insertions(+), 3 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e5cadcd --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,132 @@ +# Contributing to HealthConnect + +Thank you for your interest in contributing to HealthConnect! There are many ways to +contribute, and we appreciate all of them. You can jump to the major sections +of this document using the following links: + +* [Bug Reports and Feature Requests][issues] +* [Contributing code][contributing-code] +* [Pull Requests][pull requests] + +As a reminder, all contributors are expected to follow our +[Code of Conduct](CODE_OF_CONDUCT.md). + +## Bug reports and feature requests +[issues]: #bug-reports-and-feature-requests +Both bug reports and feature request, big or small, are welcome. + +Before submitting a feature request, please check if an [open issue][existing-feature-request] +already exists. If this is not the case, [submit a feature request][feature-request]. +Describe your use case, why you need this feature and why this feature is important for HealthConnect. + +Before filing a bug report, please check if an [open issue][existing-bug] +already exists. If this is not the case, [submit a new bug report][bug-report]. +If you're not sure if something is a bug or not, feel free to file a bug report anyway. + +**If you believe reporting your bug publicly represents a security risk to +HealthConnect users, please visit security policies of this repository**. +We would appreciate waiting for a 6 months grace period before reporting it on +public channels, to allow us adequate time to release the fix. + +[bug reports]: https://github.com/hippyaki/HealthConnect/issues/new?template=bug_report.md +[feature requests]: https://github.com/hippyaki/HealthConnect/issues/new?template=feature_request.md + +## Contributing code +[contributing-code]: #contributing-code +If you think your work should be integrated in the main HealthConnect repository, take +the following steps: + + 1. Fork the HealthConnect git repository (if you haven't done this already). + 1. Create a branch for your contribution. + 1. Make sure your code is in compliance with HealthConnect's [coding conventions]. + 1. Make commits. Make sure to follow HealthConnect's [commit conventions]. + 1. Push this branch to your fork or pre-dev branch on GitHub. + 1. Open a [pull request][open-a-pull-request]. See [pull requests]. + 1. HealthConnect maintainers will set [labels] and provide feedback. + 1. Address this feedback. See [working with git]. + 1. Your code is merged in HealthConnect master branch when it passes review. + +Be sure to read the [general tips] below. + +[open-an-issue]: https://github.com/hippyaki/HealthConnect/issues?q=state:open+type:issue+label:"Type:+bug" +[labels]: https://github.com/hippyaki/HealthConnect/wiki/HealthConnect%27s-labeling-system +[open-a-pull-request]: https://help.github.com/articles/using-pull-requests + +### General Tips +[general tips]: #general-tips +From experience, the following recommendations help to get a software +contribution into HealthConnect master faster: + +- **Ask around for help!** Either offline or through one of our communication + channels (see above). The earlier you check your feature design with other + people, the less likely it is that it is denied during the review process. +- **Verify your concept early!** If you work on your own until the code + *looks* good enough to show publicly, you might miss some design flaws others + might have spotted earlier. +- **Keep it simple!** Try to use what is already there and don't change existing + APIs if not absolutely necessary. +- **Keep it small!** A PR with >1000 lines of changes will very likely make + even the most active reviewer put your review on their long to-do list. +- **Keep it modular!** Make extensions to a feature or new features for a + platform optionally to use. +- **Provide tests!** They should be comprehensible and easy to be executed. + Alternatively comprehensive testing procedures should be provided with your + pull request. + + + +### Pull Requests +[pull requests]: #pull-requests + +GitHub's Pull Request (PR) feature is the primary mechanism used to make +contributions to the HealthConnect codebase. GitHub itself has some great documentation +on [using the Pull Request feature][about-pull-requests]. +We use the [fork and pull model][development-models], where contributors push +changes to their personal fork and create pull requests to bring those changes +into the source repository. + +* Before opening a new Pull Request, have a look at + [existing ones][existing-pull-requests]. Maybe someone has already opened one + about the same thing. If it's the case, you might be able to help with the + contribution. Just comment on the PR and ask. Include closed PR's in your + search, as previous work might have been closed for lack of interest. + Old and stalled [PRs are sometimes archived][archived-pull-requests] with the + "State: archived" label, maybe one of them is also about the same topic. + +* The Pull Request title should reflect what it is about and be in the same form + as the [commit conventions]. + +* Each Pull Request form uses a template that is there to help + maintainers understand your contribution and help them in testing it. + Please fill each section with as much information as possible. + +* We recommend that you leave the *'Allow edits from maintainers'* check box ticked. + This will allow maintainer finalizing your PR by pushing in your branch. + In general, this speeds up the PR merge in the main repository. + Note that this is not an obligation. + +* Remember that smaller PRs tend to be merged faster, so keep your changes as + concise as possible. They should be confined to a single explainable + change, and be runnable on their own. So don't hesitate to split your PRs + into smaller ones when possible. + +* Maintainers try their best to review every PR as fast as possible, but they + are also only human and it can happen that they miss a few PRs or might be + preoccupied with other PRs. If it happens that your PR receives no review for + a long time, don't hesitate to gently solicit a review by commenting or + by explicitly mentioning a maintainer that you know is knowledgeable in the + area of the PR. You can also advertise the PR on the [forum] and ask for a + review there. + +* Try to answer reviews as quickly as possible to speed up the review process + and avoid stalled PRs. + +You can find more information about HealthConnect development procedure on this +[wiki page][development-procedures]. + +[about-pull-requests]: https://help.github.com/articles/about-pull-requests/ +[development-models]: https://help.github.com/articles/creating-a-pull-request-from-a-fork +[existing-pull-requests]: https://github.com/hippyaki/HealthConnect/pulls +[archived-pull-requests]: https://github.com/hippyaki/HealthConnect/pulls?q=is:pr+label:"State:+archived" +[uncrustify]: http://uncrustify.sourceforge.net +[development-procedures]: https://github.com/hippyaki/HealthConnect/wiki/Development-procedures diff --git a/README.md b/README.md index d415ec8..0c20890 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,13 @@ -(Under Construction during Production) # HealthConnect -## Your OWN Digital Hospital with Physical Units +### Contribute: +To contribute something to HealthConnect, please refer to our [contributing document](CONTRIBUTING.md) ### Features: +Open Source Medical IoT Application. Use any device - ESP32/ESP8266 Dev Board, Raspberry Pi, Smart Phone - connect the sensors and add your device on your account. Then view your medical sensor data sent to the cloud in REAL TIME. + - Ability to access Patient Data remotely (Dashboard) - Digital Multi Para Monitor - Schedule appointments based on Doctor's calendar @@ -23,6 +25,17 @@ These could include infection, disorders, diseases, or any health condition whic The focus is on having a portable ICU, with which the medical help can be reached to the people remotely. + +### Get Started: + +1. Visit the [SignUp Page](https://healthconnect.pages.dev/signup/) and Create your Account. +2. Now visit [Login Page](https://healthconnect.pages.dev/login/) and login. +3. View existing sample/dummy data on the portal. +4. Explore the features on sidebar, and view sample vitals on the Dashboard and Diagnostics. +5. To view your own data or realtime data sample - you'll have to add you device to the cloud. +6. Click on Medical Devices on the sidebar, and follow the instructions to Add your Device. +7. View RealTime health vitals of your your body on the Dashboard and Diagnostics. + # HealthConnect Portal Interface (Patient): ## Dashboard View diff --git a/dashboard/patient/js/index.js b/dashboard/patient/js/index.js index db35361..4adc16a 100644 --- a/dashboard/patient/js/index.js +++ b/dashboard/patient/js/index.js @@ -119,6 +119,6 @@ var patID=""; } - setInterval(updatePatient, 60000*1); //every 3 mins + //setInterval(updatePatient, 60000*10); //every 10 mins })(jQuery); From 84a441fe615d3d43d952ef13109facf33325f3eb Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 20:35:16 +0530 Subject: [PATCH 002/240] Create CODE_OF_CONDUCT.md (#8) --- CODE_OF_CONDUCT.md | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f76126e --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,69 @@ +HealthConnect's Code of Conduct +============================== + +HealthConnect being an open-source project is focused on providing knowledge, +skills, problem-solving and innovative actions towards the medical sciences from +the point of view of a developer. Due to its diversified services and features +within, it is necessary to include people across the world and have their opinions +heard and implmented constructively. + +We want diversity to be one of our greatest strengths, but it can also lead to +communication issues and unhappiness. This is why we ask people to adhere to a +few ground rules. They apply equally to founders, maintainers, contributors and +those seeking help and guidance. + +This is not meant to be an exhaustive list of things you are not allowed to do. +We rather would like you to think of it as a guide to enrich our community and +the technical community in general with new knowledge and perspectives by +allowing everyone to participate. + +This code of conduct applies to all spaces managed by the HealthConnect community. This +includes IRC, the mailing lists, our GitHub projects, face to face events, and +any other forums created by the community for communication within the +community. In addition, violations of this code outside these spaces may also +affect a person's ability to participate within them. + +If you believe someone is violating the code of conduct, we ask that you report +it by tagging the maintainers or even the owner of this repository. + +- **Be friendly and patient.** +- **Be welcoming.** We strive to be a community that welcomes and supports + people of all backgrounds and identities. This includes, but is not limited + to members of any race, ethnicity, culture, national origin, colour, + immigration status, social and economic class, educational level, sex, + sexual orientation, gender identity and expression, age, size, family + status, political belief, religion, and mental and physical ability. +- **Be considerate.** Your work will be used by other people, and you in turn + will depend on the work of others. Any decision you take will affect users + and colleagues, and you should take those consequences into account when + making decisions. Remember that we're a world-wide community, so you might + not be communicating in someone else's primary language. +- **Be respectful.** Not all of us will agree all the time, but disagreement + is no excuse for poor behavior and poor manners. We might all experience + some frustration now and then, but we cannot allow that frustration to turn + into a personal attack. It’s important to remember that a community where + people feel uncomfortable or threatened is not a productive one. +- **Be careful in the words that you choose.** We are a community of + professionals, and we conduct ourselves professionally. Be kind to others. + Do not insult or put down other participants. Harassment and other + exclusionary behavior aren't acceptable. This includes, but is not limited + to: + - Violent threats or language directed against another person. + - Discriminatory jokes and language. + - Posting sexually explicit or violent material. + - Posting (or threatening to post) other people's personally identifying + information ("doxing"). + - Personal insults, especially those using racist or sexist terms. + - Unwelcome sexual attention. + - Advocating for, or encouraging, any of the above behavior. + - Repeated harassment of others. In general, if someone asks you to stop, + then stop. +- **When we disagree, try to understand why.** Disagreements, both social and + technical, happen all the time and HealthConnect is no exception. It is important + that we resolve disagreements and differing views constructively. Remember + that we’re different. The strength of HealthConnect comes from its varied community, + people from a wide range of backgrounds. Different people have different + perspectives on issues. Being unable to understand why someone holds a + viewpoint doesn’t mean that they’re wrong. Don’t forget that it is human to + err and blaming each other doesn’t get us anywhere. Instead, focus on + helping to resolve issues and learning from mistakes. From 2ff7b36f0f576b10454482dbbed80461def2d1c3 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 21:44:46 +0530 Subject: [PATCH 003/240] device-chk3 --- dashboard/patient/css/device-list.css | 8 +- dashboard/patient/js/device.js | 6 +- dashboard/patient/js/mqtt.js | 120 ++++++++++++++++++-------- 3 files changed, 91 insertions(+), 43 deletions(-) diff --git a/dashboard/patient/css/device-list.css b/dashboard/patient/css/device-list.css index 0d70f2f..96c9c60 100644 --- a/dashboard/patient/css/device-list.css +++ b/dashboard/patient/css/device-list.css @@ -294,10 +294,10 @@ button.dev-table-btn { } .device-online::before{ - text-shadow: 0px 0px 1px green; - content: "Online"; + text-shadow: 0px 0px 10px green; + content: "🟢"; } .device-offline::before{ - text-shadow: 0px 0px 1px red; - content: "Offline"; + text-shadow: 0px 0px 10px red; + content: "🔴"; } \ No newline at end of file diff --git a/dashboard/patient/js/device.js b/dashboard/patient/js/device.js index cff73e1..78b163a 100644 --- a/dashboard/patient/js/device.js +++ b/dashboard/patient/js/device.js @@ -29,8 +29,9 @@ function add_node(ID, val, node,branch){ let x=document.getElementById('dev-table').insertRow(1); x.id="node-"+ID; c=0; - x.insertCell(c).innerHTML=''; - x.insertCell(c).setAttribute('class', 'device-offline'); + x.insertCell(c).innerHTML=''; + status = 'device-offline '+x.id; + x.insertCell(c).setAttribute('class', status); x.insertCell(c).innerHTML=val; x.insertCell(c).innerHTML=ID; x.insertCell(c).innerHTML=node; @@ -38,4 +39,5 @@ function add_node(ID, val, node,branch){ } + //add_node(22110103, "sbp,db,resp,hr,spO2,fiO2,temp", "Central", 9); \ No newline at end of file diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 74f529d..b20b1c4 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -30,85 +30,131 @@ var mqttpass =""; })(jQuery); -function startConnect(branch) { - switch(branch){ - case 0: - branch = "SBP"; - case 1: - branch = "DBP"; - case 2: - branch = "Resp"; - case 3: - branch = "HR"; - case 9: - branch = "all"; - default: - branch = "all"; - } +function startConnect(branch, ID) { + // Generate a random client ID - clientID = "clientID-" + parseInt(Math.random() * 1000); // Fetch the hostname/IP address and port number from the form host = mqttserver; port = 8884; - let act = "Connecting to: " + host + ' on port: ' + port + ', with Client ID - ' + clientID; + let act = "Connecting to: " + host + ' on port: ' + port + ', with Node ID - ' + ID; // Print output for the user in the messages div - //console.log(act); + console.log(act); // Initialize new Paho client connection - client = new Paho.MQTT.Client(host, Number(port), clientID); + client = new Paho.MQTT.Client(host, Number(port), ID); // Set callback handlers - client.onConnectionLost = onConnectionLost; - client.onMessageArrived = onMessageArrived; + client.onConnectionLost = onConnectionLost(ID); + client.onMessageArrived = onMessageArrived(branch); // Connect the client, if successful, call onConnect function client.connect({ - onSuccess: onConnect(branch), + onSuccess: onConnect(branch,ID), userName: mqttuser, password: mqttpass, useSSL: true }); //console.log("Connected"); + + let loc = 'td.' + ID; + let dvof = 'device-offline '+ID; + let dvon = 'device-online '+ID; + if($(loc).hasClass(dvof)){ + $('loc').removeClass('device-offline'); + $('loc').addClass('device-online'); + } + } // Called when the client connects -function onConnect(branch) { +function onConnect(branch, ID) { // Fetch the MQTT topic from the form - topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+branch; + + switch(branch){ + case 0: + branch = "SBP"; + case 1: + branch = "DBP"; + case 2: + branch = "Resp"; + case 3: + branch = "HR"; + case 9: + branch = "all"; + default: + branch = "all"; + } + + topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/"+branch; //topic = "#"; // Print output for the user in the messages div let act = "Subscribing to: " + topic; - //console.log(act); + console.log(act); // Subscribe to the requested topic client.subscribe(topic); + } // Called when the client loses its connection -function onConnectionLost(responseObject) { - //console.log("onConnectionLost: Connection Lost"); +function onConnectionLost(responseObject,ID) { + let act = "Connection Lost with "+ID; + console.log(act); + + let loc = 'td.' + ID; + let dvof = 'device-offline '+ID; + let dvon = 'device-online '+ID; + if($(loc).hasClass(dvon)){ + $('loc').removeClass('device-online'); + $('loc').addClass('device-offline'); + } + if (responseObject.errorCode !== 0) { //console.log("onConnectionLost: " + responseObject.errorMessage); } } // Called when a message arrives -function onMessageArrived(message) { +function onMessageArrived(message,branch) { //console.log(message.payloadString); - var values = message.payloadString.split(','); - //console.log(values); + switch(branch){ + case 0: + branch = "SBP"; + case 1: + branch = "DBP"; + case 2: + branch = "Resp"; + case 3: + branch = "HR"; + case 9: + var values = message.payloadString.split(','); + console.log(values); + + $('.dbp').text(values[0]); + $('.sbp').text(values[1]); + $('.heartrate').text(values[2]); + $('.respiration').text(values[3]); + $('.spo2').text(values[4]); + $('.temp').text(values[5]); + $('.fio2').text(values[6]); + default: + var values = message.payloadString.split(','); + //console.log(values); + + $('.dbp').text(values[0]); + $('.sbp').text(values[1]); + $('.heartrate').text(values[2]); + $('.respiration').text(values[3]); + $('.spo2').text(values[4]); + $('.temp').text(values[5]); + $('.fio2').text(values[6]); + } - $('.dbp').text(values[0]); - $('.sbp').text(values[1]); - $('.heartrate').text(values[2]); - $('.respiration').text(values[3]); - $('.spo2').text(values[4]); - $('.temp').text(values[5]); - $('.fio2').text(values[6]); + } From 62e81c3db1736d5c52794bbf6616e4f86131f654 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 21:53:23 +0530 Subject: [PATCH 004/240] device-chk4 --- dashboard/patient/js/device.js | 2 +- dashboard/patient/js/mqtt.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dashboard/patient/js/device.js b/dashboard/patient/js/device.js index 78b163a..23524f2 100644 --- a/dashboard/patient/js/device.js +++ b/dashboard/patient/js/device.js @@ -29,7 +29,7 @@ function add_node(ID, val, node,branch){ let x=document.getElementById('dev-table').insertRow(1); x.id="node-"+ID; c=0; - x.insertCell(c).innerHTML=''; + x.insertCell(c).innerHTML=''; status = 'device-offline '+x.id; x.insertCell(c).setAttribute('class', status); x.insertCell(c).innerHTML=val; diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index b20b1c4..4d64e29 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -30,7 +30,7 @@ var mqttpass =""; })(jQuery); -function startConnect(branch, ID) { +function startConnect(branch, dev_id) { // Generate a random client ID @@ -38,6 +38,7 @@ function startConnect(branch, ID) { // Fetch the hostname/IP address and port number from the form host = mqttserver; port = 8884; + let ID = "node-"+dev_id; let act = "Connecting to: " + host + ' on port: ' + port + ', with Node ID - ' + ID; // Print output for the user in the messages div From 3764d4fe6327ba420ecb150c9d96addbf92abb64 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 22:26:28 +0530 Subject: [PATCH 005/240] device-chk5 --- dashboard/patient/js/mqtt.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 4d64e29..9ba52b0 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -43,13 +43,13 @@ function startConnect(branch, dev_id) { let act = "Connecting to: " + host + ' on port: ' + port + ', with Node ID - ' + ID; // Print output for the user in the messages div console.log(act); - + clientID = "clientID-"dev_id; // Initialize new Paho client connection - client = new Paho.MQTT.Client(host, Number(port), ID); + client = new Paho.MQTT.Client(host, Number(port), clientID); // Set callback handlers - client.onConnectionLost = onConnectionLost(ID); - client.onMessageArrived = onMessageArrived(branch); + client.onConnectionLost(ID) = onConnectionLost; + client.onMessageArrived(branch) = onMessageArrived; // Connect the client, if successful, call onConnect function client.connect({ From cbe12f004fb91219e192e36588bcb8ca4a03e58c Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 22:27:03 +0530 Subject: [PATCH 006/240] device-chk5 --- dashboard/patient/js/mqtt.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 9ba52b0..5556e16 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -43,7 +43,7 @@ function startConnect(branch, dev_id) { let act = "Connecting to: " + host + ' on port: ' + port + ', with Node ID - ' + ID; // Print output for the user in the messages div console.log(act); - clientID = "clientID-"dev_id; + clientID = "clientID-"+dev_id; // Initialize new Paho client connection client = new Paho.MQTT.Client(host, Number(port), clientID); From 18934b0802d7510acf4a6e3e661e6523532cd1c3 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 22:37:00 +0530 Subject: [PATCH 007/240] device-chk6 --- dashboard/patient/js/mqtt.js | 52 +++++++++--------------------------- 1 file changed, 13 insertions(+), 39 deletions(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 5556e16..395bb5f 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -48,8 +48,8 @@ function startConnect(branch, dev_id) { client = new Paho.MQTT.Client(host, Number(port), clientID); // Set callback handlers - client.onConnectionLost(ID) = onConnectionLost; - client.onMessageArrived(branch) = onMessageArrived; + client.onConnectionLost = onConnectionLost; + client.onMessageArrived = onMessageArrived; // Connect the client, if successful, call onConnect function client.connect({ @@ -86,7 +86,7 @@ function onConnect(branch, ID) { case 9: branch = "all"; default: - branch = "all"; + branch = "null"; } topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/"+branch; @@ -101,17 +101,17 @@ function onConnect(branch, ID) { } // Called when the client loses its connection -function onConnectionLost(responseObject,ID) { - let act = "Connection Lost with "+ID; +function onConnectionLost(responseObject) { + let act = "Connection Lost"; console.log(act); - let loc = 'td.' + ID; - let dvof = 'device-offline '+ID; - let dvon = 'device-online '+ID; - if($(loc).hasClass(dvon)){ - $('loc').removeClass('device-online'); - $('loc').addClass('device-offline'); - } +// let loc = 'td.' + ID; +// let dvof = 'device-offline '+ID; +// let dvon = 'device-online '+ID; +// if($(loc).hasClass(dvon)){ +// $('loc').removeClass('device-online'); +// $('loc').addClass('device-offline'); +// } if (responseObject.errorCode !== 0) { //console.log("onConnectionLost: " + responseObject.errorMessage); @@ -121,29 +121,7 @@ function onConnectionLost(responseObject,ID) { // Called when a message arrives function onMessageArrived(message,branch) { //console.log(message.payloadString); - - switch(branch){ - case 0: - branch = "SBP"; - case 1: - branch = "DBP"; - case 2: - branch = "Resp"; - case 3: - branch = "HR"; - case 9: - var values = message.payloadString.split(','); - console.log(values); - - $('.dbp').text(values[0]); - $('.sbp').text(values[1]); - $('.heartrate').text(values[2]); - $('.respiration').text(values[3]); - $('.spo2').text(values[4]); - $('.temp').text(values[5]); - $('.fio2').text(values[6]); - default: - var values = message.payloadString.split(','); + var values = message.payloadString.split(','); //console.log(values); $('.dbp').text(values[0]); @@ -155,10 +133,6 @@ function onMessageArrived(message,branch) { $('.fio2').text(values[6]); } - - -} - // Called when the disconnection button is pressed function startDisconnect() { client.disconnect(); From 9e99da1968b0379a09a51e364c03aa127d833e67 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 22:45:19 +0530 Subject: [PATCH 008/240] device-chk7 --- dashboard/patient/js/mqtt.js | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 395bb5f..278c2de 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -53,7 +53,7 @@ function startConnect(branch, dev_id) { // Connect the client, if successful, call onConnect function client.connect({ - onSuccess: onConnect(branch,ID), + onSuccess: onConnect(ID), userName: mqttuser, password: mqttpass, useSSL: true @@ -71,25 +71,11 @@ function startConnect(branch, dev_id) { } // Called when the client connects -function onConnect(branch, ID) { +function onConnect(ID) { // Fetch the MQTT topic from the form - switch(branch){ - case 0: - branch = "SBP"; - case 1: - branch = "DBP"; - case 2: - branch = "Resp"; - case 3: - branch = "HR"; - case 9: - branch = "all"; - default: - branch = "null"; - } - topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/"+branch; + topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/all"+branch; //topic = "#"; // Print output for the user in the messages div let act = "Subscribing to: " + topic; From 5a042a4207419cd332f8746caca849be5d9f6a0c Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 22:49:30 +0530 Subject: [PATCH 009/240] removed branch logic --- dashboard/patient/js/device.js | 4 ++-- dashboard/patient/js/mqtt.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dashboard/patient/js/device.js b/dashboard/patient/js/device.js index 23524f2..799228a 100644 --- a/dashboard/patient/js/device.js +++ b/dashboard/patient/js/device.js @@ -21,7 +21,7 @@ function node_search() { } } -function add_node(ID, val, node,branch){ +function add_node(ID, val, node){ let date = new Date(); let current_date = date.getFullYear()+"-"+(date.getMonth()+1)+"-"+ date.getDate(); let current_time = date.getHours()+":"+date.getMinutes(); @@ -29,7 +29,7 @@ function add_node(ID, val, node,branch){ let x=document.getElementById('dev-table').insertRow(1); x.id="node-"+ID; c=0; - x.insertCell(c).innerHTML=''; + x.insertCell(c).innerHTML=''; status = 'device-offline '+x.id; x.insertCell(c).setAttribute('class', status); x.insertCell(c).innerHTML=val; diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 278c2de..544abe9 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -30,7 +30,7 @@ var mqttpass =""; })(jQuery); -function startConnect(branch, dev_id) { +function startConnect(dev_id) { // Generate a random client ID @@ -75,7 +75,7 @@ function onConnect(ID) { // Fetch the MQTT topic from the form - topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/all"+branch; + topic = "data/patient/"+sessionStorage.getItem('user')+"/med/"+ID+"/all"; //topic = "#"; // Print output for the user in the messages div let act = "Subscribing to: " + topic; @@ -105,7 +105,7 @@ function onConnectionLost(responseObject) { } // Called when a message arrives -function onMessageArrived(message,branch) { +function onMessageArrived(message) { //console.log(message.payloadString); var values = message.payloadString.split(','); //console.log(values); From 4309860120022915fff28c61b9337a4978bf4131 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 23:10:47 +0530 Subject: [PATCH 010/240] device-chk8 --- dashboard/patient/js/mqtt.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index 544abe9..f455f45 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -29,7 +29,7 @@ var mqttpass =""; }); })(jQuery); - +var ID = ""; function startConnect(dev_id) { @@ -38,7 +38,7 @@ function startConnect(dev_id) { // Fetch the hostname/IP address and port number from the form host = mqttserver; port = 8884; - let ID = "node-"+dev_id; + ID = "node-"+dev_id; let act = "Connecting to: " + host + ' on port: ' + port + ', with Node ID - ' + ID; // Print output for the user in the messages div @@ -53,12 +53,12 @@ function startConnect(dev_id) { // Connect the client, if successful, call onConnect function client.connect({ - onSuccess: onConnect(ID), + onSuccess: onConnect, userName: mqttuser, password: mqttpass, useSSL: true }); - //console.log("Connected"); + console.log("Connected"); let loc = 'td.' + ID; let dvof = 'device-offline '+ID; @@ -71,7 +71,7 @@ function startConnect(dev_id) { } // Called when the client connects -function onConnect(ID) { +function onConnect() { // Fetch the MQTT topic from the form From 99c875b134a676d349485cea85a931e490da5f5d Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 23:16:18 +0530 Subject: [PATCH 011/240] device-chk9 --- dashboard/patient/js/mqtt.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dashboard/patient/js/mqtt.js b/dashboard/patient/js/mqtt.js index f455f45..7d51c4f 100644 --- a/dashboard/patient/js/mqtt.js +++ b/dashboard/patient/js/mqtt.js @@ -64,8 +64,8 @@ function startConnect(dev_id) { let dvof = 'device-offline '+ID; let dvon = 'device-online '+ID; if($(loc).hasClass(dvof)){ - $('loc').removeClass('device-offline'); - $('loc').addClass('device-online'); + $(loc).removeClass('device-offline'); + $(loc).addClass('device-online'); } } From b5636e7850479f17ef3a04f415f9a0ebfbc73c59 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Wed, 2 Nov 2022 23:30:46 +0530 Subject: [PATCH 012/240] markdown files (#10) * remove updation of data * added contribution guide * added guide file * max changes (#9) * changes to readme and new contribution guide (#7) * remove updation of data * added contribution guide * added guide file * Create CODE_OF_CONDUCT.md (#8) * device-chk3 * device-chk4 * device-chk5 * device-chk5 * device-chk6 * device-chk7 * removed branch logic * device-chk8 * device-chk9 From a05aad769605c8c1372ce6ced536292a5997513d Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 4 Nov 2022 00:25:09 +0530 Subject: [PATCH 013/240] intro to modal --- dashboard/patient/css/main.css | 39 ++++++++++++++++++++++++++++++++++ dashboard/patient/index.html | 21 ++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/dashboard/patient/css/main.css b/dashboard/patient/css/main.css index ba9a76b..6eefba2 100644 --- a/dashboard/patient/css/main.css +++ b/dashboard/patient/css/main.css @@ -1633,3 +1633,42 @@ span.app-version { .map { height: 252px; } + + +.node-dev.pop-up { + position: absolute; + z-index: 9; + top: 50%; + right: 35%; +} + +.key-setting .close { + background-color: red; + display: flex; + flex-direction: row-reverse; + padding: 10px; + border-radius: 10px 10px 0px 0px; +} + +.key-setting .close-icon {margin-right: 5px;} + +.key-setting .box-content { + background-color: white; +} + +.key-setting.box { + padding: 0px 1; + display: flex; + background: #ffffff; + border-radius: 21px; + box-shadow: 0 5px 10px rgb(0 0 0 / 10%); + flex-direction: column; + flex-wrap: nowrap; + align-content: stretch; + justify-content: space-around; +} + +.key-setting .submit-key { + border-radius: 0px 0px 10px 10px; + padding: 10px; +} \ No newline at end of file diff --git a/dashboard/patient/index.html b/dashboard/patient/index.html index aed05f1..ccec2a1 100644 --- a/dashboard/patient/index.html +++ b/dashboard/patient/index.html @@ -28,6 +28,27 @@ + +
+
+
+ +
+
+
Systole BP
+
+
+ Safe [90 - 120 mm Hg] +
+
+
+
Systole BP
+ + +
+
+
+
-
- +
From 71f5ad1fb1943b79c4455004bf73571be3643723 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 27 May 2023 04:25:45 +0530 Subject: [PATCH 208/240] added logo and desc --- index.html | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 6854882..d616de1 100644 --- a/index.html +++ b/index.html @@ -32,9 +32,8 @@
From 3d7ce1ad66fd8ba40f092388ab682596a7f9a715 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 27 May 2023 04:27:23 +0530 Subject: [PATCH 209/240] Add files via upload --- assets/img/HC_22.png | Bin 0 -> 36229 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/img/HC_22.png diff --git a/assets/img/HC_22.png b/assets/img/HC_22.png new file mode 100644 index 0000000000000000000000000000000000000000..1fb4a0831132ad495f17fe1852ae2aa53d426af7 GIT binary patch literal 36229 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 Date: Sat, 27 May 2023 04:41:38 +0530 Subject: [PATCH 210/240] Update main.css From b7e4be52645e65fee9179fc8538247ad2ba727f8 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 27 May 2023 04:48:43 +0530 Subject: [PATCH 211/240] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index d616de1..9fe534f 100644 --- a/index.html +++ b/index.html @@ -32,7 +32,7 @@ +
+
+
+ + +
+
+
+ +
+
+
+
Open Source
+
+
+

Digital Healthcare IoT Platform

Everything that a hospital has to offer, right at your virtual monitor. Diagnose your health with our wearable device, and watch it all on the internet in real-time

+ +
+
+ +
+
+
+
+
+
+
+
- +
-
Open Hours
-
Mon - Fri: 8:00am to 5:00pm
-
Saturday: 9:00am to 3:30pm
-
Sunday: 9:00am to 3:30pm
+
Supported Hardware
+
ESP32 Dev Kit-C
+
ESP8266 NodeMCU Board
+
Raspberry Pico W
+
IoT Services
MultiPara MonitorLIVE DiagnosisOnline Prescription
+ + +
-
About us
-

Our Qualified Team is Ready to Help You!

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt fermentum. Sagittis pellentesque.

-
+
Web Diagnosis
+

A monitor that moves with your Health

Access the multi-para monitor on your Smartphone. Feeling sick? Plug in the ECG and get a quick check of your vitals.

+
+ + +
@@ -103,77 +123,11 @@
-
Why Us
-

Your Well-Being is our Main Priority.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt fermentum. Sagittis pellentesque.

-
-
-
-
-
Our services

Specialties

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt fermentum. Sagittis pellentesque.

-
-
-
-
Pediatricians

Pediatricians

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt appet fermentum amet sit.

-
-
-
Plastic Surgeons

Plastic Surgeons

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt appet fermentum amet sit.

-
-
-
Ophthalmologists

Ophthalmologists

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt appet fermentum amet sit.

-
-
-
-
-
-
-
-
-
-
Book an Appointment

Our Medical Team is Ready to Help You.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Non mauris nulla tincidunt fermentum. Sagittis pellentesque.

-
-
- -
-
-

How Can We Help?

-
-
- - - -
Thank you! Your submission has been received!
-
- - - -
Oops! Something went wrong while submitting the form.
+
Device Hardware
+

Our IoT device with real-time processing

Our propeitary hardware is capable of edge-computing and filtering health data, while transmitting in real-time

+
+ +

Need Some Help?

Phone Icon - Medica Webflow Template
Call us Today
@@ -181,31 +135,14 @@
Send Us a Email

Visit Us

-

Los Angeles

  • +1 (404) 547 - 8704
  • - - +

    India

    • -
      209 North Dunbar St.
      Santa Monica, CA 90403
    -

    San Francisco

    +

    Virtual

    • +
      Meet Conference Call
      Google, Internet
-
58 Middle Point Rd
San Francisco, CA
- -
-
-
@@ -128,20 +124,21 @@

Why Us -

Need Some Help?

- -

Visit Us

-
-

India

-

Virtual

  • -
    Meet Conference Call
    Google, Internet
+ From 780faed73434963d0c37d972d3480ece5e25326a Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 23 Jun 2023 17:55:28 +0530 Subject: [PATCH 219/240] homepage update3 --- assets/main.css | 21 ++++++++++++++++----- index.html | 6 +++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/assets/main.css b/assets/main.css index 420324d..dac3ffa 100644 --- a/assets/main.css +++ b/assets/main.css @@ -226,6 +226,7 @@ line-height: 20px; font-weight: 500; background-color: black; + padding: 0px -27px; } h1 { @@ -1472,8 +1473,16 @@ } .contact-information { - padding: 100px 48px; + padding: 25px 48px; background-color: #19253e; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-end; + padding-top: 38px; + border-top: 1px solid #7c82a1; + margin-top: 38px; + align-items: center; } .contact-information.contact-page { @@ -1488,6 +1497,7 @@ } .contact-buttons-wrapper { + padding: 0px 31px; max-width: 314px; } @@ -1526,13 +1536,14 @@ } .contact-office-locations { - margin-top: 38px; - padding-top: 38px; - border-top: 1px solid #7c82a1; + /* margin-top: 38px; */ + padding: 0px 31px; + /* padding-top: 38px; */ + /* border-top: 1px solid #7c82a1; */ } .contact-offices-grid { - grid-column-gap: 60px; + /* grid-column-gap: 60px; */ -ms-grid-rows: auto; grid-template-rows: auto; } diff --git a/index.html b/index.html index d84ac7c..c69357b 100644 --- a/index.html +++ b/index.html @@ -125,9 +125,9 @@

-

Need Some Help?

Phone Icon - Medica Webflow Template -
Call us Today
-
Email Icon - Medica Webflow Template +

Visit Us

From 4407978d8f4aa902dac714f2cf9cbcf4a5e69fc3 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 23 Jun 2023 18:01:13 +0530 Subject: [PATCH 220/240] homepage update4 --- assets/main.css | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/assets/main.css b/assets/main.css index dac3ffa..8deaaa6 100644 --- a/assets/main.css +++ b/assets/main.css @@ -14,7 +14,7 @@ ========================================================================== */ .w-layout-grid { display: -ms-grid; - display: grid; + /* display: grid; */ grid-auto-columns: 1fr; -ms-grid-columns: 1fr 1fr; grid-template-columns: 1fr 1fr; @@ -226,7 +226,6 @@ line-height: 20px; font-weight: 500; background-color: black; - padding: 0px -27px; } h1 { @@ -1473,16 +1472,12 @@ } .contact-information { - padding: 25px 48px; + padding: 43px 48px; background-color: #19253e; display: flex; flex-direction: row; - flex-wrap: wrap; justify-content: flex-end; - padding-top: 38px; - border-top: 1px solid #7c82a1; - margin-top: 38px; - align-items: center; + align-items: flex-start; } .contact-information.contact-page { @@ -1497,8 +1492,8 @@ } .contact-buttons-wrapper { - padding: 0px 31px; max-width: 314px; + padding: 0px 27px; } .icon-button { @@ -1537,15 +1532,15 @@ .contact-office-locations { /* margin-top: 38px; */ - padding: 0px 31px; /* padding-top: 38px; */ /* border-top: 1px solid #7c82a1; */ + padding: 0px 105px; } .contact-offices-grid { /* grid-column-gap: 60px; */ -ms-grid-rows: auto; - grid-template-rows: auto; + /* grid-template-rows: auto; */ } .contact-office-location-title { From 69518b22e6aa00f4cf0e0796172be3b549dd686e Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 23 Jun 2023 22:52:57 +0530 Subject: [PATCH 221/240] update4 --- assets/main.css | 4 ++-- index.html | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/assets/main.css b/assets/main.css index 8deaaa6..e24e70f 100644 --- a/assets/main.css +++ b/assets/main.css @@ -14,7 +14,7 @@ ========================================================================== */ .w-layout-grid { display: -ms-grid; - /* display: grid; */ + display: grid; grid-auto-columns: 1fr; -ms-grid-columns: 1fr 1fr; grid-template-columns: 1fr 1fr; @@ -1534,7 +1534,7 @@ /* margin-top: 38px; */ /* padding-top: 38px; */ /* border-top: 1px solid #7c82a1; */ - padding: 0px 105px; + padding: 0px 37px; } .contact-offices-grid { diff --git a/index.html b/index.html index c69357b..a3aa9d0 100644 --- a/index.html +++ b/index.html @@ -125,13 +125,14 @@

-

Need Some Help?

Phone Icon - Medica Webflow Template -
Schedule a Call
+

Need Some Help?

Visit Us

-
-

India

  • + +
    + +
    • From 11c4ff2b9ff0f93e1aadbcef01b610d5cea43ce8 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 23 Jun 2023 23:01:55 +0530 Subject: [PATCH 222/240] update5 --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index a3aa9d0..7bf2319 100644 --- a/index.html +++ b/index.html @@ -62,7 +62,7 @@
      Open Source
    -

    Digital Healthcare IoT Platform

    Everything that a hospital has to offer, right at your virtual monitor. Diagnose your health with our wearable device, and watch it all on the internet in real-time

    +

    Digital Healthcare IoT Cloud Platform

    Everything that a hospital has to offer, right at your virtual monitor. Diagnose your health with our wearable device, and watch it all on the internet in real-time

From a5ee2b62c0d6c98ee144e1b0c9954720f23fd642 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Fri, 23 Jun 2023 23:47:44 +0530 Subject: [PATCH 223/240] update6 --- assets/main.css | 14 +++++++------- index.html | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/assets/main.css b/assets/main.css index e24e70f..4128a7b 100644 --- a/assets/main.css +++ b/assets/main.css @@ -621,7 +621,7 @@ } .split-section-grid { - min-height: 820px; + min-height: 660px; -webkit-box-pack: justify; -webkit-justify-content: space-between; -ms-flex-pack: justify; @@ -778,7 +778,7 @@ .transition-bg-image { position: absolute; left: 43%; - top: 24%; + top: %; right: 0%; bottom: 0%; width: 56%; @@ -796,16 +796,16 @@ } .transition-bg-image.about-us { - background-image: url("https://assets.website-files.com/5e30f06b05f79621331ddc25/5e5607170aff9d7b52f2ff90_about-us-image-medica-template-webflow-elements.jpg"); + background-image: url("https://user-images.githubusercontent.com/52236719/194998000-6d70b422-4115-4ea1-a1c4-90f933b8bd98.png"); background-position: 50% 50%; - background-size: cover; + background-size: 200%; background-repeat: no-repeat; } .transition-bg-image.why-us { - background-image: url("https://assets.website-files.com/5e30f06b05f79621331ddc25/5e56072224830beeeb097ba5_why-us-image-medica-template-webflow-elements.jpg"); + background-image: url("https://i0.wp.com/www.techiesms.com/wp-content/uploads/2022/11/ESP32-300x300-copy.png"); background-position: 50% 50%; - background-size: cover; + background-size: contain; background-repeat: no-repeat; } @@ -981,7 +981,7 @@ } .section.section-contact-bar { - padding-top: 0px; + padding-top: 176px; padding-bottom: 60px; /*! background-color: black; */ } diff --git a/index.html b/index.html index 7bf2319..b3ab42c 100644 --- a/index.html +++ b/index.html @@ -67,6 +67,8 @@

+

From f5264e0fd4e6715a6c303d483289555ba2cfd798 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 24 Jun 2023 00:09:32 +0530 Subject: [PATCH 224/240] update7 --- index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index b3ab42c..e24bad3 100644 --- a/index.html +++ b/index.html @@ -20,9 +20,9 @@ -
+
-
-
+
@@ -67,7 +67,7 @@

+
From 5b3f1ae32876d157e6669430883b181b09b724af Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 24 Jun 2023 09:33:50 +0530 Subject: [PATCH 226/240] update0 --- assets/main.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/assets/main.css b/assets/main.css index 4128a7b..abcdeb9 100644 --- a/assets/main.css +++ b/assets/main.css @@ -549,8 +549,6 @@ .nav-menu-wrapper { margin-left: 29px; - padding-top: 6px; - padding-bottom: 24px; -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; From 305098f5236287a5eadfad220f615b908428c678 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 24 Jun 2023 09:34:41 +0530 Subject: [PATCH 227/240] update9 --- 404.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/404.html b/404.html index 435a0b8..05fd2c7 100644 --- a/404.html +++ b/404.html @@ -531,7 +531,7 @@

From 2bc501571c40dcaddef0246ed44be522842cac12 Mon Sep 17 00:00:00 2001 From: Akshayan Sinha Date: Sat, 24 Jun 2023 09:39:01 +0530 Subject: [PATCH 228/240] update9 --- 404.html | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/404.html b/404.html index 05fd2c7..95bec3d 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,5 @@ - @@ -12,14 +12,8 @@ - - - - - + +