contact us form using google sheet and app script

i tryied to write code in appscript for making contactus form. but getting error.
Here is frontend looks like : enter image description here
Here is whats working:

  • file upload working and properly entry visible in google sheet cell named file.

Here is whats not working:

  • after submiting data in frontend form, the ‘name ,message, email’, are not visible in google sheet cells.
  • also overlaping url text in another cell.
  • after submiting the success message not showing.

here is google sheet screenshot:
google sheet data not getting entry properly

Here is code i tryed in appscript: (Two file ‘code.js’ & ‘index.html’)

  1. code.js :
function doGet() {
  return HtmlService.createTemplateFromFile('index').evaluate()
  .addMetaTag('viewport', 'width=device-width, initial-scale=1')
  .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}

var url = 'paste google sheet link here'
var sh = 'sheet1'
var folderId = 'Paste google drive folder link here'

function processForm(formdata){
  var superscript = SuperScript.initSuper(url,sh)
  var formObject = {}
  formdata.forEach(element => formObject[element.name] = element.value)
  var file = superscript.uploadFile(folderId,formObject.myfile.data,formObject.myfile.name)
  var ss= SpreadsheetApp.openByUrl(url);
  var ws=ss.getSheets()[0]
   ws.appendRow([
     new Date(),
    formObject.name,
    "'"+formObject.message,
    formObject.email,
     file.getUrl()
  ]);
}

and 2. index.html :

<!DOCTYPE html>
<head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"
        integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
        integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
</head>
<body>
    <div class="container py-5">
        <div class="row">
            <div class="col-lg-5 col-md-8 mx-auto shadow border bg-white p-4 rounded">
                <nav class="navbar navbar-dark bg-primary">
                    <a class="navbar-brand" href="#" fw-bold mb-3>WRITE YOUR Query/Message</a>
                </nav>
                <br>
                <form id="myForm" onsubmit="handleFormSubmit()">
                    <div id="form_alerts"></div>
                    <div class="form-group mb-3">
                        <label for="Name" class="form-label">Name</label>
                        <input type="text" id="Name" name="Name" class="form-control" placeholder="Enter your Name here" required>
            </div>

            <div class="form-group mb-3">
            <label for="Message" class="form-label">Message</label>
                        <input type="text" id="Message" name="Message" class="form-control" required>
            </div>

            <div class="form-group mb-3">
            <label for="Email" class="form-label">Email</label>
                        <input type="email" id="Email" name="Email" class="form-control" required>
            </div>

                        <div class="form-group">
                            <label for="uploadFile">Upload File</label>
                            <input type="file" class="form-control" name="file" id="file">
                            </div>
                            <button type="SEND" class="btn btn-primary btn-block">SEND</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <script>
        function preventFormSubmit() {
                var forms = document.querySelectorAll('form');
                for (var i = 0; i < forms.length; i++) {
                    forms[i].addEventListener('SEND', function (event) {
                        event.preventDefault();
                    });
                }
            }
            window.addEventListener('load', preventFormSubmit);
            function handleFormSubmit() {
                var formdata = $('#myForm').serializeArray()
                formdata.push({
                  name: 'myfile',
                  value: myfile
                })
                google.script.run.withSuccessHandler(success).processForm(formdata);
            }
            function success(){
                 document.getElementById("myForm").reset()
                 Swal.fire({
                  position: 'center',
                  icon: 'success',
                  title: 'sended successfully!!',
                  showConfirmButton: false,
                  timer: 1500
                })
            }
        var myfile ={},file, reader = new FileReader();
      reader.onloadend = function(e) {
          myfile.data = e.target.result
          myfile.name = file.name
          console.log(myfile)
      };
     $('#file').change(function(){
       file = $('#file')[0].files[0]
        reader.readAsDataURL(file);
     })
    </script>
    <script src="//cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</body>
</html>

Note here is tutorial i followed : https://youtu.be/LKLIVLha2OI

How can onClick on Geom or Label of bizcharts?

I have label of custom barchart based on bizcharts?

How can add onlick on Label or Geom to get the data?

I try using onCLick inside Geom

<Geom 
 onClick={ev => {
            console.log('Clicked data:', ev);
            const { data: clickedData } = ev; // Access the clicked data

            handleLabelClick && handleLabelClick(clickedData[xAxisKey], clickedData[yAxisKey]);
          }}
>

or onClick on Label

label={[
            `${xAxisKey}*${yAxisKey}`,
            (label, value) => {
              return {
                content: formatNumber(value), // Format your label
                style: {
                  fontWeight: '700',
                  cursor: 'pointer',
                },
                // Capture label click
                onClick: () => {
                  console.log('onclick barchart');
                  handleLabelClick && handleLabelClick(label, value);
                },
              };
            },
          ]}

How to preserve case of URL host/domain (URL() constructor)

The URL() constructor normalizes the case of the hostname/domain to lowercase:

(new URL('https://WWW.EXAMPLE.COM/THIS/is/a/PATH')).href
// => 'https://www.example.com/THIS/is/a/PATH'

What is the simplest way to get the hostname and href strings with the case of the hostname preserved? Is there anything better than parsing the domain name manually, then replacing in the result from URL.href?

I would like to query/manipulate a URL (like remove unnecessary query parameters), but preserve the case of the domain. While domains are case-insensitive, sometimes hostnames have uppercase characters thrown in to make them more readable (like expertsexchange.com).

Outlook add-in event remove recurrence will not trigger the handler ‘RecurrenceChanged’?

i add the handler ‘RecurrenceChanged’, and when i change the recurrence will trigger correctly. But when i click the remove btn, it will print nothing.

Here is the code.

Office.onReady(() => {
  isOfficeInitialized = true;
  render(App);
}).then(() => {
  Office.context.mailbox.item.addHandlerAsync(
    Office.EventType.RecurrenceChanged,
    (eventArgs) => {
      console.log('eventArgs', eventArgs);
    },
    (result) => {
      console.log('result', result);
    }
  );
});

i read a lot doc and still don’t know how to resolve it.

The ideal result:

When i click the remove btn, i can know it and do something callback after it.

Can Flutter support “capture” and “bubble” phases for keyboard events like in JavaScript?

In GUI development, there are typically two different behaviors for handling global shortcut keys:

  • High-priority global shortcuts: These shortcuts take precedence over all other input. If a global shortcut is triggered, it immediately handles the event and prevents any other components from receiving it.

  • Low-priority global shortcuts: These shortcuts only trigger if no other component has captured the event. If another component consumes the event, the global shortcut is ignored, unless the event is propagated (bubbled) back up.

In JavaScript:

In web development, JavaScript handles events in two phases: the “capturing” phase and the “bubbling” phase. To achieve the two shortcut behaviors:

  • For high-priority, we can bind the global shortcut in the capturing phase (call document.addEventListener with capture: true).
  • For low-priority, we bind the shortcut in the bubbling phase (call document.addEventListener with capture: false).

My question for Flutter:

  • High-priority global shortcuts: In Flutter, can I use the Focus widget to simulate the “capturing” phase? Wrapping my entire widget tree in a Focus widget seems like it would allow me to intercept key events globally and handle them before any other widgets. Is this the correct approach?

  • Low-priority global shortcuts: How can I implement the low-priority shortcut behavior in Flutter, where the global shortcut only responds if no other widget handles the event? Is there a Flutter mechanism similar to event bubbling in JavaScript?

GSAP The next element after the element with “pinspacing:false” is loaded too quickly

I added “pinSpacing:false” to “#three”. Because I wanted to create an effect where “#four” naturally overlaps and rises when “#three” ends. However, when I added “pinSpacing:false” to “#three”, “#four” show before “#three” even ended.
I tried various methods such as changing the start and end points, but I couldn’t solve it.

Here is my codepen.

https://codepen.io/SooPK/pen/jOgyNRP

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/ScrollTrigger.min.js"></script>

<div id="wrap">
  <!--container-->
  <div class="container">
    <section id="one">
      <div class="bg"></div>
    </section>
    <section id="two">
      <div class="circle">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          viewBox="0 0 100 50"
          class="semicircle"
        >
          <path d="M50 0a50 50 0 0 1 50 50H0A50 50 0 0 1 50 0z" />
        </svg>
      </div>
      <div class="element_wrap">
        <div class="element">
          <img src="./images/main/test_img.png" alt="" />
          <p>1</p>
        </div>
        <div class="element">
          <img src="./images/main/test_img02.png" alt="" />
          <p>2</p>
        </div>
        <div class="element">
          <img src="./images/main/test_img.png" alt="" />
          <p>3</p>
        </div>
      </div>
    </section>
    <section id="three">
      <div class="inner_wrap">
        <div class="slide_wrap">
          <div class="slide slide01">
            <div>
              <h4>Ladder Frame Chassis</h4>
              <p>
                Every Jimny owes its off-roading prowess to the Ladder Frame
                structure. Now, it’s your turn to put it to the test. Pick your
                terrain. A thoroughbred off-roader, the torsional rigidity of
                this chassis instils confidence in the driver to master the
                toughest of topographies. While the full-width rigid axles in
                both the front and the rear, keeps you going like a mountain
                goat on the most impassable roads
              </p>
            </div>
          </div>
          <div class="slide slide02">
            <div>
              <h4>3-link Rigid Axle Suspension With Coil Spring</h4>
              <p>
                The long-stroke 3-link suspension is teamed with full-width
                rigid axles in both the front and rear. This coupled with less
                variation in ground clearance and high tyre grounding force
                enables you to conquer the toughest of terrains. With the rigid
                axle suspension, when an obstacle pushes one wheel up, the axle
                presses the other down, to increase tyre contact in rough road
                conditions.
              </p>
            </div>
          </div>
          <div class="slide slide03">
            <div>
              <h4>Engine Performance</h4>
              <p>
                When you are setting forth into the unknown, the responsive 1.5L
                K15B engine powers you through. Built for off-roading, it
                generates strong torque throughout a wide RPM range for
                unstoppable performance.
              </p>
            </div>
          </div>
        </div>
        <div class="img_wrap"></div>
      </div>
    </section>
    <section id="four">
      <div class="circle">
        <svg
          xmlns="http://www.w3.org/2000/svg"
          viewBox="0 0 100 50"
          class="semicircle"
        >
          <path d="M50 0a50 50 0 0 1 50 50H0A50 50 0 0 1 50 0z" />
        </svg>
      </div>
      <div class="element_wrap02">
        <div class="element02">
          <img src="./images/main/test_img.png" alt="" />
          <p>1</p>
        </div>
      </div>
    </section>
  </div>
  <!--//container-->
</div>
@charset "UTF-8";
* {
  box-sizing: border-box;
}
p {
  color: red;
  line-height: 1.5;
}
section {
  height: 100vh;
}
.circle svg {
  width: 100%;
  height: 200px;
  display: block;
  margin: 0;
  padding: 0;
}
#one .bg {
  width: 100%;
  height: 100vh;
  background: url("https://images.unsplash.com/photo-1518837695005-2083093ee35b")
    no-repeat 50%;
  transform: scale(1.1);
}
#two {
  height: auto;
  z-index: 10;
  position: relative;
  overflow-x: hidden;
}
#two .circle {
  margin: 0 auto;
  width: 100%;
}
#two .element_wrap {
  width: 300%;
  height: 100vh;
  background-color: #000000;
  display: flex;
  justify-content: center;
  flex-wrap: nowrap;
  align-items: center;
}
#two .element {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}
#two .element img {
  width: 300px;
}
#three .inner_wrap {
  display: flex;
  width: 100%;
  height: 100vh;
}
#three .slide {
  width: 50%;
  position: absolute;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  align-items: center;
  padding: 0px 50px;
  height: 100vh;
  opacity: 0;
  background-color: #000000;
}
#three .slide > div {
  width: 50%;
  display: flex;
  flex-direction: column;
  gap: 50px;
}
#three .slide h4 {
  text-transform: uppercase;
  font-weight: 500;
  font-size: 35px;
  line-height: 125%;
  color: #ffffff;
}
#three .slide p {
  font-weight: 300;
  font-size: 15px;
  line-height: 125%;
  color: rgba(255, 255, 255, 0.5);
}
#three .img_wrap {
  width: 50%;
  background-color: #6e58c6;
}
#three .slide_wrap {
  width: 50%;
}
#four {
  height: auto;
  z-index: 10;
  position: relative;
  overflow-x: hidden;
}
#four .circle {
  margin: 0 auto;
  width: 100%;
}
#four .circle img {
  width: 100%;
}
#four .element_wrap02 {
  width: 100%;
  height: 100vh;
  background-color: #000;
  display: flex;
  justify-content: center;
  flex-wrap: nowrap;
  align-items: center;
}
#four .element02 {
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
}
gsap.registerPlugin(ScrollTrigger);

// section #one
let $bg = document.querySelector(".bg");
let $testEffect = gsap
  .timeline({
    scrollTrigger: {
      trigger: "#one",
      start: "top top",
      end: "+=500",
      pin: true,
      scrub: true,
      pinSpacing: false,
    },
  })
  .to($bg, { scale: 1, duration: 1 })
  .to($, { duration: 1 });

// section #two
let $elements = gsap.utils.toArray(".element");
let $testEffect02 = gsap
  .timeline({
    scrollTrigger: {
      trigger: ".element_wrap",
      end: () => "+=" + document.querySelector(".element_wrap").offsetWidth,
      pin: true,
      scrub: 1,
    },
  })
  .to($elements, { xPercent: -100 * ($elements.length - 1) });

// section #three
let $slide = document.querySelectorAll(".slide");

let $testEffect03 = gsap
  .timeline({
    scrollTrigger: {
      trigger: "#three",
      start: "top top",
      end: "+=5000",
      pin: true,
      scrub: true,
      pinSpacing: false,
    },
  })
  .set($slide[0], { opacity: 1 })
  .to($slide[0], { opacity: 0, duration: 0.2 })
  .to($slide[1], { opacity: 1, duration: 0.2 })
  .to($slide[1], { opacity: 0, duration: 0.2 })
  .to($slide[2], { opacity: 1, duration: 0.2 });

//section #four
let $testEffect04 = gsap.timeline({
  scrollTrigger: {
    trigger: ".element_wrap02",
    start: "top top",
    pin: true,
    end: "+=1000",
    scrub: true,
  },
});

How to link a specific Javascript file to a specific HTML form? [closed]

First of all i want to say that i am quite new to coding having only about six months of experience.
So if anything doesn’t make any sense or you have any question, please ask away.

As you’ve seen in the title, i want to link a certain javascript file (exemple : 3.js) to an html form, which is a separate html file(exemple : 3.html).

I have to include the javascript files directly into the php, they are currently inserted like this:

<script type="text/javascript" src="<?= inc("formular/3.js"); ?>"></script>
<script type="text/javascript" src="<?= inc("formular/4.js"); ?>"></script>

Both the javascript and html are called in a php file which serves as a body for everything.

I can’t call the javascript directly into the html forms because of security purposes.

The problem is when i want to use a form, the formular tries to use both javascript files, here’s a log i use to see if the Javascript is being used or not:

charging 3.js
charging 4.js

Which creates a correlation error in the inspector console;
Here is a console result from a test made with the file named 3.html:

Uncaught TypeError: document.getElementById(…) is null
handleRadioChange https://Mysite/formulare4.js?…

The error is here because it wants to charge both javascript files.

So here’s what i tried to fix the problem:

        $id_formular = getVar('formular')
        if ($id_formular = 3) {
           echo"<script type="text/javascript" src="<?= inc("formular/3.js"); ?>"></script>"
        }
        if ($id_formular = 4) {
           echo"<script type="text/javascript" src="<?= inc("formular/4.js"); ?>"></script>"
        }
    }

In this instance, i tried to retrieve all id’s of the forms which are stored in a db with an already made var “formular”.

Can I do “WITH INSERT do INSERT” in Drizzle?

I have two tables, users and settings. When a user account is created, I also want to create a row in the settings table which stores the user.id

The Drizzle docs mention you can do WITH subquery AS (SELECT ...) INSERT ... https://orm.drizzle.team/docs/update#with-update-clause

But I can’t find documentation on using an INSERT as the subquery (i.e. WITH subquery AS (INSERT INTO users) INSERT INTO settings)

In Drizzle, I want to do something like:

const user = db.$with("user").as(
  db
    .insert(users)
    .values(...)
    .returning({ id: users.id})
);

await db.with(user)
    .insert(settings)
    .values({ settings.user_id: sql`(select id from ${user})`, ... })
    .returning({ id: settings.id});

Or in SQL:

WITH user AS (
  INSERT INTO users (...)
  VALUES (...)
  RETURNING id
)
INSERT INTO settings (user_id, ...)
VALUES ((SELECT id FROM user), ...)
RETURNING id

Which would create rows in both tables with a single query

Does Drizzle support this?

javascript- using ‘this’ with querySelector

Is it possible to use “this” with the querySelector method.

I have multiple dynamic buttons on a page and need to get the data-set values for the clicked button.

<button class="user" id="1"
        data-loc="ox1"
        data-name="tom">
</button>

<button class="user" id="2"
        data-loc="ox2"
        data-name="tom-two">
</button>

I tried the below code but it only gives the first element on the page.

[...document.getElementsByClassName("user")].forEach(function(item){
        item.addEventListener("click",myFunction )
    });

 function myFunction() {
 const user = $el.querySelector(".user");
 }

I then tried using the “this” keyword but it does not work.

var $el = $(this);

const member = $el.querySelector(".user");

Can we use parameters and String Interpolation in typeORM in the same query?

i have an sql query in which im inserting multiple values like so

INSERT INTO form_transaction_setup(value1, value2, value3, value4, value5 ,..., value19)
VALUES('${value1}', '${value2}','${value3}', '${value4}', '${value5}', ... , '${value19}')

All of these values except one are grabbed from a variety of different tables and are guaranteed to be sanitized properly. Value 5 however, comes from the client-side and can contain apostrophes, commas, and ofcourse is vulnerable to SQL Injection. I wanted to specify value 5 as a parameter in my sql query which is being built via typeORM, but it keeps giving me a syntax error where I place the question mark(?) to represent the parameter.

This is the query that I have tried

await getConnection().query(
`INSERT INTO form_transaction_setup(value1, value2, value3, value4, value5 ,..., value19)
VALUES('${value1}', '${value2}','${value3}', '${value4}', ? , ... , '${value19}',[value5])`

have also tried alternatives such as [‘${value5}’] or [‘value5’], thinking that the problem is in the parameters. But logging the query shows value 5 being correctly passed to the database.
This is the error I get

code: 'EREQUEST',
[0]   originalError: Error: Incorrect syntax near '?'

In brief, can I use parameters and string interpolation in the same query while using typeORM, and if yes, what am I doing wrong? Thanks in advance.

How to calculate bounds for objects relative to their group?

I’m trying to create screenshots of my objects using fabricjs 5.3 and canvas.toDataURL.

These screenshots shall fit the size of the object. This is simply done by using const bounds = obj.getBoundingRect(false, true); and passing the values to toDataURL.

This works fine but not for objects inside groups. I’ve got it working with the following code:

const group = obj.group;
group._restoreObjectsState();
bounds = obj.getBoundingRect(false, true);
group._calcBounds();
group._updateObjectsCoords();

But this changes the inner state of the group and produces side effects such as applying the scale over and over again everytime the group object was modified.

Any hints would be appreciated on how to calculate the relative bounds.

three js background ends up blurry or pixelated

I have a setup where on my page there is an img element.
I want to render three js on top of that image, and I want to pull that image into my three js canvas.

So I have created a render pass that just renders the image on a full screen quad. I know that this might be overkill as I can set the background on a scene to a texture, but that doesn’t solve my issues, and I would prefer going with this approach.

The problem I am getting with this code is that the texture ends up either blurry or pixelated when compared to the underlying image.

If I set the filters to LinearFilter the image gets really blurry. If I set it to NearestFilter the image ends up more pixelated than the underlying image.

The img element is 520px wide (and so is the image).
The canvas dom is 520px wide, but since I’ve set size and pixelratio on my three js webgl renderer, the width property ends up at 1040 (pixelratio = 2)

Is there something I can do to make the background look closer to the img element?

export class BackgroundImageRenderPass extends Pass {
    copyMaterial: ShaderMaterial;
    fsQuad: FullScreenQuad;

    textureLoader = new TextureLoader();
    texture: Texture;
    constructor() {
        super();
        this.copyMaterial =  new ShaderMaterial({

            name: "TextureShader",

            uniforms: {
                "tDiffuse": { value: null },
            },

            vertexShader: /* glsl */`
                varying vec2 vUv;
        
                void main() {
                    vUv = uv;
                    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
                }`,

            fragmentShader: /* glsl */`
                uniform sampler2D tDiffuse;
        
                varying vec2 vUv;
    
                void main() {
                    gl_FragColor = texture2D(tDiffuse, vUv);
                }`
        });
        const img = document.querySelector("img") as HTMLImageElement;
        if (!img) {
            return;
        }
        this.loadTexture(img.src);

        this.fsQuad = new FullScreenQuad(this.copyMaterial);
    }

    dispose(): void {
        this.copyMaterial.dispose();
        this.fsQuad.dispose();
        this.texture.dispose();
    }

    private async loadTexture(src: string): Promise<void> {
        await new Promise(resolve => {
            this.textureLoader.load(src, texture => {
                texture.magFilter = NearestFilter;
                texture.minFilter = NearestFilter;
                texture.generateMipmaps = false;
                this.texture = texture;
                resolve(null);
            });
        });
    }

    render(renderer: WebGLRenderer, writeBuffer: WebGLRenderTarget, readBuffer: WebGLRenderTarget): void {
        renderer.setRenderTarget(writeBuffer);
        renderer.clear();
        this.copyMaterial.uniforms["tDiffuse"].value = this.texture;
        this.fsQuad.render(renderer);
    }
}

Android – What is the target-script.-minjs Script Connected from 192.168.1.128:8080?

I have taken over an Android Application project with no documentation. The original developer is unknown.

It’s actually a Cordova Android Application.

Inside the <head> section of the main HTML file, there is the following line:

<script type="text/javascript" src="//192.168.1.128:8080/target/target-script-min.js#anonymous"></script>

From some scant information from searching over the web, I gather it is involved in debug support.

Can somebody give me more information on what this is about and what is it to be used for?

I’m using chrome://inspect for debugging, which seems just fine. Do I need this script or can I just remove this line altogether?

Angular this(local) getting Undefined when moving to next step in MultiStepForm causing error on required fields

I’ve new to angular and using angular from a month and currently i’m working on production where i’ve to developed the MultiStep-form.For each Step i’ve Separate form and last three form are are FormArray (eg :experiences could of multiple) here the initialize

    this.experienceForm = this.fb.group({
      Experiences: this.fb.array([this.CreateExperience()])
    })

     CreateExperience(): FormGroup {
    return this.fb.group({
      Organization: ['', Validators.required],
      Designation: ['', Validators.required],
      Department: ['', Validators.required],
      FromDate: ['', Validators.required],
      ToDate: ['', Validators.required],
      StartingSalary: ['', [Validators.required, Validators.min(0)]],
      EndingSalary: ['', [Validators.required, Validators.min(0)]],
      address: [''],
      leavingReason: [''],
    });
  }

but when i naviage to next Step the fields which are required show error message, After debugging i found that this is get undefined which casue this block to get execute

 <div *ngIf="experience.get('StartingSalary')?.hasError('required')" class="text-danger m-2">
                  Starting Salary is required
                </div>

when this is undefined this both conidtion becomes undefined eventually leads to true.

I’ve Tried to use different way especially make sure that all the fields of experience are NOT markAllAsTouched().Apart from this nothing coming in my mind

When the page is fully loaded, the visibility limits part of the page

In the first option – page loading mode – this is if you interrupt it at the loading stage and not completely. The page is not completely loaded. In this case – option – all the content is displayed in the browser – the content that has time to load is loaded accordingly – which had time to load before the interruption.

In the second option – page loading – this is if you do not interrupt the loading and the loading is complete. All the content on the page is completely loaded. But at the moment – immediately upon complete loading – there is a cut-off – a reduction in the visibility of the content – you cannot fully view the – seemingly fully loaded page. The content is cut-off.

It is possible that something is not working somewhere. Could this be – is it because of the side menu?

I’m trying to create a shell for Django Python. And I have a strange thing – visibility – content availability is limited. Although everything seems to load when loading – but then when fully loaded for some reason – there is a limitation – there is no scrolling of all the contents. Maybe you can find out why this is happening to me.

When the page is fully loaded, the visibility of the content is cut-off.

Help please.

This code after the page is fully loaded – limits part of the page – template.

The effect of this code is to limit access to content and does not allow viewing content beyond what is visible on the screenshot – as if it is cut off and there is nothing beyond one diagram – although a lot of things are loaded during loading – and at the end there is a limitation of cutting.

When it is removed, everything loads normally – but the button for activating the menu call is not active – at the top left.

https://fomantic-ui.com/modules/sidebar.html#/examples

This code after the page is fully loaded – limits part of the page – template.

  // using context
      $('.ui.sidebar')
        .sidebar({
          context: $('.bottom.segment')
        })
        .sidebar('attach events', '.ui.top.attached.demo.menu .item')
      ;

On the first screenshot you can see – that I can’t scroll further – to see the content.

I can’t see the content – scroll the scroll on the right side – something is limiting the displayed content on the page.

On the right – you can see the scroll – on the screenshots – you can see the difference between what the content should be – it should all be visible.

But on the first screenshot you can see – what the page display actually is – what it is in fact now.

index.html

{% load static %}
{% load widget_tweaks %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Sidebar Menu | Side Navigation Bar</title>
    <!-- CSS -->
    <!-- You MUST include jQuery 3.4+ before Fomantic -->
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.css">
  </head>
  <body hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
    <div class="ui top attached demo menu">
      <a class="item">
        <i class="sidebar icon"></i>
        Menu
      </a>
    </div>
    <div class="ui bottom attached segment">
      <div class="ui labeled icon left inline vertical demo sidebar menu">
        <a class="item">
          <i class="home icon"></i>
          Home
        </a>
        <a class="item">
          <i class="block layout icon"></i>
          Мониторинг
        </a>
        <a class="item">
          <i class="smile icon"></i>
          Анализ архива
        </a>
        <a class="item">
          <i class="calendar icon"></i>
          History
        </a>
      </div>
      <div class="pusher">
        <div class="ui basic segment">
          <h3 class="ui header">Application Content</h3>
          <p></p>
          <p></p>
          <p></p>
          <p></p>
          <div class="ui grid">
            <div class="six wide column">
              Menu Text
              <div class="ui hidden divider"></div>
              <div class="ui vertical menu">
                <div class="item">
                  <div class="ui input"><input type="text" placeholder="Search..."></div>
                </div>
                <div class="item">
                  Home
                  <div class="menu">
                    <a class="active item">Search</a>
                    <a class="item">Add</a>
                    <a class="item">Remove</a>
                  </div>
                </div>
                <a class="item">
                  <i class="grid layout icon"></i> Browse
                </a>
                <a class="item">
                  Messages
                </a>
                <div class="ui dropdown item">
                  More
                  <i class="dropdown icon"></i>
                  <div class="menu" id="courses_id">
                    <a class="item"><i class="edit icon"></i> Edit Profile</a>
                    <a class="item"><i class="globe icon"></i> Choose Language</a>
                    <a class="item"><i class="settings icon"></i> Account Settings</a>
                  </div>
                </div>
              </div>
            </div>
            <div class="ten wide column" style="text-align: center;">
              Content Text
              <div class="ui hidden divider"></div>
              <div class="ui fluid selection dropdown">
                <input type="hidden" name="user">
                <i class="dropdown icon"></i>
                <div class="default text">Select Friend</div>
                <div class="menu">
                  <div class="item">
                    Jenny Hess
                  </div>
                  <div class="item">
                    Elliot Fu
                  </div>
                  <div class="item">
                    Stevie Feliciano
                  </div>
                  <div class="item">
                    Christian
                  </div>
                  <div class="item">
                    Matt
                  </div>
                </div>
              </div>
              <div class="ui hidden divider"></div>
              {% block content %}

              {% endblock %}
            </div>
          </div>
        </div>
      </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/semantic.min.js"></script>
    <script>
      // using context
      $('.ui.sidebar')
        .sidebar({
          context: $('.bottom.segment')
        })
        .sidebar('attach events', '.ui.top.attached.demo.menu .item')
      ;
      $('.ui.dropdown').dropdown();
      $('.ui.selection.dropdown')
        .dropdown({
          clearable: true
        })
      ;
    </script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"></script>
  </body>
</html>

content.html

{% extends "realnost/index.html" %}

{% block content %}
    <h5 class="ui grey header">Мониторинг систем теплоснабжения</h5>
    <h5 class="ui grey header">Режимные характеристики котельной</h5>
    <h5 class="ui grey header">Режимные характеристики котла №1</h5>
    <div class="ui segment">
        <p>Выработка котлом №1</p>
        {{ chart1k1|safe }}
    </div>
    <div class="ui hidden divider"></div>
    <div class="ui segment">
        <p>Удельный расход условного топлива на выработку котла №1</p>
        {{ chart2k1|safe }}
    </div>
    <div class="ui hidden divider"></div>
    <div class="ui segment">
        <p>КПД котла №1</p>
        {{ chart3k1|safe }}
    </div>
    <div class="ui hidden divider"></div>
    <div class="ui segment">
        <p>Температура уходящих газов за котлом №1</p>
        {{ chart4k1|safe }}
    </div>
    <div class="ui hidden divider"></div>
    <div class="ui segment">
        <p>Таблица среднесуточных значений режимных показателей котла №3</p>
        <table class="ui small table">
            <thead>
                <tr>
                    {% for col in tablek3.columns %}
                    <th>
                        {{ col }}
                    </th>
                    {% endfor %}
                </tr>
            </thead>
            {% for index, row in tablek3.iterrows %}
            <tr>
                {% for cell in row %}
                <td>
                    {{ cell }}
                </td>
                {% endfor %}
            </tr>
            {% endfor %}
        </table>    
    </div>
{% endblock %}

Screen 1
Screen 2
Screen 3