diff --git a/Length Converter JS Extension/img/background-blue-aesthetic-flowers.jpg b/Length Converter JS Extension/img/background-blue-aesthetic-flowers.jpg
new file mode 100644
index 00000000..b4069b20
Binary files /dev/null and b/Length Converter JS Extension/img/background-blue-aesthetic-flowers.jpg differ
diff --git a/Length Converter JS Extension/js/length-converter.js b/Length Converter JS Extension/js/length-converter.js
new file mode 100644
index 00000000..e160cd7f
--- /dev/null
+++ b/Length Converter JS Extension/js/length-converter.js
@@ -0,0 +1,103 @@
+function CalculateLength(){
+ var fromLength = Number(document.getElementById("fromLength").value);
+
+ if(ValidateLengthConverter(fromLength)){
+
+ var fromUnit = document.getElementById("fromUnit").value;
+ var toUnit = document.getElementById("toUnit").value;
+
+ var outputLength = document.getElementById("outputLength");
+
+
+ var result = ConvertLength(fromLength,fromUnit,toUnit);
+
+ outputLength.value = result.toFixed(5);
+
+ }
+}
+
+function ResetConverter(){
+ if(confirm("Are you sure want to reset?")){
+ document.getElementById("fromLength").value = "";
+ document.getElementById("outputLength").value = "";
+ }
+}
+
+function ConvertLength(fromLength,fromUnit,toUnit){
+ fromLength = Number(fromLength);
+ var inMillimeter = 0;
+ var makeThisMillimeter = 0;
+ var result;
+
+ switch(fromUnit){
+ case "Millimeter":
+ makeThisMillimeter = 1;
+ break;
+ case "Centimeter":
+ makeThisMillimeter = 10;
+ break;
+ case "Decimeter":
+ makeThisMillimeter = 100;
+ break;
+ case "Meter":
+ makeThisMillimeter = 1000;
+ break;
+ case "Kilometer":
+ makeThisMillimeter = 1000000;
+ break;
+ case "Foot":
+ makeThisMillimeter = 304.8;
+ break;
+ case "Inch":
+ makeThisMillimeter = 25.4;
+ break;
+ case "Mile":
+ makeThisMillimeter = 1609344;
+ break;
+ case "Yard":
+ makeThisMillimeter = 914.4;
+ break;
+ }
+ inMillimeter = fromLength * makeThisMillimeter;
+
+ switch(toUnit){
+ case "Millimeter":
+ result = inMillimeter;
+ break;
+ case "Centimeter":
+ result = inMillimeter / 10;
+ break;
+ case "Decimeter":
+ result = inMillimeter / 100;
+ break;
+ case "Meter":
+ result = inMillimeter / 1000;
+ break;
+ case "Kilometer":
+ result = inMillimeter / 1000000;
+ break;
+ case "Foot":
+ result = inMillimeter / 304.8;
+ break;
+ case "Inch":
+ result = inMillimeter / 25.4;
+ break;
+ case "Mile":
+ result = inMillimeter / 1609344;
+ break;
+ case "Yard":
+ result = inMillimeter / 914.4;
+ break;
+ }
+ return result;
+}
+
+function ValidateLengthConverter(fromLength){
+ if(fromLength <= 0){
+
+ _cmnShowErrorMessageBottomOfTheInputFiled("fromLength","Please enter the valid length")
+
+ return false;
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/js/project-common.js b/Length Converter JS Extension/js/project-common.js
new file mode 100644
index 00000000..b769b411
--- /dev/null
+++ b/Length Converter JS Extension/js/project-common.js
@@ -0,0 +1,24 @@
+function _cmnRemoveAllErrorMessage(){
+ var allErrorBorder = document.getElementsByClassName('error-border');
+ var allErrorMessage = document.getElementsByClassName('error-message');
+ var i;
+
+ for(i = (allErrorBorder.length) - 1; i>=0; i--){
+ allErrorBorder[i].classList.remove("error-border");
+ }
+
+ for(i = (allErrorMessage.length) - 1; i>=0; i--){
+ allErrorMessage[i].remove();
+ }
+}
+
+function _cmnShowErrorMessageBottomOfTheInputFiled(fieldID,errorMessage){
+ var inputField = document.getElementById(fieldID);
+ inputField.classList.add("tool-error-border");
+ inputField.focus();
+
+ var errorMessageElement = document.createElement("p");
+ errorMessageElement.innerHTML = errorMessage;
+ errorMessageElement.classList.add("tool-error-message");
+ inputField.parentNode.insertBefore(errorMessageElement, inputField.nextSibling);
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/main.html b/Length Converter JS Extension/main.html
new file mode 100644
index 00000000..acf05beb
--- /dev/null
+++ b/Length Converter JS Extension/main.html
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+ Length converter
+
+
+
+
+
Length Converter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Length Converter JS Extension/manifest.json b/Length Converter JS Extension/manifest.json
new file mode 100644
index 00000000..59aff868
--- /dev/null
+++ b/Length Converter JS Extension/manifest.json
@@ -0,0 +1,27 @@
+{
+ "manifest_version": 3,
+ "name": "Length Converter JS Extension",
+ "version": "1.0",
+ "description": "Length Converter Extension offers a seamless experience for converting lengths, allowing users to effortlessly switch between various units of measurement...",
+ "author" : "ishadutta.193@gmail.com",
+
+ "icons":{
+ "16": "./src/icon-16.png",
+ "32": "./src/icon-32.png",
+ "48": "./src/icon-48.png",
+ "128": "./src/icon-128.png"
+
+ },
+ "permissions": [
+ "storage"
+ ],
+ "action": {
+ "default_popup": "main.html"
+ },
+ "web_accessible_resources": [
+ {
+ "resources": ["main.html"],
+ "matches": [""]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/scripts/length-converter.js b/Length Converter JS Extension/scripts/length-converter.js
new file mode 100644
index 00000000..9d30f4b2
--- /dev/null
+++ b/Length Converter JS Extension/scripts/length-converter.js
@@ -0,0 +1,106 @@
+document.getElementById("btnReset").addEventListener("click", ResetConverter);
+document.getElementById("btnCalculate").addEventListener("click", CalculateLength);
+
+function CalculateLength(){
+ var fromLength = Number(document.getElementById("fromLength").value);
+
+ if(ValidateLengthConverter(fromLength)){
+
+ var fromUnit = document.getElementById("fromUnit").value;
+ var toUnit = document.getElementById("toUnit").value;
+
+ var outputLength = document.getElementById("outputLength");
+
+
+ var result = ConvertLength(fromLength,fromUnit,toUnit);
+
+ outputLength.value = result.toFixed(5);
+
+ }
+}
+
+function ResetConverter(){
+ if(confirm("Are you sure want to reset?")){
+ document.getElementById("fromLength").value = "";
+ document.getElementById("outputLength").value = "";
+ }
+}
+
+function ConvertLength(fromLength,fromUnit,toUnit){
+ fromLength = Number(fromLength);
+ var inMillimeter = 0;
+ var makeThisMillimeter = 0;
+ var result;
+
+ switch(fromUnit){
+ case "Millimeter":
+ makeThisMillimeter = 1;
+ break;
+ case "Centimeter":
+ makeThisMillimeter = 10;
+ break;
+ case "Decimeter":
+ makeThisMillimeter = 100;
+ break;
+ case "Meter":
+ makeThisMillimeter = 1000;
+ break;
+ case "Kilometer":
+ makeThisMillimeter = 1000000;
+ break;
+ case "Foot":
+ makeThisMillimeter = 304.8;
+ break;
+ case "Inch":
+ makeThisMillimeter = 25.4;
+ break;
+ case "Mile":
+ makeThisMillimeter = 1609344;
+ break;
+ case "Yard":
+ makeThisMillimeter = 914.4;
+ break;
+ }
+ inMillimeter = fromLength * makeThisMillimeter;
+
+ switch(toUnit){
+ case "Millimeter":
+ result = inMillimeter;
+ break;
+ case "Centimeter":
+ result = inMillimeter / 10;
+ break;
+ case "Decimeter":
+ result = inMillimeter / 100;
+ break;
+ case "Meter":
+ result = inMillimeter / 1000;
+ break;
+ case "Kilometer":
+ result = inMillimeter / 1000000;
+ break;
+ case "Foot":
+ result = inMillimeter / 304.8;
+ break;
+ case "Inch":
+ result = inMillimeter / 25.4;
+ break;
+ case "Mile":
+ result = inMillimeter / 1609344;
+ break;
+ case "Yard":
+ result = inMillimeter / 914.4;
+ break;
+ }
+ return result;
+}
+
+function ValidateLengthConverter(fromLength){
+ if(fromLength <= 0){
+
+ _cmnShowErrorMessageBottomOfTheInputFiled("fromLength","Please enter the valid length")
+
+ return false;
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/scripts/project-common.js b/Length Converter JS Extension/scripts/project-common.js
new file mode 100644
index 00000000..b769b411
--- /dev/null
+++ b/Length Converter JS Extension/scripts/project-common.js
@@ -0,0 +1,24 @@
+function _cmnRemoveAllErrorMessage(){
+ var allErrorBorder = document.getElementsByClassName('error-border');
+ var allErrorMessage = document.getElementsByClassName('error-message');
+ var i;
+
+ for(i = (allErrorBorder.length) - 1; i>=0; i--){
+ allErrorBorder[i].classList.remove("error-border");
+ }
+
+ for(i = (allErrorMessage.length) - 1; i>=0; i--){
+ allErrorMessage[i].remove();
+ }
+}
+
+function _cmnShowErrorMessageBottomOfTheInputFiled(fieldID,errorMessage){
+ var inputField = document.getElementById(fieldID);
+ inputField.classList.add("tool-error-border");
+ inputField.focus();
+
+ var errorMessageElement = document.createElement("p");
+ errorMessageElement.innerHTML = errorMessage;
+ errorMessageElement.classList.add("tool-error-message");
+ inputField.parentNode.insertBefore(errorMessageElement, inputField.nextSibling);
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/src/background-blue-aesthetic-flowers.jpg b/Length Converter JS Extension/src/background-blue-aesthetic-flowers.jpg
new file mode 100644
index 00000000..b4069b20
Binary files /dev/null and b/Length Converter JS Extension/src/background-blue-aesthetic-flowers.jpg differ
diff --git a/Length Converter JS Extension/src/icon-128.png b/Length Converter JS Extension/src/icon-128.png
new file mode 100644
index 00000000..6a7accee
Binary files /dev/null and b/Length Converter JS Extension/src/icon-128.png differ
diff --git a/Length Converter JS Extension/src/icon-16.png b/Length Converter JS Extension/src/icon-16.png
new file mode 100644
index 00000000..95436056
Binary files /dev/null and b/Length Converter JS Extension/src/icon-16.png differ
diff --git a/Length Converter JS Extension/src/icon-32.png b/Length Converter JS Extension/src/icon-32.png
new file mode 100644
index 00000000..ed3688ac
Binary files /dev/null and b/Length Converter JS Extension/src/icon-32.png differ
diff --git a/Length Converter JS Extension/src/icon-48.png b/Length Converter JS Extension/src/icon-48.png
new file mode 100644
index 00000000..c926237a
Binary files /dev/null and b/Length Converter JS Extension/src/icon-48.png differ
diff --git a/Length Converter JS Extension/src/style.css b/Length Converter JS Extension/src/style.css
new file mode 100644
index 00000000..94fc3d49
--- /dev/null
+++ b/Length Converter JS Extension/src/style.css
@@ -0,0 +1,85 @@
+*{
+ border: none;
+ outline: none;
+ font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
+}
+
+html, body{
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-image: url(background-blue-aesthetic-flowers.jpg);
+ background-color: #0288d1;
+ color: #181818;
+}
+
+.container{
+ padding: 20px 80px;
+ background: rgba(61, 132, 165, .2);
+ box-shadow: 0px 0px 16px 0px rgba(0, 0, 0, .7);
+ backdrop-filter: blur(10px);
+ border-radius: 10px;
+}
+
+.container h1{
+ text-align: center;
+ color: #fff;
+}
+
+.container-field{
+ padding: 20px 80px;
+ max-width: 400px;
+ background: rgba(179, 229, 252, .4);
+ border-radius: 10px;
+}
+
+
+.input-group{
+ margin-top: 10px;
+ width: 110%;
+ display: flex;
+ justify-content: space-between;
+}
+
+.input-label{
+ font-size: 20px;
+}
+
+.btn
+{
+ background: #e7f7ff;
+ font-size: 16px;
+ display: block;
+ margin: 10px auto;
+ width: fit-content;
+ border: 1px solid #3d84a5;
+ padding: 14px 50px;
+ border-radius: 6px;
+ text-decoration: none;
+ color: #181818;
+ transition: background 0.5s;
+}
+
+.btn:hover
+{
+ background: #3d84a5;
+ color: #fff;
+}
+
+.tool-error-border{
+ border: 2px solid red;
+}
+
+.tool-error-message{
+ display: block;
+ color: red;
+ font-size: 14px;
+ font-style: italic;
+ font-weight: 800;
+ margin: 5px 5px 0 5px;
+ position: absolute;
+ bottom: 1px;
+ right: 0px;
+}
\ No newline at end of file
diff --git a/Length Converter JS Extension/style.css b/Length Converter JS Extension/style.css
new file mode 100644
index 00000000..05340e1c
--- /dev/null
+++ b/Length Converter JS Extension/style.css
@@ -0,0 +1,85 @@
+*{
+ border: none;
+ outline: none;
+ font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
+}
+
+html, body{
+ width: 100%;
+ height: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background-image: url(./img/background-blue-aesthetic-flowers.jpg);
+ background-color: #0288d1;
+ color: #181818;
+}
+
+.container{
+ padding: 20px 80px;
+ background: rgba(61, 132, 165, .2);
+ box-shadow: 0px 0px 16px 0px rgba(0, 0, 0, .7);
+ backdrop-filter: blur(10px);
+ border-radius: 10px;
+}
+
+.container h1{
+ text-align: center;
+ color: #fff;
+}
+
+.container-field{
+ padding: 20px 80px;
+ max-width: 400px;
+ background: rgba(179, 229, 252, .4);
+ border-radius: 10px;
+}
+
+
+.input-group{
+ margin-top: 10px;
+ width: 110%;
+ display: flex;
+ justify-content: space-between;
+}
+
+.input-label{
+ font-size: 20px;
+}
+
+.btn
+{
+ background: #e7f7ff;
+ font-size: 16px;
+ display: block;
+ margin: 10px auto;
+ width: fit-content;
+ border: 1px solid #3d84a5;
+ padding: 14px 50px;
+ border-radius: 6px;
+ text-decoration: none;
+ color: #181818;
+ transition: background 0.5s;
+}
+
+.btn:hover
+{
+ background: #3d84a5;
+ color: #fff;
+}
+
+.tool-error-border{
+ border: 2px solid red;
+}
+
+.tool-error-message{
+ display: block;
+ color: red;
+ font-size: 14px;
+ font-style: italic;
+ font-weight: 800;
+ margin: 5px 5px 0 5px;
+ position: absolute;
+ bottom: 1px;
+ right: 0px;
+}
\ No newline at end of file