innerHTML is showing incorrectly in react?

I am working with local storage and trying to show its content in HTML. I use useState for showing it, value that I pass in it is innerHTML value, but it is now showing like what I’d expected – I expected like typical divs. Instead, it is showing like string divs.

in component Bar (function Bar() )

const [savedToDos, setSavedToDos] = React.useState(allStorage)

function allStorage() {
        let archive = []
        let keys = Object.keys(localStorage)

        let key;
        for (let i = 0 ; key = keys[i]; i++) {
            archive.push(`<div id="${key}">${localStorage.getItem(key)}</div>`);
        }

        let stringWithToDos = archive.join("")
        let divWithSavedToDos = document.createElement("div")
        
        divWithSavedToDos.innerHTML = stringWithToDos 

       return divWithSavedToDos.innerHTML
   
      
    }
    
    React.useEffect(()=>{  
        setSavedToDos(allStorage)

    }, [localStorage.length])


  return (
    <div className='bar'>
        <input
        ref={inputRef}
        id="barInput"
        type="text"
        placeholder="new to-do"
        onChange={handleChange}/>
        <button onClick={addNewToDo}>add</button>
        <div>{savedToDos}</div>
    </div>
  )

I expected that it will show smth like
item1
item2

But instead I get

<div id="1">item1</div> <div id="2">item2</div>

Thanks for help!

JSON File Access [duplicate]

Hello everyone I have this json that I have and I am trying to use it to retrieve the id or key and the image from it but having trouble doing so.

json file

I have tried using fetch but to no success

fetch('https://server.com/champion.json')
    .then((response) => response.json())
    .then((json) => console.log(json))

I am also trying to use this to display the name and image into an embed from a discord bot

I have tried parseing and logging stuff into the console but nothing gets returned

WebUSB API not printing on Zebra ZQ620 printer

I am working on a project that involves connecting to a Zebra Technologies printer (Model: ZEBRA ZQ620) via WebUSB. My ultimate goal is to send ZPL print commands to this device using the WebUSB API.

What’s Happening:

I successfully request a device and open a session.
I claim an interface (Claimed interface: 0 on configuration: 1).
I send a control transfer (Successfully sent control transfer).
I attempt to send a print command.
Issue:

Despite these seemingly successful operations, the printer doesn’t execute the print command. The code reaches the point where it tries to send data to the printer but fails to print.

Driver Context:

Initially, I was encountering a “USB Access Denied” issue when using the printer’s original drivers. I resolved this by using Zadig to replace the current driver with WinUSB. I’m not sure if this could be causing any problems.

Code:

    <!DOCTYPE html>
<html>

<head>
    <title>WebUSB Example</title>
</head>

<body>
    <h1>WebUSB Zebra Technologies Device Connection</h1>
    <button id="connect">Connect to Device</button>

    <script>
        let device;

        // Helper method to test all possible interface options
        async function tryAllInterfaces(device) {
            const configCount = device.configurations.length;
            for (let configIndex = 0; configIndex < configCount; configIndex++) {
                await device.selectConfiguration(configIndex + 1); // Configurations are 1-indexed
                for (let interfaceIndex = 0; interfaceIndex < device.configuration.interfaces.length; interfaceIndex++) {
                    try {
                        await device.claimInterface(interfaceIndex);
                        console.log(`Claimed interface: ${interfaceIndex} on configuration: ${configIndex + 1}`);
                        return { configIndex, interfaceIndex }; // If successful, return the indices
                    } catch (err) {
                        console.error(`Failed to claim interface ${interfaceIndex} on configuration ${configIndex + 1}: ${err}`);
                    }
                }
            }
            throw new Error('Could not claim any interface');
        }

        // Systematically try all the possible controlTransferOut configurations
        async function testControlTransfer(interfaceIndex) {
            const requestTypes = ['standard', 'class', 'vendor'];
            const recipients = ['device', 'interface', 'endpoint', 'other'];
            const requests = [0x00, 0x01, 0x09, 0x21];
            const values = [0x00, 0x01, 0x02];
            const indices = [0x00, 0x01, 0x02, interfaceIndex]; // Include the claimed interface index

            for (const requestType of requestTypes) {
                for (const recipient of recipients) {
                    for (const request of requests) {
                        for (const value of values) {
                            for (const index of indices) {
                              try {
                                await device.controlTransferOut({
                                  requestType: 'standard',
                                  recipient: 'other',
                                  request: 9,
                                  value: 0,
                                  index: 0 // Replace with the index that was successful in your tests
                                });
                                console.log('Successfully sent control transfer');
                              }  catch (error) {
                                console.error('Detailed error:', JSON.stringify(error, null, 2));
                              }
                            }
                        }
                    }
                }
            }
        }

        // Function to try all possible endpoints and send a test print
        // Function to try all possible endpoints and send a test print
        async function tryAllEndpointsAndSendTestPrint() {
            if (!device) {
                console.error('No device connected.');
                return;
            }

            console.log('Attempting to send a test print on all possible endpoints.');

            const zplData = '^XA^FO50,50^A0N,50,50^FDHellodddddd, World!^FS^XZ';
            const buffer = new TextEncoder().encode(zplData);

            const claimedInterface = device.configuration.interfaces[0];
            const endpoints = claimedInterface.alternate.endpoints;

            console.log(`Number of endpoints: ${endpoints.length}`);
          
            for (const endpoint of endpoints) {
                console.log(`Trying endpoint number: ${endpoint.endpointNumber}, direction: ${endpoint.direction}`);
                if (endpoint.direction === 'out') {
                    try {
                        const result = await new Promise((resolve, reject) => {
                            // Set a timeout to reject the promise if it takes too long
                            const timeout = setTimeout(() => {
                                console.log(`Timeout on endpoint ${endpoint.endpointNumber}`);
                                reject(new Error('Operation timed out'));
                            }, 5000); // 5 seconds

                            device.transferOut(endpoint.endpointNumber, buffer)
                                .then(result => {
                                    clearTimeout(timeout);
                                    console.log(`Successfully transferred out on endpoint ${endpoint.endpointNumber}.`);
                                    resolve(result);
                                })
                                .catch(err => {
                                    clearTimeout(timeout);
                                    console.log(`Error during transfer out on endpoint ${endpoint.endpointNumber}.`);
                                    reject(err);
                                });
                        });
                        console.log(`Transfer result: ${JSON.stringify(result)}`);
                        return;
                    } catch (err) {
                        console.error(`Failed to transfer out on endpoint ${endpoint.endpointNumber}: ${err}`);
                    }
                }
            }

            console.error('Failed to transfer out on all endpoints.');
        }



        
        // Function to send a test print
        async function connectDevice() {
            try {
                device = await navigator.usb.requestDevice({
                    filters: [{ vendorId: 0x0A5F, productId: 0x014C }]
                });

                await device.open();

                const { configIndex, interfaceIndex } = await tryAllInterfaces(device);

                await testControlTransfer(interfaceIndex); 

                // After successfully testing control transfer, attempt to send a test print.
                await tryAllEndpointsAndSendTestPrint(); // Use this instead of sendTestPrint()

            } catch (error) {
                console.error('An error occurred:', error);
            }
        }
        async function connectDevice() {
            try {
                device = await navigator.usb.requestDevice({
                    filters: [{ vendorId: 0x0A5F, productId: 0x014C }]
                });

                await device.open();

                const { configIndex, interfaceIndex } = await tryAllInterfaces(device);

                await testControlTransfer(interfaceIndex); 

                // After successfully testing control transfer, attempt to send a test print.
                await tryAllEndpointsAndSendTestPrint(); // Use this instead of sendTestPrint()

            } catch (error) {
                console.error('An error occurred:', error);
            }
        }
        document.getElementById('connect').addEventListener('click', connectDevice);
    </script>
</body>

</html>

What I’ve Tried:

I’ve looked for examples and guides that might shed light on how to interface with this specific Zebra model, but to no avail.
I’ve tried multiple endpoint numbers for transferOut.
I’ve checked for driver compatibility issues.
I’ve verified that the ZPL commands are correct.
Logs:

Claimed interface: 0 on configuration: 1
Successfully sent control transfer
Attempting to send a test print on all possible endpoints.
Number of endpoints: 2

Question:

What could be the reason for the printer not executing the print command despite claiming the interface and sending control transfers successfully? Is there something I’m missing in my code or approach? Could the driver change be causing any issues?

How can i use a database for my website made in HTML? [closed]

I have tried everything but i don’t know nothing seems to work, as in i can’t find enough tutorials or documentation online about it, can someone please very kindly guide me through how to use any database system (also i am hoping to publish this and deploy it) so i need a database that can work for when it is deployed too. I have tried doing SQLite Stuido but i don’t know what that was, it was quite confusing and it didn’t do anything to my VS code, i then started using something called XAMPP and got some PHP website up open, i created the database on there but i don’t know how i can get user data into it, i have already made a login/register form so i just need users to enter details and i need those details to go on a database where if they logout they can then log in if they have an account, please help me any way you can it would mean a lot. Thanks!

<div class="form-box">
            <div class="button-box">
                <div id="btn"></div>
                <button class="toggle-btn" onclick="login()">Login</button>
                <button class="toggle-btn" onclick="register()">Register</button>
            </div>
            <form id="login" class="input-group">
                <input type="text" class="input-field" placeholder="username" required>
                <input type="password" class="input-field" placeholder="password" required>
                <input type="checkbox" class="checkbox"><span>Remember Password?</span>
                <button type="submit" class="submit-btn"  id="login-btn">Login</button>
            </form>
            <form id="register" class="input-group" >
                <input type="text" name="username" class="input-field" placeholder="Username" required>
                <input type="email" name="email" class="input-field" placeholder="Email" required>
                <input type="password" name="password" class="input-field" placeholder="Password" required>
                <input type="checkbox" class="checkbox"><span>I agree to the terms & conditions</span>
                <button type="submit" class="submit-btn" id="register-btn">Register</button>
            </form>            
        </div>

change the state of a prop of a single componenet which is aslo in other components react.js

I have two components which are

<EnemyHand key={2} player_money={playerMoney} />
<EnemyHand key={3} player_money={playerMoney} />
const [playerMoney, setPlayerMoney] = useState(0);

function updatePlayerMoney() {
    setPlayerMoney(playerMoney + 10);
}

<button onClick={updatePlayerMoney}>money + 10</button>

Now i want to change the value of playerMoney from the the component with key=3

As an example: The default value = 0. Now the second Enemy gets 100 $. How can i achieve that?

The EnemyHand component looks like this:

<span className="money-display d-flex justify-content-center align-items-center">
          {player_money ? player_money : 0} <span> €</span>
</span>

I tried to access it by using the key attribute or by document.getElementByID but this doesnt work. Maybe i am wrong using the useState.

Lottie SVG duplicating after switching slide scenes

I have a slider created with 3 scenes, after viewing scene 1 then viewing scene 2 when you go back to scene 1 the old lottie svg that displays after the animation completes is still there.
How would I add a listener or rework this code to where it kills the event when going to a new slide.

I’m a entry level dev so excuse my js if it’s really basic,
I am hiding the other slides on click, this is through wordpress.

<script>

function seekButton() {
    
//lottie animation
var introToSeekv2 = lottie.loadAnimation({
container: document.getElementById('seek-container'),
renderer: 'svg',
loop: false,
autoplay: false,
path: '***links here',
});
    document.getElementById("solve-section").style.display = "none";
    document.getElementById("transform-section").style.display = "none";
    document.getElementById("seek-section").style.display = "block";
    
    // play lottie animation
    introToSeekv2.play();
}


function solveButton() {
    
var seekToSolve = lottie.loadAnimation({
container: document.getElementById('solve-container'),
renderer: 'svg',
loop: false,
autoplay: false,
path: '***links here',
});
    
    document.getElementById("seek-section").style.display = "none";
    document.getElementById("transform-section").style.display = "none";
    document.getElementById("solve-section").style.display = "block";
    
// play lottie animation
seekToSolve.play();
}


function transformButton() {
    
var solveToTransform = lottie.loadAnimation({
container: document.getElementById('transform-container'),
renderer: 'svg',
loop: false,
autoplay: false,
path: '***links here',
});
    document.getElementById("seek-section").style.display = "none";
    document.getElementById("solve-section").style.display = "none";
    document.getElementById("transform-section").style.display = "block";
    
    // play lottie animation
    solveToTransform.play();
}

Before

when you go to another slide then go back

Fileupload and ffmpeg processing in one step

This is how I handle a file upload in my nodeJS / nestJS application. The file gets directly stored in mongodb using GridFSBucket.

const upload = async (file): Promise<any> => {
    const res = await new Promise(async (resolve, reject) => {
        const { filename, mimetype, createReadStream } = await file

        // Write image to db
        const bucket = new GridFSBucket(this.db)
        const stream = createReadStream()
        const writeStream = bucket.openUploadStream(filename, { contentType: mimetype })
        writeStream.on('finish', async (file) => {
            // do some stuff
            resolve()
        })
        writeStream.on('error', (error) => {
            console.error(error)
            reject(error)
        })
        stream.on('error', (error) => writeStream.destroy(error))
        stream.pipe(writeStream)
    })
    return res
}

While this is working, I need to convert video files. Therefore I would like to use ffmpeg.

Something like (did not test this)

new Promise((resolve, reject) => {
    ffmpeg()
    .input(downloadStream)
    .inputFormat("mp4")
    .setFfprobePath(pathToFfprobe.path)
    .setFfmpegPath(pathToFfmpeg)
    .videoCodec("libx264")
    .audioCodec("libmp3lame")
    .on("error", (err) => {
        console.error(err);
    })
    .save("./??.mp4"); // -> to DB
});

Is it possible to do the upload, processing and db storage in one workflow? In my code I do the upload and db storing in one step, but I do not get it how to handle the video file processing…

React-big-calendar issue

I am using react big calendar library for learning purposes, anyway, it’s seems not to be working well. I have followed the proper steps using date-fns, but the issue is that the information is not being displayed, the year appears as “yyyy” and the days of the week remains shown as “cccc”, besides that is not displaying the time, and each respective number of the day either.

Here is my repo so you can take a look if you want to: https://github.com/K1mera/Calendar

Anyway, I am pase it my code here as well:

import { Calendar } from "react-big-calendar";
import "react-big-calendar/lib/css/react-big-calendar.css";

import { addHours } from "date-fns";
import { localizer, getMessages } from "../../helpers";

import { NavBar, CalendarEvent } from "../../calendar"


const events = [{
  title: 'bla',
  notes: 'dsfsafasdfs',
  start: new Date(),
  end: addHours( new Date(), +2),
  bgColor: '',
  user: {
    id: '22',
    name: 'Jhonny Se'
  }
}]


export const CalendarPage = () => {

  const getEventStyle = ( event, start, end, isSelected ) => {
    
  }

  return (
    <main className="bg-slate-50">
      <NavBar />
      <Calendar
        culture="en-US"
        localizer={ localizer }
        events={ events }
        startAccessor="start"
        endAccessor="end"
        style={{ height: "calc( 100vh - 80px )" }}
        messages={ getMessages() }
        eventPropGetter={ getEventStyle }
        components={{
          event: CalendarEvent,
        }}
      />
    </main>
  );
}

This is a helper I created to clean the code in my calendar component:

import { dateFnsLocalizer } from "react-big-calendar";

import { format, parse, startOfWeek, getDay } from "date-fns";
import  enUS  from "date-fns/locale/en-US";

const locales = {
  "en-US": enUS,
};

export const localizer = dateFnsLocalizer({
  format,
  parse,
  startOfWeek,
  getDay,
  locales,
});


Appreciate the help very much!!

I tried looking for previous questions, bot none of them were related with my issue. Chat gpt recommeded me to clean cache, and remove the date-fns, package, but nopthng have worked.

chrome.scripting.executeScript not working

I try to make clickObject funciton to work, but i have no console.log inside the function and it seems like function not been called at all

           function clickObject(selector) {
              console.log("Selector: ", selector)
              const elementToClick = document.querySelector(selector);
              console.log(elementToClick)
              if (elementToClick) {
                elementToClick.click();
              }
            }
 if (lastEntry && lastEntry.name === 'OBJECT CLICKED' && browserType !== '') {
              await sendTypeToServer(lastIndex, browserType);
              if (lastEntry.action !== "") {
                chrome.windows.getCurrent({ populate: true }, (currentWindow) => {
                  const activeTab = currentWindow.tabs.find((tab) => tab.active);
                  console.log(activeTab.id)
                  const selector = lastEntry.action
                  console.log("Selector: ", selector)
                  if (activeTab) {
                    chrome.scripting.executeScript({
                      target: { tabId: activeTab.id },
                      func: clickObject,
                      args: [selector],
                    }).then(() => console.log("executed script"));
                  }
                });
              }
            }

I can see console.logs here:

console.log(activeTab.id)
const selector = lastEntry.action
console.log("Selector: ", selector)

And here:

console.log("executed script")

but function is still not working. How to fix this?

How do I configure .vue files import from .ts file in vim?

I have encountered a problem trying to configure NeoVim to work with Vue. On a freshly installed LunarVim instance I’m trying to work with .ts files, but there is an error with importing .vue file. My treesitter has configuration for vue and typescript. Also tsserver and volar LSPs work just fine. There is autocompletion and everything. But in imports there are errors: Cannot find module './App.vue' or its corresponding type declarations. And yes, I’m sure that there is App.vue file, the problem is only with .vue files.enter image description here

I’ve tried reinstalling tsserver and volar, but it didn’t help.

Vuetify v-stepper not using 100% width and not removing the elevation

I’d like to use the v-stepper component to make a progress bar on top of the screen and I’d copy the same content along the multi-screens that made the flow. I am using the sample from the Vuetify documentation.

Issues:

  1. Even I setting the property elevation="0" the component keeps elevated and seems to be over a card.
  2. The component doesn’t use 100% of the width available, it looks to be shrunken.
  3. The labels aren’t shown.


    <template>
        <div style="position: relative">
            <div>
                <v-stepper elevation="0" alt-labels>
                    <v-stepper-header>
                        <v-stepper-step step="1">
                            Ad unit details
                        </v-stepper-step>
    
                        <v-divider></v-divider>
    
                        <v-stepper-step step="2">
                            Ad sizes
                        </v-stepper-step>
    
                        <v-divider></v-divider>
    
                        <v-stepper-step step="3">
                            Ad templates
                        </v-stepper-step>
    
                        <v-divider></v-divider>
    
                        <v-stepper-step step="4">
                            Ad templates
                        </v-stepper-step>
                    </v-stepper-header>
                </v-stepper>
            </div>
        </div>
   </template>

Current behavior:

enter image description here

error on app.use(foo) returning : app.use() requires a middleware function’)

List item

so i am trying to implement a middleware function that checks the validity of a sessionid and callsnext()when the session is valid . i have created a function called checkSession() that handles the processing of the session id . however when i call it in the app.js file it returns an error of
this is my code for the checkSession function :

var checkSession = function  (req, res, next) {


  if (req.cookies.session != null && req.cookies.session !== "") {
    dbconfig
      .findSession(req.cookies.session)
      .then((result) => {
        if (result.length == 0) {
          console.log("Unrecognizable session id !!!");
          res.status(404).send("ERROR: Can't recognize session id");
        } else {
          next();
        }
      })
      .catch((err) => {
        console.error("Database error:", err);
        res.status(500).json({ error: "DB error " + err });
      });
  } else {
    next();
    res.redirect('/login');
  }
}

this is where i call in the app.js

const express = require("express");
const app = express();
const cookieParser = require("cookie-parser");

const userRouter=require("./user_router");
app.use(express.json());

app.use(cookieParser());

app.use(checkSession);
app.use("/user",userRouter);

this is what i get throw new TypeError('app.use() requires a middleware function')

Need some guidance in javascript to implement/run python

our team recently took part in SIH’23 problem statement id: 1369.

We built a website using html, css, and js along with mongoDB. I wrote a Python script to detect plagiarism (a similarity % counter), but I’m lost on how to implement it while someone uploads a project to our site and how to get data from that python file.

Please assist me in getting out of this if you know anything.

I tried several methods like pyscript, ajax but that doesn’t helped me from this situation.

Prevent multiple submission on form submit (After validation)

The issue is form submitting multiple times on multiple click event. Also, submit button checks validation for input and then submitting all information. If someone clicked multiple times submit button after validation is done it submit data entry multiple so trying to prevent submit button on form submission.

  <form class="info" method="post" id="form1">
     <input class="submitBtn" type="submit" value="Submit">
   </form>  



$(document).unbind('ready');
   $('.submitBtn').on('click', function(e){
       $('.submitBtn').addClass('disabled');
         console.log('clicked');
         var isValid = true;
         $('.email, .phone, #data').each(function(){
         var inputEl = $(this);
           if (inputEl.val() == ""){
             isValid = false;
             $('.submitBtn').prop('disabled', true);
           } else {
              // code action
        }
     });

Side By Side Arrangement of Boxes – HTML/CSS/JS

How can I place the two cards side by side, where they are of equal width and adjust accordingly with the width of the screen?

I tried wrapping the cards in a separate div and adding display: flex; property; however, it makes the cards small and doesn’t make them fit the width of the screen.

I have the following code:

// Select all elements with class 'tilelabel' within the 'box' containers

const tileLabels = document.querySelectorAll('.box .tilelabel');

tileLabels.forEach((label) => {

  label.addEventListener('click', function() {

    const parent = this.closest('.box'); // Find the closest parent with class 'box'

    parent.classList.toggle('expanded');

    const plus = parent.querySelector('.plus');

    plus.style.transform = parent.classList.contains('expanded') ? 'rotate(45deg)' : 'rotate(0)';

  });

});

const toggleChild = (e) => {

  if (e.currentTarget == e.target) {

    const el = e.target;

    el.classList.toggle('active');

  }

};

const level2 = document.querySelectorAll('.hidden-text ul li:has(ul)');

level2.forEach((li) => li.addEventListener('click', toggleChild));
.tilecontainer {
  padding: 5px;
  font-size: 35px;
}

.box {
  background-color: #0051a5;
  padding-right: 1em;
  padding-top: 1em;
  border-radius: 1em;
  display: grid;
  grid-template-rows: 1fr auto;
  grid-template-columns: auto 1em;
  grid-template-areas: "sample plus" "extratext extratext";
}

.plus {
  grid-area: plus;
  background: linear-gradient(#0051a5 0 0), linear-gradient(#0051a5 0 0), #fff;
  background-position: center;
  background-size: 60% 2.5px, 2.5px 60%;
  background-repeat: no-repeat;
  transition: transform 0.3s ease;
}

.sign {
  border-radius: 50%;
  width: 1em;
  height: 1em;
  margin-right: 1em;
}

.tilelabel {
  grid-area: sample;
  font-family: 'PT Sans Narrow', sans-serif;
  font-size: 1em;
  text-transform: uppercase;
  cursor: pointer;
  font-weight: 600;
  color: #fff;
  padding-left: 1em;
  height: 2em;
}

.tileaccent {
  color: #FFC72C;
}

.hidden-text {
  grid-area: extratext;
  display: none;
  font-family: 'PT Sans Narrow', sans-serif;
  font-size: 0.75em;
  background-color: #fff;
  color: #000;
  margin: 1em;
  padding-top: 0.5em;
  padding-left: 1em;
}

.expanded>.hidden-text {
  display: block;
  animation: fade-in 1s;
}

@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes fade-out {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}

.hidden-text ul li ul {
  display: none;
}

.hidden-text ul li.active ul {
  display: block;
}

li .plus {
  transform: rotate(0);
}

li.active .plus {
  transform: rotate(45deg);
}


/*changes the cursor to a pointer for the list items that have a child ul*/

.hidden-text ul li:has(ul) .plus {
  float: right
}

.hidden-text ul li:has(ul) {
  cursor: pointer;
}
<link rel="preconnect" href="https://fonts.googleapis.com">

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<link href="https://fonts.googleapis.com/css2?family=PT+Sans+Narrow:wght@400;700&display=swap" rel="stylesheet">

<div class="tilecontainer">
  <div class="box">
    <div class="plus sign"></div>
    <div class="tilelabel">
      Sample <span class="tileaccent">Text</span>
    </div>
    <div class="hidden-text">
      <ul>
        <li>Sample Text</li>
        <li>Dropdown Text
          <div class="plus sign"></div>
          <ul>
            <li>More Text</li>
          </ul>
        </li>
        <li>Sample Text</li>
      </ul>
    </div>
  </div>
</div>

<div class="tilecontainer">
  <div class="box">
    <div class="plus sign"></div>
    <div class="tilelabel">
      Sample <span class="tileaccent">Text</span>
    </div>
    <div class="hidden-text">
      <ul>
        <li>Sample Text</li>
        <li>Dropdown Text
          <div class="plus sign"></div>
          <ul>
            <li>More Text</li>
          </ul>
        </li>
        <li>Sample Text</li>
      </ul>
    </div>
  </div>
</div>