• Как при наведении на svg появлялся текст?

    @postya
    data:() ({
    hasText: false
    })
    
    meathods: {
    showText() {
    this.hasText = true
    }
    
    hideText() {
    this.hasText = false
    }
    }


    <div class="flag flag--ru" @mouseover="showText" @mouseleave="hideText">
          <svg>
             <use xlink:href="@/assets/svg/svg.svg#flag-ru"></use>
           </svg>
    </div>
    
    <p v-if="hasText">any text</p>
    Ответ написан
    Комментировать
  • Как запретить выводить определенные элементы через VUE если в bitrix установлен флажок поля "нет"?

    @postya
    Тебе не нужно запрещать, тебе нужно вывести только те жлементы, которые соотвесттвуют значению в поле из бэкенда

    <div class="apartment-search-result" v-for="(item, index) in showedItems" :key="`apart_${item.id}`">
    <p v-if="item.sold === 'yes'"> Показывает толкьо проданные</p>
    </div>


    вот так не обьязательно писать
    :key="`apart_${item.id}`"

    можно просто
    :key="item.id"
    Ответ написан
    Комментировать
  • Как правильно получать данные с базы?

    @postya
    Можно и в одной таблице вывести все данные, если тебе удобно так. faqData выглоядит как объект, а не массив с данными, как выглядит массив который нужно получить?
    Ответ написан
  • Как сделать меню, как на официальном сайте vue js?

    @postya
    В боком меню не теги H, а теги li в которых находится тег a. Можешь проверить это в инспекторе.
    Каждый элемент в списке в боковом меню это router link.
    У router link есть два класса
    .router-link-active и .router-link-exact-active

    ты можешь переопределить стили для активного линка либо в конкретном компоненте(например компонент бокового меню) либо в общем файле, где содержатся глобальные стили

    .router-link-exact-active {
    color: red;
    }


    Пример с подзаголовками:
    сделай боковое меню отдельным компонентом. Создай там переменную, в которую будешь назначать текущий роут. Показывай/ скрывай нужные блоки в зависимости от значения этой переменной
    размести нужные позаголовки в блоке, и в этом блоке добавь v-if
    Блок с подзаголовками будет открываться в закисимости от условий, которые прописаны в v-if

    Codesandbox

    Только вместо div у тебя будет router link
    Ответ написан
  • Почему не приходят уведомления от браузера?

    @postya Автор вопроса
    Проблема была в отключенных уведомлениях в системе Windows (Настройки/Уведомления и действия/Уведомления - отключить)
    Ответ написан
    Комментировать
  • Как убрать border который появляется на короткое кремя в кнопке?

    @postya Автор вопроса
    Всем спасибо за ответы, но дело было в свойстве color. Не знаю даже почему o_0

    .btn-edit {
      color: transparent;
      background-color: $dark-gray;
      outline: none !important;
      border: none;
      border-radius: 4px;
      cursor: pointer;
      display: flex;
      justify-content: center;
      align-items: center;
      height: rem(40px);
      padding: 0 0.3em;
    }
    Ответ написан
    Комментировать
  • Как лучше развернуть и построить MEVN приложение с Nuxt?

    @postya
    У тебя VPS от Beget? если да, то можешь удаленно подключиться к серверу и установить на виртуальной машине Beget Mongo DB, если не VPS, а просто предоставленные отдельно услуги, то попроси,чтобы тебе установили MOngo DB и дали к ней доступ.
    У тебя монолитное приложение на Nuxt?
    Nuxt - Это фронт, который по большей части делается отдельно от бэка. Получение и отправление данных в БД осуществляется в Nuxt через fetch, либо библиотекой можно, например axios.
    Ответ написан
    Комментировать
  • Почему не приминяется кастомный шрифт во Vue с Sass?

    @postya Автор вопроса
    В файле fonts.scss в строке src был неправилньо указан format, сделать нужно вот так:
    src: url("~@/assets/fonts/Modak/Modak-Regular.ttf") format("truetype");
    Ответ написан
    Комментировать
  • Как спарсить массив дат для русского языка в Javascript?

    @postya Автор вопроса
    Сделал это вот так:

    let newDates = [];
    
    let originalDates = ["2020-11-06", "2020-07-15", "2020-12-05"]
    
    parseDate() {
          this.originalDates.forEach(item => {
            let date = new Date(item);
    
            let formatter = new Intl.DateTimeFormat("ru", {
              year: "numeric",
              month: "long",
              day: "numeric"
            });
            let newDate = formatter.format(date);
            newDates.push(newDate);
          });
          console.log(newDates);
        }
    Ответ написан
    Комментировать
  • Почему vuelidate не может определить form?

    @postya Автор вопроса
    Оказалось,что блок validations был не в том скоупе)
    Полная валидация выглядит так:

    <template>
      <div class="login">
        <div class="container">
          <h1>Login</h1>
          <form class="form" @submit.prevent="login">
            <input
              type="text"
              placeholder="username"
              v-model.trim="form.username"
              :class="$v.form.username.$error ? 'invalid-feedback' : ''"
              class="input"
            />
            <span :class="$v.form.username.$error ? 'showError' : 'hideError'"
              >Username is required</span
            >
            <input
              type="password"
              placeholder="password"
              v-model.trim="form.password"
              :class="$v.form.password.$error ? 'invalid-feedback' : ''"
              class="input"
            />
            <span :class="$v.form.password.$error ? 'showError' : 'hideError'"
              >Password is required</span
            >
            <div class="button">
              <button class="btn-login">Login</button>
            </div>
          </form>
        </div>
      </div>
    </template>
    
    <script>
    import { required } from 'vuelidate/lib/validators'
    
    export default {
      name: 'login',
      head() {
        return {
          title: 'Login',
          meta: [
            {
              hid: 'login',
              name: 'login',
              content: 'login content',
            },
          ],
        }
      },
      data: () => ({
        form: {
          username: '',
          password: '',
        },
      }),
      methods: {
        login() {
          this.$v.form.$touch()
          if (this.$v.form.$error) {
            return
          }
          console.log('success')
        },
      },
      mounted() {},
      validations: {
        form: {
          username: { required },
          password: { required },
        },
      },
    }
    </script>
    Ответ написан
  • Как верстать правильно если на компьютерах стоит разный зум в настройках windows?

    @postya Автор вопроса
    Решил вопрос таким способом. Добавил ещё одно разрешение для верстки, в котором указывается pixel ratio устройства. 1.25 - это 125% зум экрана

    @media (-webkit-min-device-pixel-ratio: 1.25) {
    h2 {
        font-size: 4rem;
      }
    }
    Ответ написан
    Комментировать
  • Push-уведомления, с посещаемостью меньше 5000 посетителей в месяц?

    @postya
    Вам push уведомления для чего нужны? чтобы показать новости сайта? Если да, то насколько часто вы эти новости постите на сайте. Если редко, в топку
    Лично я вообще отключил push уведомления в браузере, они меня раздражают)
    Ответ написан
    Комментировать
  • Почему CSS по-разному отображается на других комптютерах?

    @postya Автор вопроса
    Дико извеняюсь за свой вопрос, проблема была в том, что у людей был настроен разный масштаб отображения в браузере:D
    Ответ написан
    Комментировать
  • Как использовать тот же компонент множество раз, но с разными данными во Vue?

    @postya Автор вопроса
    благодаря наводке Rsa97 я нашёл решение:

    Дочерний компонент Connector.vue:

    <template>
      <div class="connector">
        <p>{{connector}}</p>
      </div>
    </template>
    
    <script>
      export default {
        name: "Connector",
        data() {
          return {
            sections: {
              length: ""
            },
          }
        },
        props: {
          connector: String
        }
      }
    </script>


    Родительский компонент Module.vue:
    <template>
      <div class="module">
           <Connector class="connector con1" :connector="input1"/>
        <Connector class="connector con2" :connector="input2"/>
        <Connector class="connector con3" :connector="output1"/>
        <Connector class="connector con4" :connector="output2"/>
      </div>
    </template>
    
    <script>
      import Connector from "components/Connector";
      export default {
        name: "Module",
        components: {Connector},
        data() {
          return {
            input1: 'input1',
            input2: 'input2',
            output1: 'output1',
            output2: 'output2'
          }
        }
      }
    </script>
    Ответ написан
  • Медиа запросы или разные компоненты во Vue проекте для адаптивности?

    @postya Автор вопроса
    Использовал вариант с применением разных компонентов для адаптивности и создал вызов функции при ресайзе окна так:

    created() {
        this.handleView();
        window.addEventListener("resize", this.handleView);
        console.log(this.pageView);
      },
      destroyed() {
        window.removeEventListener("resize", this.handleView);
        console.log(this.pageView);
      }
    Ответ написан
    Комментировать
  • Как сделать кастомный sqlite запрос в django rest?

    @postya Автор вопроса
    Благодаря наводке @Dr.Bacon я сделал чистый sql запрос таким способом:

    oldTableName = "api_category1"
    newTableName = "new_category1"
    
    createTable = 'CREATE TABLE {newTableName} ' \
                  '(id integer NOT NULL PRIMARY KEY AUTOINCREMENT, ' \
                  'question text NOT NULL, ' \
                  'answer text NOT NULL);'
    
    insertIntoTable = 'INSERT INTO {newTableName} (question, answer) SELECT question, answer FROM {oldTableName};'
    dropTable = 'DROP TABLE {oldTableName};'
    renameTable = 'ALTER TABLE {newTableName} RENAME TO {oldTableName};'
    
    class Category1Details(APIView):
        @staticmethod
        def get_object(self, id):
    
            try:
                return Category1.objects.get(id=id)
    
            except Category1.DoesNotExist:
                return HttpResponse(status=status.HTTP_404_NOT_FOUND)
    
        def get(self, request, id):
            question = self.get_object(self, id)
            serializer = Category1Serializer(question)
            return Response(serializer.data)
    
        def delete(self, request, id):
            category = self.get_object(self, id)
            oldTableName = "api_category1"
            newTableName = "new_category1"
            category.delete()
            cursor = connection.cursor()
            cursor.execute(createTable.format(newTableName=newTableName))
            cursor.execute(insertIntoTable.format(newTableName=newTableName, oldTableName=oldTableName))
            cursor.execute(dropTable.format(oldTableName=oldTableName))
            cursor.execute(renameTable.format(newTableName=newTableName, oldTableName=oldTableName))
            return Response(status=status.HTTP_204_NO_CONTENT)
    Ответ написан
  • Как изменить css в библиотеке, которую использует моё приложеине на netlify?

    @postya Автор вопроса
    Благодарю всех за ответы!
    Решил задачу следующим способом:
    в файле main.js , где я подключал vue toast notification я также подключил глобальный файл для css стилей( global.css)

    В этом файле Я могу видеть все классы от библиотеки .В нём я переопределил css селекторы.
    Но, из-за того,что файлы библиотеки имеют больший приоритет, то я для каждого переопределенного атрибута добавил флаг !important

    Пример:
    .notices .toast .toast-icon {
      height: 31px !important;
      width: 31px !important;
      min-width: 31px !important;
    }


    на Netlify все изменения удачно применились
    Ответ написан
    Комментировать
  • Как сделать адаптивный текст в блоке фиксированной ширины?

    @postya Автор вопроса
    я нашел решение задачи, применив подсказки qqFE и pupenne
    Только адаптировал всё под Vue js:

    Видео

    html:
    <div class="question-card" ref="card">
          <p
            class="question-text"
            ref="cardText"
            :style="{ fontSize: fontSize + 'rem' }"
          >
            {{ text }}
          </p>
        </div>


    в разделе script:
    <script>
    export default {
      beforeCreate() {
        this.calculateFontSize();
      },
      mounted() {
        this.calculateFontSize();
      },
      data: () => ({
        textWidth: 0,
        cardWidth: 0,
        cardHeight: 0,
        textHeight: 0,
        fontSize: 6,
        text:
          "there is an ejecting or lifting force, acting on a body immersed in a liquid or gas, which is equal to the weight of the volume of the liquid or gas displaced by the part of the body immersed in the liquid or gas –Law of Archimedes\n",
        options: {
          minSize: 11,
          maxSize: 120
        }
      }),
      created() {
        window.addEventListener("resize", this.calculateFontSize);
      },
      destroyed() {
        window.removeEventListener("resize", this.calculateFontSize);
      },
      methods: {
        calculateFontSize() {
          //get font size of text and card height
          let fontSize = this.fontSize;
          let textHeight = this.$refs.cardText.clientHeight;
          let cardHeight = this.$refs.card.clientHeight - 50;
    
          //compare card height and text height
          if (textHeight >= cardHeight) {
            this.fontSize = fontSize - 0.1;
          } else if (textHeight < cardHeight) {
            this.fontSize = fontSize + 0.1;
          }
    
          //apply card width and height to category text when resizing window
          this.cardWidth = this.$refs.card.clientWidth;
          this.cardHeight = this.$refs.card.clientHeight;
          this.textWidth = this.$refs.cardText.clientWidth;
          this.textHeight = this.$refs.cardText.clientHeight;
        }
      }
    };
    </script>

    Получаю текущий размер шрифта текста, высоту текста и высоту карточки:
    let fontSize = this.fontSize;
          let textHeight = this.$refs.cardText.clientHeight;
          let cardHeight = this.$refs.card.clientHeight - 50;


    при каждом резайзе окна браузера вызывается метод, который сравнивает, является ли высота текста больше, высоты карточки:
    if (textHeight >= cardHeight) {
            this.fontSize = fontSize - 0.1;
          } else if (textHeight < cardHeight) {
            this.fontSize = fontSize + 0.1;
          }


    Для временной отладки,чтобы посмотреть все размеры:
    this.cardWidth = this.$refs.card.clientWidth;
          this.cardHeight = this.$refs.card.clientHeight;
          this.textWidth = this.$refs.cardText.clientWidth;
          this.textHeight = this.$refs.cardText.clientHeight;
    Ответ написан
    Комментировать
  • Как тестировать слой контроллера в Spring Boot с Mockito?

    @postya Автор вопроса
    Нашел такое решение:

    import ga.rusanov.backend.model.Video;
    import ga.rusanov.backend.service.VideoService;
    import org.junit.jupiter.api.BeforeEach;
    import org.junit.jupiter.api.Test;
    import org.mockito.Mockito;
    import org.mockito.MockitoAnnotations;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
    import org.springframework.boot.test.mock.mockito.MockBean;
    import org.springframework.test.web.servlet.MockMvc;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import static org.hamcrest.Matchers.hasSize;
    import static org.mockito.BDDMockito.given;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
    
    @WebMvcTest(controllers = VideoController.class)
    class VideoControllerTest {
    
    
        @MockBean
        private VideoService videoService;
    
        @Autowired
        private MockMvc mockMvc;
    
        private List<Video> videoList;
    
        @BeforeEach()
         void setUp() throws Exception {
            MockitoAnnotations.initMocks(this);
    
            this.videoList = new ArrayList<>();
            this.videoList.add(new Video(1, "kultas", "https://webnsdf"));
            this.videoList.add(new Video(2, "joshua", "https://343heth"));
            this.videoList.add(new Video(3, "ambient mix", "https://ambientsome"));
        }
    
        @Test
        void shouldGetAllVideos() throws Exception{
    
            Mockito.when(videoService.findAll()).thenReturn(videoList);
    
            given(videoService.findAll()).willReturn(videoList);
            this.mockMvc.perform(get("/api/video/all"))
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("$.*", hasSize(3)));
        }
    }
    Ответ написан
    Комментировать