A Grid slowing the moving element on JS canvas

I’m drawing a grid on a JavaScript canvas on this canvas I also have a moving element so the Grid can be on/off with a button all is well apart from the speed of the moving element when grid is on it becomes extremely slow. I’m not really sure where am I going wrong. Can someone please give me some help. Thank you

HTML

<div>
    <input type=button id="up" onClick=move_img(id); value='Up'>
    <input type=button id="down"  onClick=move_img(id); value='Down'>
    <input type=button id="left"  onClick=move_img(id); value='Left'>
    <input type=button id="right"  onClick=move_img(id); value='Right'>
    <input type=button id="stop"  onClick=move_img(id); value='Stop'>
    <input type=button id="grid"  onClick=gridOn(); value='Grid'>
    <br>
    <p></p>
</div>

JavaScript

    var isGrid = new Boolean(false);
    var canvas = document.getElementById("canvas");
    b = canvas.getContext("2d");

    var width = canvas.width = 600;
    var height = canvas.height = 400;
    
    document.body.appendChild(canvas);

    b.fillStyle = "#F0F8FF";
    b.fillRect(0, 0, canvas.width, canvas.height);

    var posX = 10;
    posY = 10;
    x = 0;
    y = 0;
    
    setInterval(function () {
   
        b.fillStyle = "#F0F8FF";
        b.fillRect(0, 0, width, height);
        posX += x;
        posY += y;

        if (posX > width - 20) {
            x = 0;
            posX = width - 20;
        }
        if (posX < 0) {
            x = 0;
            posX = 0;
        }
        if (posY > height - 20) {
            y = 0;
            posY = height - 20;
        }
        if (posY < 0) {
            y = 0;
            posY = 0;
        }

    b.fillStyle = "red";
    b.fillRect(posX, posY, 20, 20);
    
    /**  Grid ***/
    if(isGrid){
        drawGrid();
    }
    /**************/
    
    }, 5)
   
    function move_img(id) {
        switch (id) {
        case "down":
            moveDown();
            break;
        case "up":
            moveUp();
            break;
        case "left":
            moveLeft();
            break;
        case "right":
            moveRight();
            break;
        case "stop":
            moveStop();
            break;
        }
    } 
    
    function moveDown(){
        x = 0;
        y = 1;
    }
    function moveUp(){
        x = 0;
        y = -1;
    }
    function moveLeft(){
        x = -1;
        y = 0;
    }
    function moveRight(){
        x = 1;
        y = 0;
    }
    function moveStop(){
        x = 0;
        y = 0;
    }
    function gridOn() {
        if(isGrid){
            isGrid = false;
        }else{
            isGrid = true;
        }
    } 
    
    function drawGrid(){    
        b.strokeStyle = 'black';
        b.lineWidth = 0.5;
        
        for(i = 0; i<= 600; i=i+40){
            b.moveTo(i, 0);
            b.lineTo(i, 600);
            b.stroke();
        }
        for(j = 0; j<= 600; j=j+40){
            b.moveTo(0, j);
            b.lineTo(600, j);
            b.stroke();
        }
    }

Скрипт меняет имя отправителя на “[email protected]”. Но получатель получает письмо без аватарки (иконки). Как разрешить проблему? [closed]

Функция отправляет  письмо клиенту, заполнившему форму, на указанный в форме Email.

`function sendEmailToClient() {

Текущая Гугл Таблица записана в переменную:

var ss= SpreadsheetApp.getActiveSpreadsheet ();

Лист текущей таблицы с именем "Ответы на форму (1)", в который загружаются ответы из формы, записан в переменную:

var listAnswers = ss.getSheetByName (“Ответы на форму (1)”);

Получен email клиента из ячейки с адресом: последняя строка, 4 ряд, – и записан в переменную:

var clientEmail = listAnswers.getRange (listAnswers.getLastRow (),2).getValue ();

  var body =  "Здравствуйте!</br>"+


  "Благодарю за заказ!</br>"+


  "В ближайшее время я с Вами свяжусь.";


Отправлено письмо клиенту (отправителем будет тот, кто запускает скрипт):


Для отправки используется функция sendEmail, метод класса MailApp


  MailApp.sendEmail(clientEmail, "Ваша заявка получена", "",{


  htmlBody:body,


  name: "[email protected]"


  }); 

}`

Receiving encoded JSON response from API call

I’m sending a POST request to a REST API endpoint, and am receiving JSON response back filled with question mark diamonds and other unicode characters. But when I test API on Postman, I am correctly receiving JSON response. Here is my code for calling API:

xhr.open(method,url);
xhr.setRequestHeader("Authorization", "Bearer" + " " + accessToken);
xhr.setRequestHeader("Content-Type", "application/json");

xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
     console.log(xhr.status);
     console.log(xhr.responseText);
  }};
xhr.send(JSON.stringify(data));

The response I’m getting is like this: ��}�r�8���|ʧj���t���<Pe3�H���8�灖(��2�!��=S]�?䜟�_r��I�”

random images change with every refresh made

so I have linked two images in HTML from the folder: images/ however in javascript I’m trying to make these images for the dice to randomly change after every time refreshes.
I’m not sure why isn’t working

here is the HTML code

<div class="container">
  <h1>Refresh Me</h1>

  <div class="dice">
    <p>Player 1</p>
    <img class="img1" src="images/dice6.png">
  </div>

  <div class="dice">
    <p>Player 2</p>
    <img class="img2" src="images/dice6.png">
  </div>

    </div>

and here is the js code

imgArray = [
"dice1.png",
"dice2.png",
"dice3.png",
"dice4.png",
"dice5.png",
"dice6.png"
]


function images(){
  // the random images
  var randomNumber1 = Math.floor(Math.random() * imgArray.length);
  // get images at randomNumber1
  selectedImages = imgArray[randomNumber1]
  // display the images()
  document.getElementByClassName("img1").src = "./images/${selectedImages}"

}

Note: I’m a new learner still trying to understand javascript. thank you for your humble reply and help. and if isn’t too much to make the explanation simple so I could follow.

boothstrap from-control input bigger

I’m using boothstrap form-control for my project,
and I want the text area to be bigger for the user to add his text, I don’t want it to be just one line.
Of course I tried to give the input an id and play with his height and width in css.
it doesn’t work. can you please help me?
I need to use an input so putting textare type is not possible as well.
that’s the code from the html:

      />`enter code here`
<div id="formDiv">
  <div class="p-3" id="inputsDiv">
    <div class="input-group mb-3 pt-4" id="inputDiv">
      <span class="input-group-text">Task Info:</span>
      <input
        type="text"
        id="taskInfo"
        class="form-control"
        placeholder="Task Info:"
        aria-label="Task Info:"
        aria-describedby="basic-addon1"
      />
    </div>
    </div>

Read and store content of file React Native

I know this is probably one of the dumbest question but i can’t seem to find the solution, I simply want to read the content of a file and store it in a variable without using any external library. How do we do that in React Native ? Thank you.

if you need more info about what i’m exactly trying to do: I want to store this SVG file’s content to return it in a component, and using ” import Bla from “./bla.svg” ” is working on android and ios only and not web (I’m using expo) and i know that returning the content of the svg (ex: <svg … /> ) works on web.

How do I confirm user permission for mediaDevices correctly?

It’s safe to say the snippet below will error any-time there’s a problem but between all browsers, that DOMExecution is a different response. I could go ahead and collect them all and be compliant this way but are there other ways?

This is what I use to soft-check:

try {
  await navigator.mediaDevices.getUserMedia({
    audio: true,
    video: true
  });
} catch (e) {
  Message.receive.public(`Media Error: ${e.message}.`);
}

I would return and call it quits if there’s a catch, but during media-selection there’s possibly 1 out of many devices in use and that will throw an error and with my app that won’t matter they can try the device any ways to see if it produces or not.

Cypress: Read from file and upload it again

I am trying to go through an number of tab-separated words in a file and check if the key is in the structure (json):
The json object looks like this:

[
  {
    "Name" : "Cypress Upload 1", 
    "Description" : "Cypress upload descrition 1"
  },
  {
    "Name" : "Cypress Upload 2",
    "Description" : "Cypress upload descrition 2"
  }
]

The code looks like this:

cy.readFile(uploadPathFile).then((jData) => {
      cy.log(jData[0].Name);
      const objLn = Object.keys(jData).length;
      cy.get('@LASTDOWNLOADEDFILE').then((downFile) => {
        cy.readFile(downFile as unknown as string).then((txt) => {
          const lines = (txt as string).split('t');
          for (let o = 0; o < objLn; o++) {
            for (let i = 0; i < lines.length; i++) {
              cy.log(`Key ${lines[i]}  ${jData[o].Name}`);
              if (jData[o].hasOwnProperty(lines[i])) {
                cy.log(`Found Key ${lines[i]}`);
              }
            }
          }
        });
      });
    });

The first log: gives me the correct value of the Name key at position 0

18 log  Cypress Upload 1

The second log lists me all the names from the tab separated file:

...
21 log Key "ID" Cypress Upload 1
22 log Key "Name" Cypress Upload 1
23 log Key "Synonym 1" Cypress Upload 1
...

But it does not show the key found even though “Name” is there and jData[0].Name gives a value! Why is the line with “if (jData[o].hasOwnProperty(lines[i])) {” never true. I also tried “if (jData[o][lines[i]]) {

Luxon: get an array of offsets and untils (like we can in moment-timezone)

With the moment-timezone library I’m currently just retrieving the raw information for a particular timezone and then using that directly in my downstream code.

const zone = moment.tz.zone('Europe/London');

This is an object containing the following:

{
    "name":"Europe/London",
    "abbrs":["GMT","BST","GMT","BST", ...],
    "untils":[-1691964000000,-1680472800000,-1664143200000,-1650146400000, ...],
    "offsets":[0,-60,0,-60,0, ...],
    "population":10000000
}

The offsets and untils arrays are really all I need from moment… the rest I handle myself “manually” in the downstream code using the offsets and untils arrays (or actually just a small subset thereof)… without having to rely on moment as a dependency.

Is there an equivalent way to extract offsets and untils arrays in the luxon library?

Set custom dataTransfer with react-dnd

I am using the react-dnd library to handle drag and drop in React (with the multi back-end to have support for both desktop and mobile platforms) . I’m also using the Ace editor in my app.

The Ace editor accepts dragging and dropping text into the editor as long as the dataTransfer object of the event has {Text: thetexttopaste}.

I would like to generate this dataTransfer for the draggable items that I already handle with react-dnd. However, I can’t find a way to set this dataTransfer data, nor to access the native event.

Here’s the code where I declare my react-dnd draggable items:

export function AvailableBlock(props: AvailableBlockProps) {
    const {block} = props;

    const [collected, drag, dragPreview] = useDrag(() => ({
        type: 'available-block',
        item: {type: 'Text'}
    }))

    return (
        <div className="task-available-block" ref={drag}>
            <div className="task-available-block-name">
                {block.caption}
            </div>
        </div>
    );
}

Is there a way to do it?

How to prevent Chrome and Brave browsers from issuing a Browser notification after javascript removes an item from sessionStorage

As far as I can tell this browser behaviour is new.

I have searched using Google, Bing and Brave Search and can find no trace of the behaviour being documented.

When javascript computationally removes an item from sessionStorage, the browser drops a notification:

[Site] says:

[ItemName] Item removed from sessionStorage

User feedback reveals this notification hinders seamless UX.

One user reported waiting for several minutes before deleting the tab – she didn’t understand the message and she didn’t realise that she needed to press the “OK” button in the bottom right hand corner of the notification to make it go away and enable the page to finish loading.


Example:

sessionStorage.setItem('Test Key', 'Test Value');

setTimeout(() => sessionStorage.removeItem('Test Key'), 300);

/*

It doesn't look like StackSnippets will allow the javascript above.

*/

Is there a way to prevent the browser issuing a notification when javascript removes an item from sessionStorage ?


N.B. This is almost certainly a Blink issue.

I’ve noted that Firefox does not behave in the same manner as Chrome and Brave.

How to show wishlist items after adding items to wishlist without page refresh using ajax in Laravel?

I try to show the item in product page that it added to wishlist without reload but I can only remove wishlsit items in product page without reload using ajax ,so I can’t show items without reload and I want to show items that after adding items to wishlist without page refresh.

Product Page Blade

      @Extends('layouts.base')

    @section('content')

         @foreach($car_lists as $car_list)
           
          <li class="item odd cars_data">

        <div class="product-image"> <a href="{{route('car.detail', ['id' => $car_list->id])}}" title="">
    
    <!-- Begin responsive list slider  -->

           <div class="w-m-280px mb-12px mt-10px">

    <div class="list-slide-container">

    <div class="list-slide-items aspect-ratio-4-3 w-100">

    <div class="slide-items">


     @php
                              
   $images = explode('|', $car_list->images);

    @endphp

 @if($car_list->images)

@for($i = 0; $i < 4; $i++)
<div class="slide-items-list ">
    <div class="slide-items-image-wrapper">

    <img class="slide-items-image " src="{{asset('images')}}/{{$images[$i]}}" alt=""></div>
    <div class="slide-items-button"><i class="fas fa-circle"></i></div>

</div>

@endfor

@else

  <div class="slide-items-list ">
    <div class="slide-items-image-wrapper  ">

    <img class="slide-items-image" src="{{asset('images/car.png')}}" alt=""></div>
    <div class="slide-items-button"><i class="fas fa-circle"></i></div>

</div>

@endif


           </div>
       </div>
      </div>
    </div>

       </a> 


       </div>

          <div class="ratings">
            <div class="rating-box">
              <div style="width:50%" class="rating"></div>
            </div>
          </div>



          <div class="desc std">

            <p>There's no text!</p>

           
          </div>

          <div class="price-box">
           <div class="price-display"  style=" margin-left:2rem; margin-top: 3rem; font-size: 20px;  font-weight: 700; ">
            <hr>

              <span class="result_two"> {{number_format($car_list->price)}}</span> 

             <hr>
        </div>
          </div>
          
          <div class="actions action-button">
                    
         **<!-- add item to wishlist -->**

        @auth

        @php 

        $countWishlist = 0;

        @endphp


        @php

        $countWishlist = AppModelsWhislist::countWishlist($car_list['id'])

        @endphp
           

         <input type="hidden" name="car_id"  class="car_id" value="{{$car_list->id}}">
         
        
        <button class="button ajx-cart addwishlist  addToWhislist"  value="{{$car_list->id}}" type="button" style="background-color: lightgrey; cursor: pointer;">

            @if($countWishlist > 0)

               <i class="fas fa-heart"></i>

            @else

               <i class="far fa-heart"></i>
         
            @endif
                
            
              </button>

            @endauth
         
            <!-- end -->

        </div>
      </li>
      @endforeach

            <ul class="pagination">
               

{!! $car_lists->links('pagination') !!}

            </ul>
      

  <aside class="col-left sidebar col-sm-3 col-xs-12 col-sm-pull-9 wow bounceInUp animated"> 
 
      **<!-- This is my wishlist in product page that I' can't show items there without page refresh -->**

       @auth

       @php
      $wishlist = AppModelsWhislist::where('user_id', auth()->user()->id)- 
  >orderBy('created_at','DESC')->paginate(3, ['*'], 'wishlist_favorites');
    
    @endphp
    
    <div class="block block-list block-cart">
      <div class="block-title">My Favorites </div>
      <div class="block-content">
        <div class="summary">

          <p class="amount"><a href="#"> <span class="wishlist-count">0</span></a> </p>

         
        </div>
        @if($wishlist->count() > 0)
        <p class="block-subtitle">new favorites</p>
        @else
          <p class="block-subtitle"><img src="{{asset('assets/images/favourite.png')}}" width="30px"> No favorites! </p>
        @endif
        <ul id="cart-sidebar" class="mini-products-list">
          @if($wishlist->count() > 0)
          @foreach($wishlist as $item) 
          <li class="item wishlist_data">
            <div class="item-inner"> <a href="{{route('car.detail', ['id' => $item->cars->id])}}" class="product-image">

                @php
                              
             $wish_images = explode('|', $item->cars->images);

              @endphp

              @if($item->cars->images)
              @for($i = 0; $i < 1; $i++)
              <img src="{{asset('asset/images')}}/{{$wish_images[$i]}}" width="80" 
           alt="product">
              @endfor
              @else
                <img src="{{asset('assets/images/sports-car.png')}}" width="80" alt="product">
              @endif

            </a>
              <div class="product-details">
                 <input type="hidden" class="car_id" value="{{$item->cars->id}}">
                <div class="access"> <a href="#" class="btn-remove1 remove-whislist-item">Remove</a> 
                <a href="#" title="Edit item" class="btn-edit">
                <i class="icon-pencil"></i><span class="hidden">Edit item</span></a> </div>
                <!--access--> 
                
               <div style="margin-left: 10px;">
                <p class="product-name"><a href="{{route('car.detail', ['id' => $item->cars->id])}}"> 
               <span class="block-span-price">{{$item->cars->manufacturer}} {{$item->cars->model}} </span> 
                 </a></p>
                <hr>

                  <span class="price"><span class="block-span-price"> 
                  {{number_format($item->cars->price)}} 

                  </span>
                  </div>
              </div>
              <!--product-details-bottoms--> 
            </div>
          </li>

         @endforeach

            {{$wishlist->links('pagination2')}}
          @endif

         
        </ul>
      </div>
    </div>
    @endauth 

   <!-- end -->


  </aside>

@endsection

This is my ajax code below that I want to show items using ajax but how should I do? I tried many times to fix it but I couldn’t.

Ajax code

       $(document).ready(function () {

loadwishlist();

$('.addToWhislist').click(function (e){
    e.preventDefault();

    $.ajaxSetup({

        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }

    });

    var Click = $(this);
    var car_id = $(Click).closest('.cars_data').find('.car_id').val();

     var cars_id = $(Click).closest('.wishlist_data').find('.car_id').val();

    $.ajax({

        type: "POST",
        url: '/add-to-whislist',
        data: {
            'car_id': car_id,
            'cars_id': cars_id,
            
        },

        success: function(response){

            if (response.action == 'add') {


                $(Click).closest('.cars_data').find('.addwishlist').html('<i class="fas fa-heart"></i>');

                loadwishlist();

            }
            else if (response.action == 'remove') {

                $(Click).closest('.cars_data').find('.addwishlist').html('<i class="far fa-heart"></i>');
                loadwishlist();
            }
        
            loadwishlist();
            
        }

    });



});



function loadwishlist()
{
    $.ajax({

        type: "GET",
        url: '/load-cart-data',
        success: function(response){
            $('.wishlist-count').html('');
            $('.wishlist-count').html(response.count);
            
            
        }

    });
}


    $('.remove-whislist-item').click(function (e){
    e.preventDefault();

    $.ajaxSetup({

        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }

    });
    
    var Clickedthis = $(this);
    var car_id = $(Clickedthis).closest('.wishlist_data').find('.car_id').val();

    $.ajax({

        type: "POST",
        url: '/delete-whislist-item',
        data: {
            'car_id': car_id,
        },
        success: function(response){

            $(Clickedthis).closest('.wishlist_data').remove();
            loadwishlist();
        }

    });



});




});

Wishlist Controller

  <?php

namespace AppHttpControllerscontents;

  use AppHttpControllersController;
  use IlluminateHttpRequest;
  use AppModelsWhislist;
   use IlluminateSupportFacadesAuth;
   use AppModelsCar;
    use AppModelsUser;

    class WishlistController extends Controller
    {

    public function add()
     {

    if (Auth::check()) {

        $car_id = request()->car_id;
        
       
       
        $wislist = Whislist::where('user_id',Auth::id())->get()->first();

        if (Whislist::where('user_id',Auth::id())->where('car_id', $car_id)->exists()) {
            $whish = Whislist::where('car_id', $car_id)->where('user_id',Auth::id())->first();
            $whish->delete();

              return response()->json(['action' => 'remove', 'status' => 'removed!']);
        }
     
        else{
             

           $whish = new Whislist();
        
             
             $whish->car_id = $car_id;
            $whish->user_id = Auth::id();
            $whish->save();
                 
           return response()->json(['action' => 'add','status' => 'saved']);
        
        }

    }

    
    else{
        return response()->json(['status' => "Login To Continue"]);
    }

    }

      public function deleteItem()
     {
    if (Auth::check()) {
        $cars_id = request()->input('car_id');
        if (Whislist::where('car_id',$cars_id)->where('user_id',Auth::id())->exists()) {
            $whish = Whislist::where('car_id',$cars_id)->where('user_id',Auth::id())->first();
            $whish->delete();

            return response()->json(['status' => "removed!"]);
        }
             }
    
    else{
        return response()->json(['status' => "Login To Continue"]);
    }
}





  
public function countWislist()
{
    $countwislist = Whislist::where('user_id',Auth::id())->count();
    return response()->json(['count' => $countwislist]);
}
 


}

TextInput centered align vertically on iOS

Is there any way to center align the text inside the TextInput vertically on iOS? (not the TextInput itself, but its text)

The TextInput has multiline set to true.

I have tried using “textAlignVertical: center”, but it doesn’t work on iOS. I also need the input’s height to be dynamic.

(Please refer to my code below from when reading the section below)

What I’m trying to achieve is prevent the user from seeing any changes in the UI when the Text component transforms into a TextInput.

I’m not sure if my approach of center aligning the text vertically inside the TextInput will work as I expected. Besides, I can’t even find a way to achieve that. So, I’m welcome to hear any new creative ideas to approach this problem.

function TextBlock() {
  const [editing, setEditing] = React.useState(false)
  const [text, setText] = React.useState('')
  const props = {}
  if(!editing) props.onPress = () => setEditing(true)
  return (
    <Pressable {...props}>
      {
        editing ? (
          <TextInput style={styles.text} multiline={true} onBlur={() => setEditing(false)} value={text} onChangeText={t => setText(t)}/>
        ) : (
          <Text style={styles.text}>{text}</Text>
        )
      }
    </Pressable>
  )
}
const styles = StyleSheet.create({
  text: {
    fontSize: 14,
    paddingTop: 0,
    paddingBottom: 0,
    paddingRight: 0,
    paddingLeft: 0,
    lineHeight: 20,
    marginBottom: 0,
    marginTop: 0,
    marginLeft: 0,
    marginRight: 0,
    textAlignVertical: 'center',
  }
})