Giter VIP home page Giter VIP logo

konstruct's Introduction

Konstruct - конструктор конструкторов

Виджет для создания конструкторов с обширными возможностями.

Подключение

Собранный скрипт последней версии всегда находится по пути https://github.com/poalrom/konstruct/blob/gh-pages/build/bundle.js

Можно подключить напрямую с github

<script src='https://raw.githubusercontent.com/poalrom/konstruct/gh-pages/build/bundle.js'></script>

Отображение

Для отображения необходимо вызвать функцию render, передав в нее селектор элемента, в который нужно встроить конструктор и настройки конструктора.

window.konstruct.render('.konstruct', konstructConfig);

Настройки

Настройки содержат несколько основных полей:

  • action - значение атрибута action основного тега form
  • saveButtonText - текст кнопки сохранения конструктора
  • onSubmit - обработчик сохранения конструктора
  • blocks - описание блоков конструктора
  • debug - опции для отладки

Обработчик сохранения

Функция принимает на вход объект, где ключами являются заголовки блоков, а значениями - выбранные параметры.
Для блоков с текстовыми полями в значении находится объект с ключам-заголовками полей и значениями этих полей.

Блоки конструктора

Блок - один этап конструктора. Бывает разных типов. Имеет общие поля:

{
    // Уникальный идентификатор среди всех блоков
    id: 'width',
    // Массив условий, при которых этот блок будет отображаться
    // Может быть несколько условий, они объединяются через логическое "И"
    // Если хотя бы одно условие не выполняется, блока нет в DOM
    conditions: [{
        // Идентификатор блока, значение для которого нужно проверять
        id: 'type',
        // Значение блока с указанным идентификатором, при котором этот блок будет виден
        value: 'Framewall'
    }],
    // Тип блока
    type: 'select',
    // Заголовок блока. Поддерживает HTML, отображается в теге <h2> в начале блока
    title: 'CHOOSE A WIDTH',
    // Описание блока. Поддерживает HTML и шаблоны, отображается в теге <p> под заголовком
    description: 'Lorem ipsum dolor sit amet.',
}

Блок type select

Блок выбора одного из вариантов. Может отображать картинку выбранного варианта. Имеет поле values, где указываются варианты для выбора:

{
    // Массив значений выбора
    values: [{
        // Значение, должно быть уникально внутри одного блока
        // Используется для conditions
        value: 'Shift',
        // Текст варианта. Отображается внутри блока выбора, поддерживает HTML
        // Если отсутствует, то отображается value
        text: 'Shift',
        // Путь до изображения. Поддерживает шаблоны
        // Если отсутствует, то при выборе варианта изображение не будет отображаться
        img: 'raz'
    }, {
        value: 'Framewall',
        text: 'Framewall',
    }, {
        value: 'Chisel',
        text: 'Chisel'
    }],
    // Флаг, при установке которого убирается изображение финального результата,
    // а у каждого варианта появляется собственное изображение
    showImages: true,
}

Блок type fields

Блок текстовых полей ввода. Всё, что можно отобразить в качестве input, можно сделать через этот блок. Имеет поле fields, описывающее поля ввода:

{
    // Текст для кнопки перехода к следующему шагу
    // Вызывает отправку события update без поля path
    // Подробнее в блок про события
    nextStepButtonText: 'Далее',
    // Список полей ввода
    fields: [{
        // Уникальный идентификатор всреди этого блока полей ввода
        id: 'width',
        // Название поля. Отображается в теге <label> над полем ввода, поддерживает HTML
        title: 'Ширина',
        // Атрибуты, которые пробросятся напрямую в тег input
        attributes: {
            type: 'number',
            required: true,
            value: 3
        }
    }, {
        id: 'height',
        title: 'Высота',
        attributes: {
            type: 'number',
            required: true,
        }
    }]
}

Блок type image

Блок отображения картинки. Отлично подходит для отображения финального результата работы конструктора. Имеет поле img, которое принимает путь изображения. Поддерживает шаблоны

Шаблоны

Во все строки, которые поддерживают шаблоны, можно вставлять значения других блоков. Пример:

{
    //...
    img: "/images/{type}/{contacts.city}/result.jpg",
    //...
}

В этом примере на место {type} подставится значение блока с идентификатором type, а на место {contacts.city} - значение поля city блока списка полей с идентификатором contacts.

Для уточнения:

  • {id} - вставить значение блока типа select с идентификатором id
  • {blockId.fieldId} - найти блок с типом fields и идентификатором blockId и получить значение поля с идентификатором fieldId и вставить его на это место

События

Плагин вызывает всплывающие события на корневом элементе создаваемой формы.
Поддерживаемые типы событий:

  • init - событие рендера формы. Без дополнительных полей
  • update - событие обновления поля, либо нажатия на кнопку перехода к следующему шагу.

Событие update содержит следующие дополнительные данные в поле detail:

  • blockId - ID блока, значение которого было обновлено
  • blockType - тип обновленного блока
  • path - присутствует, если было обновлено поле в блоке fields и соответствует {ID блока}.{ID поля}. Отсутствует при нажатии на кнопку перехода к следующему шагу в блоке fields

Опции отладки

  • logUpdates - флаг логгирования изменений значений в реальном времени. Нужен, если где-то что-то не прорастает
  • placeholdImages - флаг заменяет все изображения в блоках на заглушки с текстом пути, который для них формируется

konstruct's People

Contributors

poalrom avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.