IndyIndyIndy/placeholder_images

View on GitHub
Resources/Public/JavaScript/FormBuilder.js

Summary

Maintainability
B
5 hrs
Test Coverage
/***
 *
 * This file is part of the "PlaceholderImages" Extension for TYPO3 CMS.
 *
 * For the full copyright and license information, please read the
 * LICENSE.txt file that was distributed with this source code.
 *
 *  (c) 2019 Christian Eßl <indy.essl@gmail.com>, https://christianessl.at
 *
 ***/

define(["jquery"],
    function($) {
        "use strict";

        var FormBuilder = {

        };
        var self = FormBuilder;

        /**
         * @param {Object} $target
         */
        FormBuilder.getFormMarkup = function($target) {
            return $('<div>')
                .attr('class', 'form-control-wrap')
                .append([
                    $('<div>')
                        .attr('class', 'row')
                        .append([
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('width', $target),
                                    self.getNumberInput('width', $target, 9999)
                                ]),
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('height', $target),
                                    self.getNumberInput('height', $target, 9999)
                                ]),
                        ]),
                    $('<div>')
                        .attr('class', 'row')
                        .append([
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('bgcolor', $target),
                                    self.getColorPicker('bgcolor', $target)
                                ]),
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('textcolor', $target),
                                    self.getColorPicker('textcolor', $target)
                                ]),
                        ]),
                    $('<div>')
                        .attr('class', 'row')
                        .append([
                            $('<div>')
                                .attr('class', 'form-group col-sm-12')
                                .append([
                                    self.getLabel('placeholder', $target),
                                    self.getTextInput('placeholder', $target)
                                ])
                        ]),
                    $('<div>')
                        .attr('class', 'row')
                        .append([
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('format', $target),
                                    self.getFormatSelect('format', $target)
                                ]),
                            $('<div>')
                                .attr('class', 'form-group col-sm-6')
                                .append([
                                    self.getLabel('count', $target),
                                    self.getNumberInput('count', $target, 10)
                                ])
                        ]),
                    $(  '<script>' +
                        '   requirejs(["TYPO3/CMS/PlaceholderImages/ModalValidation"], function(ModalValidation) {' +
                        '       ModalValidation.init();' +
                        '   });' +
                        '</script>')
                ]);
        };

        /**
         * @param {string} name
         * @param {Object} $target
         *
         * @return Object
         */
        FormBuilder.getLabel = function(name, $target) {
            return $('<label>').html($target.data(name + '-text'));
        };

        /**
         * @param {string} name
         * @param {Object} $target
         *
         * @return Object
         */
        FormBuilder.getTextInput = function(name, $target) {
            return $('<input>')
                .attr('type', 'text')
                .attr('class', 'form-control ' + name)
                .attr('value', $target.data(name + '-default'))
                .attr('placeholder', $target.data(name + '-text'));
        };

        /**
         * @param {string} name
         * @param {Object} $target
         * @param {int} max
         *
         * @return Object
         */
        FormBuilder.getNumberInput = function(name, $target, max) {
            return $('<input>')
                .attr('type', 'number')
                .attr('min', 1)
                .attr('max', max)
                .attr('class', 'form-control t3js-number ' + name)
                .attr('value', $target.data(name + '-default'))
                .attr('placeholder', $target.data(name + '-text'));
        };

        /**
         * @param {string} name
         * @param {Object} $target
         *
         * @return Object
         */
        FormBuilder.getColorPicker = function(name, $target) {
            return $('<input>')
                .attr('type', 'text')
                .attr('class', 'form-control t3js-color-picker formengine-colorpickerelement ' + name)
                .attr('value', $target.data(name + '-default'))
                .attr('placeholder', $target.data(name + '-text'));
        };

        /**
         * @param {string} name
         * @param {Object} $target
         *
         * @return Object
         */
        FormBuilder.getFormatSelect = function(name, $target) {
            var defaultValue = $target.data(name + '-default');

            return $('<select>')
                .attr('class', 'form-control ' + name)
                .append([
                    self.getOption('png', defaultValue),
                    self.getOption('jpg', defaultValue),
                    self.getOption('gif', defaultValue),
                ]);
        };

        /**
         * @param {string} value
         * @param {string} defaultValue
         *
         * @return string
         */
        FormBuilder.getOption = function(value, defaultValue) {
            var selected = (value === defaultValue);
            return '<option value"'+value+'" ' + selected + '>'+value+'</option>';
        };

        return FormBuilder;
});