How To Let ShaderMaterial Receive/Cast Shadows

So, I have been playing around with vertex and fragment shaders, and wanted to know if there was a way to add shadows to the fragment shaders? I have tried many unsuccessful attempts, and researched a bunch, but nothing seems to work. I’ve seen the method to turn the shader material into something different, but I am hesitant to do that as it seems sketchy.

const vertexShader = `

varying vec2 vUv;
uniform float time;
const int numOfObjects = 8;
uniform vec3 positions[numOfObjects]; 
uniform vec3 ballPosition;
uniform bool anim;
void main() {
    vUv = uv;
    vec4 grassPosition = instanceMatrix * vec4(position, 1.0);      
    if(anim){
        vec4 prevGrassPos = grassPosition;
    float bendFactor = grassPosition.y * grassPosition.y * 2.0;
    for(int i = 0; i<numOfObjects; i++){
        vec3 toObject = grassPosition.xyz - positions[i];
        float distanceToObject = length(toObject);

        if(distanceToObject < 1.1){
            if(positions[i].x > grassPosition.x){
                grassPosition.x -= bendFactor;
            } else if(positions[i].x < grassPosition.x){
                grassPosition.x += bendFactor;
            }
            if(positions[i].z > grassPosition.z){
                grassPosition.z -= bendFactor;
            } else if(positions[i].z < grassPosition.z){
                grassPosition.z += bendFactor;
            }
        } 
    }
    

  if (prevGrassPos == grassPosition && grassPosition.y > 0.1){
      grassPosition.x += sin(grassPosition.y*grassPosition.y + time*7.0)/7.0;
   } 
    }
    
   
    gl_Position = projectionMatrix * modelViewMatrix * grassPosition;
}
`;

const fragmentShader = `
  varying vec2 vUv;

  void main() {
    vec3 baseColor = vec3( 0.41, 1.0, 0.5 );
    float clarity = vUv.y * vUv.y * 0.4 + 0.35;
    gl_FragColor = vec4( baseColor * clarity, 1);
  }
`;

Grass doesn’t have shadow

I would like the grass to receive a shadow from the wall next to it.

If you would like to see the game for yourself: https://ethantwu.com/minigames/3dgame.html

And the source code is here[Grass code starts on line 86]: https://github.com/LeftClickMage/ethantwu.com/blob/main/minigames/test3d.js

Spring-web / Jakarta-servlet: detect input-change in ‘when’ function

In my .jsp-file, I have a text-field and a button. Both elements are part of a table. The table is filled through a forEach loop, which iterates over a List<WordDto> from the java-controller. Each WordDto has its own text-field and button.

The button of a WordDto should be active, if at least one of the two following conditions are met:

  1. A boolean in the WordDto is false
  2. The content in the text-field does not match a String in the WordDto (Initially, the text-field is filled with that String

My current code:

<body>
<div class="container">
    <%--@elvariable id="languageName" type="java.lang.String"--%>
    <h1>Generated words with '${languageName}'</h1>
    <table class="table">
        <thead>
        <tr>
            <th colspan="3">Word</th>
        </tr>
        </thead>
        <tbody>
        <%--@elvariable id="words" type="java.util.List"--%>
        <c:forEach items="${words}" var="singleWord" varStatus="status">
            <tr>
                <form:form method="post" action="word">
                    <input type="hidden" name="listIndex" value="${singleWord.listIndex}"/>
                    <input type="hidden" name="languageId" value="${singleWord.languageId}"/>
                    <td>
                        <label>
                            <input onchange="updateSaveState(singleWord, word.value)" type="text" name="word" value="${singleWord.word}"/>
                        </label>
                    </td>
                    <td>
                        <c:choose>
                            <c:when test="${singleWord.savedInDb}">
                                <label>Saved</label>
                            </c:when>
                            <c:otherwise>
                                <input type="submit" class="btn-success" value="Save"/>
                            </c:otherwise>
                        </c:choose>
                    </td>
                </form:form>
            </tr>
        </c:forEach>
        </tbody>
    </table>
    <a href="generate" class="btn">Generate new words in this language</a>
</div>
<script>
    function updateSaveState(wordDto, text) {
        console.log(text)
        if(wordDto.word !== text)
            wordDto.savedInDb = false;
    }
</script>
</body>

As you can see, I tried to use onChange on the text-field to check, if the text was different. But this way I get the console error: singleWord is not defined. I also tried with onChange=${singleWord.savedInDb = false}, but then the boolean is never true, even when the texts are equal.

How can I disable the button, when the boolean is true AND the text-field is not changed?

Limit User from closing pop-up till it loads completely

I am trying to trigger some operations on page unload. My page contains a form with a submit button. On submitting the form it reloads the page (Basically a postback) and there are some operations that are performed. Lets say these operations take a minute or two to complete.
Now I want to show an alert to users if they try to close the tab while the page is still processing. But I don’t want to show the alert on click of submit button.
This is happening currently because when I click on submit button the form is submitted and the beforeunload event is triggered.

I want the before unload event to trigger only if the page unload is done by closing the tab and not by the click on submit button.
Any ideas on how it can be implemented?

EBICS XML Signature in Javascript

it’s my first time asking in stackoverflow
basically right now I am trying to implement EBICS
current progress in on HPB

I already created an XML with this format

<?xml version="1.0" encoding="UTF-8"?>
<ebicsNoPubKeyDigestsRequest xmlns="urn:org:ebics:H004" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:org:ebics:H004 ebics_keymgmt_request_H004.xsd" Version="H004" Revision="1">
    <header authenticate="true">
        <static>
            <HostID>{HostID}</HostID>
            <Nonce>{Nonce}</Nonce>
            <Timestamp>{CurrentTimestamp}</Timestamp>
            <PartnerID>{ID}</PartnerID>
            <UserID>{ID}</UserID>
            <OrderDetails>
                <OrderType>HPB</OrderType>
                <OrderAttribute>DZHNN</OrderAttribute>
            </OrderDetails>
            <SecurityMedium>0000</SecurityMedium>
        </static>
        <mutable/>
    </header>
    <AuthSignature>
        <ds:SignedInfo>
            <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
            <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
            <ds:Reference URI="#xpointer(//*[@authenticate='true'])">
                <ds:Transforms>
                    <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                </ds:Transforms>
                <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                <ds:DigestValue>....Digest value here...</ds:DigestValue>
            </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>...Signature value here....</ds:SignatureValue>
    </AuthSignature>
    <body/>
</ebicsNoPubKeyDigestsRequest>

But it always return Signature invalid
after check with the bank, they say the DigestValue is not match with the one they generated
Here is the code to generate Digest Value

// **************** Import library ****************
const crypto = require('crypto');
const C14n =    require('xml-crypto/lib/c14n-canonicalization').C14nCanonicalization;
const { DOMParser, XMLSerializer } = require('@xmldom/xmldom');
const xpath = require('xpath');

/**
 * To return digest result based on hash algorithm
 * @param {*} data: string that will be hash
 * @param {*} algorithm: algorithm used, default is sha256
 * @returns 
 */
function digestWithHash(data, algorithm = 'sha256') {
  const digestHash = forge.md.sha256.create();

  digestHash.update(data);

  // return digestHash.digest().toHex()
  return crypto.createHash(algorithm)
    .update(data)
    .digest();
}

/**
 * Generate Digest Value
 * @param {*} doc 
 */
function GenerateDigestValue(doc) {
  // **************** get the xml node, where the digested value is supposed to be
  const nodeDigestValue = doc.getElementsByTagName('ds:DigestValue')[0];

  // **************** canonicalize the node that has authenticate='true' attribute
  const contentToDigest = xpath
    .select("//*[@authenticate='true']", doc)
    .map(x => new C14n().process(x))
    .join('');

  // **************** fix the canonicalization
  const fixedContent = contentToDigest
    .replace(/&#xD;/g, '')
    .replace(
      /xmlns="urn:org:ebics:H004"/g,
      'xmlns="urn:org:ebics:H004" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"',
    );

  

  // **************** Write file as type XML
  fs.writeFileSync("./xml/Canonized-HPB-header.xml", fixedContent);


  // **************** Digest content using sha-256 & encode it to base-64
  nodeDigestValue.textContent = digestWithHash(fixedContent)
    .toString('base64')
    .trim();

  return doc;
}

Here is the main problem
I already tried package called C14N as you can see in the code but still getting same error result. It also seems doing nothing unless I add replace there

Is there any implementation in javascript to generate this SignedXML?
I already search everywhere & most of them are either still stuck in INI & HIA or is in different programming language

NodeJs version: v20.14.0

 "@xmldom/xmldom": "^0.8.10",
"archiver": "^7.0.1",
"axios": "^1.7.2",
"luxon": "^3.4.4",
"node-forge": "^1.3.1",
"uuid": "^10.0.0",
"xml-crypto": "^4.0.1",
"xpath": "0.0.32"

Thank you 🙂

How do I get the current monitor of a window in js?

I save the position of a window when it’s closed:

const savePositionToStorage = (position) => {
    localStorage.setItem('windowPosition', position);
    console.log('Position saved:', position);
}

const getPositionFromStorage = () => {
    const position = localStorage.getItem('windowPosition');
    return position ? position : "top=0,left=0,width=800,height=1000";
}

and open a window like this:

const handleExpandClick = (id) => {
    const windowFeatures = getPositionFromStorage();

    const pdfWindow = window.open(
        `http://127.0.0.1:8000/transactions/matching_evidence/${id}#toolbar=0,view=FitH`,
        "pdf",
        windowFeatures,
    );

    pdfWindow.onload = () => {
        pdfWindow.onbeforeunload = () => {
            savePositionToStorage(`top=${pdfWindow.screenY},left=${pdfWindow.screenX},height=${pdfWindow.innerHeight},width=${pdfWindow.innerWidth}`)
        }
    }

}

The user should be able to save the current location and size of the window, so the user doesn’t have to readjust the pop-up every time.
It works with the current browser monitor, but if I close it on another monitor, it will simply pop up on the furthest right of the current browser monitor.

Is there a way to archive what I want?

Chrome would be the browser the users are using.

I have an XHTML page and the body onload event refuses to function

I have a body onload function in my XHTML and Javascript pages. For some reason the onload function won’t run and I don’t know why?

Here is my XHTML code:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
         <title>SVG_Bezier_Curve</title>
          <link rel="stylesheet" type="text/css" href="http://localhost:8080/exist/rest/db/apps/HTML_Student/SVG_Bezier_Curve.css"/>
          <script language="javascript" src="http://localhost:8080/exist/rest/db/apps/HTML_Student/SVG_Bezier_Curve_2.js">
          </script>
    </head>
    <body onload = "Setup()">
         <input type="button" id = "My_Button" value = "Click Me!" onclick="Setup2()"/>
         <svg xmlns="http://www.w3.org/2000/svg" id="My_SVG" height="500" width="500">
         <path id="Bezier_Curve_1"/>
         <path id="Bezier_Curve_2" d="M 300, 200 A 50, 50 0,0,1 400,200" stroke="red" stroke-width="3" fill="none"/>
    </svg>
    </body>
</html>

And here is my Javascript code:

function Setup() {
var Bezier_Curve_Identification;
var Attribute_Name;
var Attribute_Name_2;
var Coordinate;
var My_Properties;
var Button_Identification;



Attribute_Name = "d";
Attribute_Name_2 = "style";
My_Properties = "stroke: blue; stroke-width: 3; fill: none;";
Coordinate = "M 375 200 A 50 50 0 0 1 475 200";
Button_Identification = document.getElementById('Bezier_Curve_Button');
Button_Identification.setAttribute = ("style", "top: 100px; height: 200px;");
Bezier_Curve_Identification = document.getElementById('Bezier_Curve_1');
Bezier_Curve_Identification.setAttribute(Attribute_Name, Coordinate);
Bezier_Curve_Identification.setAttribute(Attribute_Name_2, My_Properties);}

I corrected the brace in this code, but then I got an error message in my developer tools:

TypeError: Cannot set properties of null (setting ‘setAttribute’)
at Setup (SVG_Bezier_Curve_2.js:16:40)
at onload (SVG_Bezier_Curve.xhtml:8:27)

The problem of not adding an event to the button

I am studying html, css, and js.

To add a click event to the arrow button of flickity,

I used addEventListener. However, the following error occurred.

TypeError: Cannot read properties of null (reading 'addEventListener')
    at index.js:3:6

I am still a beginner, so I do not know what is wrong.


html

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="https://unpkg.com/flickity@2/dist/flickity.min.css">
</head>
<body>
    <h1>My Calendar</h1>

    <div class="header">
        <div class="carousel" data-flickity='{ "pageDots": false }'>
            <div class="carousel-cell">1</div>
            <div class="carousel-cell">3</div>
            <div class="carousel-cell">4</div>
            <div class="carousel-cell">5</div>
        </div>
    </div>

    <div class="container">
        
    </div>
    <script src="https://unpkg.com/flickity@2/dist/flickity.pkgd.min.js"></script>
    <script src="index.js"></script>
</body>

css

.carousel-cell {
    width: 100%;
    font-size: 48px;
    background: transparent;
    text-align: center;
}


.carousel .flickity-prev-next-button {
    width: 100px;
    height: 50px;
    background: transparent;
    border-radius: 0;
    border: none;
    box-shadow: none;
  }

 .carousel .flickity-prev-next-button.previous {
    left: 250px;
}

.carousel .flickity-prev-next-button.next {
    right: 250px;    
}

javascript

const btn = document.querySelector(".carousel .flickity-prev-next-button");


btn.addEventListener("click", () => {
    console.log("Hello")
});

Function updateDoc() called with invalid data. Unsupported field value: a custom __PRIVATE_ArrayRemoveFieldValueImpl object

I’m trying to run arrayRemove() and returns with an error:

Uncaught (in promise) FirebaseError: Function updateDoc() called with invalid data. Unsupported field value: a custom __PRIVATE_ArrayRemoveFieldValueImpl object (found in field present in document…

This is the code that calls arrayRemove():

            if (document.getElementById(meeting+members[i]['uid']+'false')) {
                    console.log(members[i]['uid'])
                await updateDoc(doc(db, 'clubs', props.clubId, 'attendance', meeting), {
                    present: arrayRemove(members[i]['uid'])
                })
                }

Tried to change the argument of arrayRemove and had the same error.

Can html5QrCode use with Livewire3?

I have a button to open the modal for scanning the barcode get the result to an input and click the submit button after finishing scanning.
My JavaScript code works fine with my Laravel project. After I used livewire 3 with my project, It only opened the modal. it didn’t load the camera for scanning.
please help me with this issue. below is my view and script.
enter image description here
I try to use another library like quagga but still have the same issue, I think livewire3 has to do with it.

Javascript working on Cargo staging site, but not on published site

The following JS for an accordion drop-down is working fine on my staging site (using Cargo), but try as I might – it won’t drop-down on the live site!

<script>
var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.display === "block") {
      panel.style.display = "none";
    } else {
      panel.style.display = "block";
    }
  });
}</script>

Does having elements in the DOM with `display:none` makes the browser slower?

I am not a good JS programmer and I dont know for sure how to profile this specific case. In a page I have 100 divs (all of them are visible and occupy space in the screen) and below each visible div I have another 20 div which are not displayed (they are display:none). I only make those 20 div visible when the user clicks the parent div.

So I was wondering: is it really bad (in terms of performance, memory, cpu…) having almost 2000 divs with display:none in the page? Should I just put the 20 divs in the DOM when the user clicks the parent and then remove them after the user clicks again in the parent div? I could save all innerHTML of those divs in a variable and place those divs on the DOM only when the user clicks the parent div, but would it really be much more efficient? I have no events attached to any of those hidden divs.

How to refer to a CSS file using javascript?

I want to be able to access and change a css file through a javascript file. I am using tampermonkey and can’t edit the css file directly.

I’ve looked up this problem and everyone keeps describing how to make a CSS file through javascript instead of access an existing CSS file through javascript.

text-overflow ellipsis doesnt with symbol !!! when using with webkit

i have a css as below

div.b {
  white-space: nowrap;
  width: 50px;
  overflow: hidden;
  text-overflow: ellipsis;
  border: 1px solid #000000;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  text-overflow: ellipsis;
  overflow: hidden;
  word-break: break-all;
  line-height: 16px;
  white-space: normal;
}

with the text

no-webkit-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

then text-overflow: ellipsis will not work as expected if using display: -webkit-box;

it works perfect other if the text doesn’t include symbol like !!!!!!!!!!!!!!!!!!!!!!!
or remove display: -webkit-box;. but i want to keep display: -webkit-box; because i need display 2 lines which is required display: -webkit-box;
any solution will be appreciated!

here is code in the jsfiddle.
https://jsfiddle.net/thanhtungka91/gvbchao1/

Custom Two Column Layout

I have a problem with my display of two columns in my HTML code.
Top part of the two columns:

Space on the 1st column, the paragraph on the 2nd column was pushed down due to the image:

Here’s my HTML code below

document.addEventListener('DOMContentLoaded', () => {
  const column1    = document.getElementById('column1');
  const column2    = document.getElementById('column2');
  const image      = column2.querySelector('img');
  const paragraphs = Array.from(column1.querySelectorAll('p'));

  const distributeParagraphs = () => {
    column2.innerHTML = '';
    column2.appendChild(image);

    let column1Height = column1.offsetHeight;
    let column2Height = image.offsetHeight;

    paragraphs.forEach(paragraph => {
      column1.appendChild(paragraph);
    });

    while (Math.abs(column1Height - column2Height) > paragraphs[0].offsetHeight && paragraphs.length > 0) {
      const lastParagraph = paragraphs.pop();
      column2.appendChild(lastParagraph);
      column1Height -= lastParagraph.offsetHeight;
      column2Height += lastParagraph.offsetHeight;
    }
  };

  window.addEventListener('resize', distributeParagraphs);
  distributeParagraphs();
});
body {
  font-family: Arial, sans-serif;
}

.container {
  display: flex;
  flex-wrap: wrap;
}

.column {
  width: 50%;
  flex: 1;
  padding: 10px;
  box-sizing: border-box;
}

#column1,
#column2 {
  width: 50%;
}

img {
  display: block;
  max-width: 100%;
  height: auto;
}
<div class="container">
  <div class="column" id="column1">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dictum sapien dui, vitae rhoncus magna imperdiet in. Nam imperdiet in turpis sit amet vulputate. Nunc congue velit sit amet mi rhoncus faucibus. Nunc egestas sed enim id cursus. Integer
      lacinia in mauris quis facilisis. Praesent et ullamcorper purus. Pellentesque volutpat faucibus nisl quis porta. Sed tempor eleifend rhoncus.</p>
    <p>Sed ac eros diam. Mauris id felis hendrerit, ornare dolor in, molestie sapien. In pulvinar nisi vitae sem sagittis fringilla. Ut finibus ipsum id condimentum sodales. Aliquam tellus nisi, dignissim eu porta ut, eleifend in tellus. Aenean pharetra,
      justo vitae varius dapibus, tellus ipsum suscipit nibh, id scelerisque ante odio id libero. Maecenas hendrerit posuere est a fermentum. Nullam sed turpis non nulla tincidunt ullamcorper quis pulvinar nisl. Interdum et malesuada fames ac ante ipsum
      primis in faucibus. Proin egestas interdum magna eget interdum. Nullam non fermentum libero.</p>
    <p>Ut vel urna mauris. Ut sit amet nisi eu metus pretium fringilla. Vivamus tincidunt nulla ipsum, nec dapibus sapien aliquet at. In pellentesque diam felis, vitae tempus libero porta scelerisque. Vivamus faucibus ut ligula at volutpat. Nulla vehicula
      nunc in suscipit rutrum. Ut congue ornare nisi eu maximus. Mauris ac lorem id est ultricies convallis a nec tellus. Praesent eleifend et velit in sagittis. Nam ornare nisl eu mi gravida, rutrum luctus nisl posuere. Maecenas fermentum elit et rhoncus
      dignissim. Nam eu tellus eget est bibendum varius. Duis in lacus nec erat auctor semper.</p>
    <!-- Add more paragraphs as needed -->
  </div>
  <div class="column" id="column2">
    <img src="uploadssample_640×426.jpg" alt="Event Image">
  </div>
</div>

I tried to update the Javascript but the problem still persist. I want to get rid of the space at the bottom of the 1st column. I want the paragraphs to be distributed properly, regardless of the size of the images.