Задать вопрос
  • Как в слайдере вывести количество точек отличное от количества слайдов?

    @malayamarisha Автор вопроса
    Спасибо большое за развернутый ответ и предоставленный код, как раз то что нужно

    // Show dots of given amount
        const dotsVisible = 6;
        const dotsContainer = document.querySelector('.w-slider-nav');
        const sideVisible = Math.floor(dotsVisible / 2);
        let startFlipping = data.index > sideVisible ? data.index - sideVisible : 0;
        let endFlipping = startFlipping + dotsVisible - 1;
        if (endFlipping >= data.pages) {
          startFlipping = data.pages - dotsVisible;
        }
        [...dotsContainer.querySelectorAll('.w-slider-dot')]
          .forEach((dot, index) => {
              dot.classList.toggle('w-hidden', index < startFlipping || index > endFlipping);
          });
  • Как в слайдере вывести количество точек отличное от количества слайдов?

    @malayamarisha Автор вопроса
    Антон Литвиненко,
    Есть блок, в котором выводятся точки слайдера:
    data.nav = $el.children(data.sliderNavClass ? data.sliderNavClass: '.w-slider-nav');

    Точки добавляются на страницу след образом: data.nav.empty().append(dots);
    Пытаюсь добавить точки в блок slider-line<div class="slider-line"></div>, для того, чтобы скрыть точки, которые не вмещаются в размер блока. И при пролистывании слайдера эти точки тоже будут листаться. Но пока не выходит.
    Точки в блок пытаюсь добавить так:
    var sliderLineTest = document.querySelector('.slider-line')
        data.nav.append(slider-line);
  • Как в слайдере вывести количество точек отличное от количества слайдов?

    @malayamarisha Автор вопроса
    Антон Литвиненко, спасибо за идею )
    Возможно, не совсем понимаю, как сделать последние 2 с конца )
    Пример, есть слайдер и у него 8 слайдов, тогда да, 2 с конца подходит и будет выводиться 6 точек. Но если у меня 20 слайдов и нужно вывести только 6 точек, то как быть?
  • Как в слайдере вывести количество точек отличное от количества слайдов?

    @malayamarisha Автор вопроса
    Спасибо, для определенного количества слайдов самое то
    Вот только у меня n слайдов) И при пролистывании слайдера активная точка не видна, тк скрыты все последующие.
    Именно для того, чтобы вместе со слайдом двигались точки пытаюсь точки вынести в отдельный блок и смещать точки на px равное ширине точки. Пока безрезультатно.
  • Как показать/спрятать блок каждые 5 сек и одновременно менять информацию в блоке?

    @malayamarisha Автор вопроса
    0xD34F, в любом случае спасибо большое, буду думать )
  • Как показать/спрятать блок каждые 5 сек и одновременно менять информацию в блоке?

    @malayamarisha Автор вопроса
    Спасибо большое, то что нужно

    Немного скорректирован по добавлению/удалению класса _active для modal
    let index = -1;
    setInterval((el) => {
        const show = !modalWindow.classList.contains('_active'); // true/ false
        index = (index + show) % infoModal.length;
        el.innerText = infoModal[index].title;
        modalWindow.classList.toggle('_active', show);
    }, 5000, document.querySelector('.modal__title'));


    Если, к примеру, нужно скрывать блок каждый раз через5 сек, а показывать блок через рандомный промежуток времени?
  • Как подружить webpack 5 и sprite.svg?

    @malayamarisha Автор вопроса
    Надо бы разделить, например с помощью resourceQuery: '?sprite'
    - если верно понимаю:
    {
                    test: /\.(jpe?g|png|webp|gif|svg)$/i,
                    resourceQuery: '',
                    use: [
                        {
                            loader: 'image-webpack-loader',
                            options: {
                                mozjpeg: {
                                    progressive: true,
                                },
                                // optipng.enabled: false will disable optipng
                                optipng: {
                                    enabled: false,
                                },
                                pngquant: {
                                    quality: [0.65, 0.90],
                                    speed: 4
                                },
                                gifsicle: {
                                    interlaced: false,
                                },
                                // the webp option will enable WEBP
                                webp: {
                                    quality: 75
                                }
                            }
                        }
                    ],
                    type: 'asset/resource',
                },
    {
                    test: /\.svg$/,
                    loader: 'svg-sprite-loader',
                    resourceQuery: '?sprite',
                    options: {
                        extract : true ,
                        publicPath : '/assets/'
                    }
                }

    В index.js добавлен import iconName from './img/sprite.svg?sprite'.

    Если вывести iconName в консоль 6309b5f798f52036230552.png. svg создается с другой структурой 6309b51b45c3f535825697.png

    Если не добавлять import iconName from './img/sprite.svg?sprite', то svg рабочий (если выводить с помощью use в html), но в background-image: url("./img/sprite.svg#search") все равно пустой
  • Как подружить webpack 5 и sprite.svg?

    @malayamarisha Автор вопроса
    Антон Антон, в проекте физически папки assets отсутствует. Папка генерируется автоматически (assetModuleFilename: 'assets/[name][ext]').
    Изначально, все изображения лежат в img.
    Assets физически создается только при "build:dev": "set NODE_ENV=development&&webpack" или "build:prod": "set NODE_ENV=production&&webpack",
    При start-e проекта ("start": "set NODE_ENV=development&&webpack serve"), физически папки assets также нет, но в публичной части ссылается на localhost:3000/assets/sprite.svg#search

    а лучше - генери через https://www.npmjs.com/package/webpack5-svg-sprite
    - установлен:
    const SpriteLoaderPlugin = require('svg-sprite-loader/plugin');
    plugins: [
            new SpriteLoaderPlugin()
        ],
    
    .......
     {
                    test: /\.svg$/,
                    loader: 'svg-sprite-loader',
                    options: {
                        extract : true ,
                        publicPath : '/'
                    }
                }

    Переходя по localhost:3000/assets/sprite.svg#search ошибка:
    This page contains the following errors: error on line 1 at column 1: Document is empty. Below is a rendering of the page up to the first error.
    Если собрать проект (build:prod), то svg не пустой, но с отличающейся от исходника структурой .
  • Как подружить webpack 5 и sprite.svg?

    @malayamarisha Автор вопроса
    Антон Антон, sprite.svg изначально был создан вручную, точно рабочий )
    Пример:
    <svg display="none" xmlns="http://www.w3.org/2000/svg">
           <symbol id="search" viewBox="0 0 512.005 512.005">
            <path d="M505.749 475.587l-145.6-145.6c28.203-34.837 45.184-79.104 45.184-127.317C405.333 90.926 314.41.003 202.666.003S0 90.925 0 202.669s90.923 202.667 202.667 202.667c48.213 0 92.48-16.981 127.317-45.184l145.6 145.6c4.16 4.16 9.621 6.251 15.083 6.251s10.923-2.091 15.083-6.251c8.341-8.341 8.341-21.824-.001-30.165zM202.667 362.669c-88.235 0-160-71.765-160-160s71.765-160 160-160 160 71.765 160 160-71.766 160-160 160z"/>
        </symbol>
    </svg>


    Да, в прод можно будет скопировать. Но сейчас на стадии разработки необходимо поработать с иконками, а они не отображаются.

    С jpg проблем нет (в scss указан путь background: url("img/code9.jpg") center no-repeat;), в публичной части localhost:3000/assets/code9.jpg

    А вот с svg проблема (в scss background-image: url("img/sprite.svg#search");), в публичной части localhost:3000/assets/sprite.svg#search, но при переходе по ссылке "This XML file does not appear to have any style information associated with it. The document tree is shown below.".
    Для тестирования собираю проект и вижу, что svg пустой.

    webpack.config.js
    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    
    const mode = process.env.NODE_ENV || 'development';
    
    const devMode = mode === 'development';
    
    const target = devMode ? 'web' : 'browserslist';
    const devtool = devMode ? 'source-map' : undefined;
    
    module.exports = {
        mode,
        target,
        devtool,
        devServer: {
            port: 3000,
            open: true,
            hot: true,
        },
        entry: ["@babel/polyfill", path.resolve(__dirname, 'src', 'index.js')],
        output: {
            path: path.resolve(__dirname, 'dist'),
            clean: true,
            filename: '[name].[contenthash].js',
            assetModuleFilename: 'assets/[name][ext]'
        },
        plugins: [
            new HtmlWebpackPlugin({
                template: path.resolve(__dirname, 'src', 'index.html')
            }),
            new MiniCssExtractPlugin({
                filename: '[name].[contenthash].css',
            })
        ],
        module: {
            rules: [
                {
                    test: /\.html$/i,
                    loader: 'html-loader',
                },
                {
                    test: /\.(c|sa|sc)ss$/i,
                    use: [
                        devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
                        'css-loader',
                        {
                            loader: "postcss-loader",
                            options: {
                                postcssOptions: {
                                    plugins: [require('postcss-preset-env')],
                                }
                            }
                        },
                        'sass-loader',
                    ],
                },
                {
                    test: /\.woff2?$/i,
                    type: 'asset/resource',
                    generator: {
                        filename: 'fonts/[name][ext]'
                    }
                },
                {
                    test: /\.(jpe?g|png|webp|gif|svg)$/i,
                    use: [
                        {
                            loader: 'image-webpack-loader',
                            options: {
                                mozjpeg: {
                                    progressive: true,
                                },
                                // optipng.enabled: false will disable optipng
                                optipng: {
                                    enabled: false,
                                },
                                pngquant: {
                                    quality: [0.65, 0.90],
                                    speed: 4
                                },
                                gifsicle: {
                                    interlaced: false,
                                },
                                // the webp option will enable WEBP
                                webp: {
                                    quality: 75
                                }
                            }
                        }
                    ],
                    type: 'asset/resource',
                },
                {
                    test: /\.m?js$/i,
                    exclude: /(node_modules|bower_components)/,
                    use: {
                        loader: 'babel-loader',
                        options: {
                            presets: ['@babel/preset-env']
                        }
                    }
                },
            ]
        }
    }
  • Возможно ли передать значение интерполяции в другой компонент?

    @malayamarisha Автор вопроса
    Спасибо, то что нужно
    Смутило просто, что информация получена в шаблоне с помощью *ngFor
  • На чем писать backend для интернет-магазина на Angular?

    @malayamarisha Автор вопроса
    imdeveloper, вы правы, по большей части возникает вопрос взаимодействия с бэком.
    Хотелось бы начать проект с верного и наиболее распространенного решения, чтобы в дальнейшем не пришлось полностью переделывать.
  • На чем писать backend для интернет-магазина на Angular?

    @malayamarisha Автор вопроса
    Спасибо за ответ.
    К примеру, есть знания в java. Как "подружить" angular с java?
  • Как решить ошибку undefined' is not assignable to type 'CdkTableDataSourceInput' и почему она возникла?

    @malayamarisha Автор вопроса
    dataSource = (new MatTableDataSource([])) as any
    - кажется удалось решить проблему c помощью Вашей помощи )

    Шаблон:
    <table cdk-table [dataSource]="dataSource">
    
            <!--  цвет приоритета  -->
            <ng-container cdkColumnDef="color">
              <th cdk-header-cell *cdkHeaderCellDef>111111111</th>
              <td cdk-cell *cdkCellDef="let task" [style.background-color]="getPriorityColor(task)"></td>
            </ng-container>
    //остальные колонки
    </table>


    Компонент:
    export class TasksComponent implements OnInit {
      public displayedColumns: string[] = ['color', 'id', 'title', 'date', 'priority', 'category'];
      public dataSource: MatTableDataSource<Task> = new MatTableDataSource<Task>()
      tasks?: Task[]
    
      constructor(private dataHandler: DataHandlerService) {
      }
    
      ngOnInit() {
        this.dataHandler.tasksSubject.subscribe(tasks => this.tasks = tasks)
        this.dataSource = new MatTableDataSource<Task>(this.tasks)
    
        this.refreshTable()
      }
    
      toggleClickCompleted(task: Task) {
        task.completed = !task.completed
      }
    
      getPriorityColor(task: Task) {
    
        if (task.priority && task.priority.color) {
          return task.priority.color
        }
    
        return '#fff'
      }
    
      private refreshTable() {
      }
    }
  • Как решить ошибку undefined' is not assignable to type 'CdkTableDataSourceInput' и почему она возникла?

    @malayamarisha Автор вопроса
    Ваш компилятор ts, видимо настроен более строже.
    - может есть возможность скорректировать настройки?

    dataSource = (new MatTableDataSource([])) as any
    - так ошибки нет, выводится только шапка таблицы(<cdk-table [dataSource]="dataSource">)
    В консоли вижу
    <table _ngcontent-adt-c134="" cdk-table="" class="cdk-table" role="table" ng-reflect-data-source="[object Object]">


    dataSource = ((new MatTableDataSource([])) as any) as CdkTableDataSourceInput
    - так "Cannot find name 'CdkTableDataSourceInput'". С помощью IDE можно создать класс/интерфейс
  • Как решить ошибку undefined' is not assignable to type 'CdkTableDataSourceInput' и почему она возникла?

    @malayamarisha Автор вопроса
    Вам нужно зайти в компонент table
    - кажется я запуталась ) Не в компоненте tasks?

    В tasks.component.ts пробую разные варианты:
    public dataSource?: MatTableDataSource<Task> = new MatTableDataSource<Task>([]) //первый вариант

    public dataSource?: MatTableDataSource<Task> //второй вариант


    В tasks.component.ts
    <cdk-table [dataSource]="dataSource">
    Я искренне не понимаю, почему на stackblitz всё работает
    Ссылка на рабочий код, в котором используется
    <table>, но dataSource: MatTableDataSource<Task> = new MatTableDataSource<Task>([])


    Я вижу в документации, что если использовать просто тег table, то должен использоваться атрибут cdk
    - подскажите, пожалуйста, где указано в документации? Не исключено, что не там смотрю. В версиях 13 и 12 в качестве примеров указаны с тегами table

    <table mat-table [dataSource]="dataSource" class="mat-elevation-z8"> //12 версия, у меня 12
    <table cdk-table [dataSource]="dataSource"> //13 версия
  • Как решить ошибку undefined' is not assignable to type 'CdkTableDataSourceInput' и почему она возникла?

    @malayamarisha Автор вопроса
    В шаблоне есть таблица
    <table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
    </table>

    В компоненте dataSource: MatTableDataSource
    Данные Task:
    static tasks: Task[] = [
        {
          id: 1,
          title: 'Залить бензин полный бак',
          priority: TestData.priorities[2],
          completed: false,
          category: TestData.categories[9],
          date: new Date('2019-04-10')
        },
    
        {
          id: 2,
          title: 'Передать отчеты начальнику управления',
          priority: TestData.priorities[0],
          completed: false,
          category: TestData.categories[0],
          date: new Date('2019-04-11')
        }
    ]


    Подскажите, пожалуйста, как исправить?
    Делаю по документации angular material, там нет упоминаний про cdk

    Наблюдение:
    Если, к примеру, в компоненте указать массив задача напрямую (newTasks=[{},{},{}]) и в шаблоне [dataSource]="newTasks", то ошибок нет.
    Если в компоненте указать tasks?: Task[] и в шаблоне [dataSource]="tasks", то возникает ошибка.
    При выводе в консоль newTasks и tasks содержат одинаковую структуру и данные.
  • Каким образом сделать проверку номера телефона США с помощью регулярки?

    @malayamarisha Автор вопроса
    Rsa97, это гениально ) То, что нужно
    Спасибо огромное
  • Каким образом сделать проверку номера телефона США с помощью регулярки?

    @malayamarisha Автор вопроса
    Хорошая штука )
    Только вот пропускает:
    1 555-555-5555 //должно вернуться true
    1 (555) 555-5555 //должно вернуться true
    1(555)555-5555 //должно вернуться true
    Видимо с помощь регулярки и правда никак не решить.

    function telephoneCheck(str) {
      let regExp = /^(?:\d{3}-\d{3}-\d{4}|(?:1 )?\d{3} \d{3} \d{4}|\(\d{3}\) ?\d{3}-\d{4}|\d{10})$/
        return regExp.test(str)
    }
    telephoneCheck("1 555-555-5555")
  • Каким образом сделать проверку номера телефона США с помощью регулярки?

    @malayamarisha Автор вопроса
    при помощи регулярки невозможно проверить парность скобок
    - спасибо за информацию, теперь буду знать, что невозможно проверить на парность скобок.
    Эту задачу действительно необходимо решить при помощи одной регулярки?
    - задачу нужно решить, не обязательно с помощью регулярки, но это первое, что пришло на ум.
    Подскажите, есть варианты, как другим образом решить?
  • Каким образом сделать проверку номера телефона США с помощью регулярки?

    @malayamarisha Автор вопроса
    Можно так: ^((1)\s)?\(?\d{3}\)?[\s-]{0,1}\d{3}[\s-]{0,1}\d{4}$
    Но тут пропускает:
    console.log(telephoneCheck("1 555)555-5555"))//должно вернуться false
    console.log(telephoneCheck("1(555)555-5555"))//должно вернуться true
    console.log(telephoneCheck("555)-555-5555"))//должно вернуться false
    console.log(telephoneCheck("(555-555-5555"))//должно вернуться false